distcp集群遷移問題總結

2021-10-04 10:23:43 字數 4413 閱讀 8546

1.源集群準備一台用於提交資料拷貝任務的機器,要求可以連線目標大資料集群且安裝json命令

尋找:datanode的機器 且驗證一下上面安裝了json的命令

hdfs dfs -dipc.client.fallback-to-******-auth-allowed=

true

-ls hdfs:

//namenode**:

8020

/訪問的是重慶的集群,客戶端模式(動態配置)

也可以訪問hdfs上面

hdfs dfs -ls hdfs:

//namenode**:

8020

/

互通之後,自己又建立了乙個資料夾hello

放入一定量的資料,先進行傳輸,看是都正常,會有哪些問題

登入到的機器上面,

執行:hdfs dfsadmin -allowsnapshot /user/hadoop/hello

你會發現,這個命令dfsadmin -allowsnapshot不可以 你需要用這台機器的root許可權去做

ddp-dn-034:~ # hdfs dfsadmin -allowsnapshot /user/hadoop/hello

這個命令如果你的上級檔案目錄執行,後面的都不需要執行了

allowing snaphot on /user/hadoop/hello succeeded

命令執行者要用

manage@ddp-dn-

034:

~> klist

ticket cache: file:

/tmp/krb5cc_1009

default principal: [email protected]

hadoop distcp -update -skipcrccheck -delete -m 26

-dipc.client.fallback-to-******-auth-allowed=

true

-strategy dynamic -bandwidth 100

/user/hadoop/hello hdfs:

8020

/user/hadoop/hello

你會發現傳輸成功的

我們之前試驗的hello資料夾,肯定是沒有實際的資料量多的

如果要傳輸的資料量達到300萬以上,甚至更大的時候

300萬,如果你們的client jvm heap size只有2g的話,會oom

是調節client jvm heap size的大小,還是減少資料量的傳輸

都可以。

相對而言,調節client jvm heap size大小更快。

300萬,調節多少為合適

5g 左右。

(這個是經驗值 )

這個只需要調整你要傳輸的臺機器就而已

hadoop-env.sh 檔案下新增為5g

/etc/hadoop/conf/hadoop-env.sh

export hadoop_heapsize=

"5120"

hdfs dfs -createsnapshot /user/hadoop/ods  s20200206
hadoop distcp -ddfs.client.use.datanode.hostname=

true

-dipc.client.fallback-to-******-auth-allowed=

true

-update -skipcrccheck -delete -m 50

-strategy dynamic /user/hadoop/ods/

.snapshot/s20200206 hdfs:

8020

/user/hadoop/ods

這裡會設計到網速的傳播速度是不夠的

map這個數量可以提公升

-bandwidth:頻寬也可以去掉

增加引數:-ddistcp.dynamic.max.chunks.tolerable=10000

map在增大的時候,要加上以上的引數

檢視資料大小

hdfs dfs -dipc.client.fallback-to-******-auth-allowed=

true

-du -s -h hdfs:

8020

/user/hadoop/hello

其實這裡也發現乙個問題

hdfs dfs -du -s -h /user/hadoop/hello
資料傳輸到後面,有一些map很長時間,速度也很慢,就要刪掉-strategy dynamic

以上問題:整體做乙個目錄的傳輸

hdfs dfsadmin -allowsnapshot /user/hive/warehouse/dwd_kesheng.db

hdfs dfs -createsnapshot /user/hive/warehouse/dwd_kesheng.db s20200210

hadoop distcp -ddfs.client.use.datanode.hostname=

true

-dipc.client.fallback-to-******-auth-allowed=

true

-ddistcp.dynamic.max.chunks.tolerable=

10000

-update -skipcrccheck -delete -m 500

/user/hive/warehouse/dwd_kesheng.db/

.snapshot/s20200210 hdfs:

8020

/user/hive/warehouse/dwd_kesheng.db

查詢資料量

hdfs dfs -dipc.client.fallback-to-******-auth-allowed=

true

-du -s -h hdfs:

8020

/user/hive/warehouse/dwd_kesheng.db

hdfs dfs -du -s -h /user/hive/warehouse/dwd_kesheng.db

ods層資料遷移完成

刪除快照

hdfs dfs -deletesnapshot /user/hadoop/ods s20200206

不允許建立目錄的快照。 在禁用快照之前,必須刪除目錄的所有快照。

hdfs dfsadmin -disallowsnapshot /user/hadoop/ods

這裡由於資料量傳輸比較龐大,需要的時間也是很漫長的,這裡需要做乙個監控的指令碼,實時監控傳輸的程序問題,

需要注意2點:

1)是監控指令碼設計的時間,由於資料量很大,所以在啟動的時候,需要很長的時間(1個小時)那麼你有對應的指令碼就需要1.5h或者2h,並且我在傳輸中發現,隨著你的你資料的傳輸,你啟動的時間也會越來越長 隨之你的指令碼時間也要調整

2)後期僅僅剩幾個map的時候,這裡傳輸速度就降下來了,這裡速度慢下來是正常現象,當然也可以有解決方法,後面介紹

你的監控指令碼就可以停止了,防止再次啟動,為什麼,因為你的map是相當大的,一旦多起動幾個,你的資源池受不了的

對warehouse進行傳輸的時候

在我傳輸過程中,他們對目標資料進行了操作,小檔案合併

導致我這邊快照的時候,mop增加,之前合併的小檔案,又重新傳輸的問題

下次在考慮的時候,要設計很多的問題

由於資料量傳輸巨大,時間耗費長,定期合併指令碼時間短,

解決方法:肯定是合併指令碼時間拉長,等我這邊傳輸完在做

我做的快照時間 是固定的

隨著時間的推移,目標路徑有些數倉的的資料是覆蓋的這種型別

一旦我傳輸的資料沒有了,那肯定是會在傳輸的

這樣就會導致目標路徑下面的資料混亂問題,

解決方法:

在傳輸的這個過程中資料一定是有一點問題的

如果這個部分資料出一些報表的話,資料如果想要更加準確

在這個之前多加幾部操作,去重和拉時間最新的時間

去做報表,資料相對來說更準確一些

後期快照解除,拉鍊表這類的覆蓋性質的表,在updata

因為集群打通了,可以使用scp傳輸一些關鍵的檔案 (只要 你知道目標機器的密碼)

還有在最後剩下的幾個map的時候,怎麼可以開始傳完

其實在這裡,你可以看大yarn他map對應cp的資料檔案

在啟動乙個distcp 不做快照,針對對應的資料夾

也是使用這種方法進行後期資料的補充

快照固定的資料正常傳輸,之後又新增的資料,備份2份,目標路徑和源路徑各乙份,出報表時候,先用源路徑,保證資料的準確,

快照把握的原則是不能mv和del

集群間資料遷移工具distcp用法介紹

最近公司集群切換,需要將老集群中的資料遷移到新集群上,了解到了distcp這個工具。借助它很好的完成了遷移任務。基礎用法如下 hadoop distcp hdfs cluster1 9000 stat hdfs cluster2 9000 這裡就是把cluster1中的stat拷貝到cluster2...

distcp資料遷移方案

資料遷移distcp方案 根據遷移的實際情況,由於資料量大 重要 迫切性,因此實施方案每一步都需嚴謹執行,並且當出錯時清楚缺少的資料和補救的辦法。大的步驟分為3步,即export distcp import。在export匯出資料時,以時間戳作為引數,如將三個月的資料為乙個單位匯出,出錯時,重複執行...

跨集群 distcp命令

兩個集群之間做資料同步,而且兩個集群之間的版本不一致,這個時候使用的是hftp協議或者webhdfs協議!如果試圖在兩個執行著不同hdfs版本的集群上使用distcp命令來複製資料並使用hdfs協議,複製作業會失敗,因為兩個系統版本的rpc是不相容的。要想彌補這種情況,1 使用htfp協議 可以使用...