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協議 可以使用...