hdfs 跨集羣數據遷移

背景

測試環境數據缺失,需從開發環境同步數據過去,考慮採用Hadoop自帶的數據遷移工具

分析

遷移數據評估

開發環境數據比較雜亂,不是所有數據都需要遷移,且全部遷移即浪費時間,又沒有價值,根據時間情況按庫(甚至按表)進行遷移

遷移工具

使用Hadoop自帶數據遷移工具Distcp,只需要簡單的命令即可完成數據遷移。

hadoop distcp hdfs://nn1:8020/dir1 hdfs://nn2:8020/dir2

如果dir2目錄不存在,按照dir1的目錄創建
如果dir2目錄存在,則在dir2目錄下創建dir1的目錄,即變爲dir2/dir1,也可以通過指定 -overwrite強制覆蓋,來保持dir1與dir2一致

Distcp的本質是一個MapReduce任務,只有Map階段,沒有Reduce階段,具備分佈式執行的特性。在Map任務中從老集羣讀取數據,然後寫入新集羣,以此來完成數據遷移。

該命令在任一集羣運行即可,如果在新集羣上執行就向新集羣的Yarn申請資源,老集羣只有數據讀取和網絡傳輸的消耗。

Distcp提供了 -m 參數來設置map任務的最大數量(默認20),以提高併發性。注意這裏要結合最大網絡傳輸速率來設置。

Distcp提供了-bandwidth 參數來控制單個Map任務的最大帶寬,單位是MB。

Distcp提供了-p 參數來在新集羣裏保留狀態(rbugpcaxt)(複製,塊大小,用戶,組,權限,校驗和類型,ACL,XATTR,時間戳)。如果沒有指定-p 參數,權限是執行MapReduce任務的用戶權限,遷移完成以後需要手動執行chown命令變更。

Distcp在任務啓動的時候就會將需要copy的文件列表從源HDFS讀取出來。如果遷移期間新增了文件,新增的文件會被漏掉。刪除文件會導致改文件copy失敗,可以通過 -i參數忽略失敗。

Distcp提供了-overwrite 參數來覆蓋已存在的文件,-append參數將源HDFS文件的數據追加寫入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章