hadoop distcp 備份hdfs檔案,並行複製大量資料。
1.同版本集群之間複製 :
hadoop distcp hdfs://namenode1/src hdfs://namenode2/dist這將從第乙個集群中複製/src目錄下的內容複製到第二個集群中的/dist目錄下
預設情況下,distcp會跳過目標路徑已經有的檔案,但可以通過提供的-overwrite選項進行覆蓋,也可以用-update選項來選擇只更新那些修改過的檔案。
第乙個集群的子樹/src下的乙個檔案與第二個集群的改變進行同步。
hadoop distcp -update hdfs://namenode1/src hdfs://namenode2/distdistcp是作為乙個mapreduce作業執行的,複製工作由集群中並行執行的map來完成。這裡沒有reducer。每個檔案都由乙個單一的map進行複製,並且distcp通過將檔案分成大致相等的檔案來為每個map數量大致相同的資料。
map的數量確定:
通過讓每乙個map複製數量合理的資料以最小化任務建立所涉及的開銷,是乙個很好的想法,所以每個map的副本至少為256mb。例如,1gb的檔案被分成4個map任務。如果資料很大,為限制頻寬和集群的使用而限制對映的資料就變得很有必要。map預設的最大數量是每個集群節點(tasktracker)有20個。例如,複製1000gb的檔案到乙個100個節點的集群,會分配2000個map(每個節點20個map),所以平均每個會複製512mb。通過對distcp指定-m引數,會減少對映的分配數量。例如,-m 1000會分配1000個map,平均每個複製1gb。
2.不同版本之前複製
不同版本hdfs的集群上利用distcp,使用hdfs協議是會失敗的,因為rpc系統是不相容的。想要彌補這種情況,可以使用基於http的hftp檔案系統從源中進行讀取。這個作業必須執行在目標集群上,使得hdfs rpc版本是相容的。使用hftp重複前面的例子:
hadoop distcp hftp://namenode1:50070/src hdfs://namenode2/dist注意,需要在uri源中指定名稱節點的web埠。這是由dfs.http.address的屬性決定的,預設值為50070。
保持hdfs集群的平衡
向hdfs複製資料時,考慮集群的平衡相當重要。檔案塊在集群中均勻地分布時,hdfs能達到最佳工作狀態。回顧前面1000 gb資料的例子,通過指定-m選項為1,即由乙個單一的map執行複製工作,它的意思是,不考慮速度變慢和未充分利用集群資源,每個塊的第乙個副本會儲存在執行map的節點上(直到磁碟被填滿)。第二和第三個副本分散在集群中,但這乙個節點並不會平衡。通過讓map的數量多於集群中節點的數量,我們便可避免這個問題。鑑於此,最好首先就用預設的每個節點20個map這個預設設定來執行distcp。
然而,這也並不總能阻止乙個集群變得不平衡。也許想限制map的數量以便一些節點可以被其他作業使用。若是這樣,可以使用balancer工具繼續改善集群中塊的分布。
hadoop 資料遷移
distcp 分布式拷貝 是用於大規模集群內部和集群之間拷貝的工具。它使用map reduce實現檔案分發,錯誤處理和恢復,以及報告生成。它把檔案和目錄的列表作為map任務的輸入,每個任務會完成源列表中部分檔案的拷貝。由於使用了map reduce方法,這個工具在語義和執行上都會有特殊的地方。這篇文...
hadoop間資料遷移
具體操作 使用distcp命令跨hdfs遷移資料 在 hadoop 版本不一致時,distcp 命令也不一樣 使用詳情參看官網 distcp有多中資料複製模式 hdfs,http,hftp 目標端hadoop需要賦予外來使用者對資料夾寫入的許可權,hadoop fs chmod 755 x 1 同版...
Hadoop集群間HBase資料遷移
背景 hbase cluster1 hbase cluster2 利用hbase的snapshots功能,進行集群之間的hbase資料前移 1.開啟snapshots功能 0.95及以上版本預設開啟了 hbase.snapshot.enabledname truevalue property 2.建...