HDFS集羣數據遷移方案-distcp
1. 原理
distcp原理是在Hadoop集羣中使用MapReduce分佈式拷貝數據。
2. 資源消耗
- 源集羣有隻有數據讀取和網絡傳輸的消耗
- 目的集羣需要執行MapReduce任務,並且有數據寫入的消耗(3副本需要有3倍的寫入)
3. 兼容性
- 同版本集羣拷貝(或者協議兼容版本之間的拷貝)使用HDFS協議
hadoop distcp hdfs://src-name-node:3333/user/src/dir hdfs://dst-name-node:4444/user/dst/dir
- 不同版本集羣拷貝(比如1.x到2.x)使用hftp協議或者webhdfs協議,都是使用hdfs的HTTP端口:
hadoop distcp hftp://src-name-node:80/user/src/dir hftp://dst-name-node:80/user/dst/dir
hadoop distcp webhdfs://src-name-node:80/user/src/dir webhdfs://dst-name-node:80/user/dst/dir
4. 遷移速度
- distcp吞吐很大,理論上來說受限於網絡帶寬以及目標集羣的寫性能
- distcp可以配置Mapper數量,以及限制Mapper的帶寬(通過
-bandwidth
參數控制遷移速度) - 測試數據:6個小時完成120TB數據遷移
5. 數據一致性
- 支持CRC校驗,可以通過-skipcrccheck參數來跳過校驗來性能
- 可以通過
-overwrite
參數來覆蓋已存在的文件,不設置該參數,默認跳過重複的文件 - 設置
-update
,如果源和目標的大小,塊大小或校驗和不同,則覆蓋 - 支持大文件的斷點續傳,通過設置
-append
參數
6. 其他優化方式
- 關閉目標集羣佔用io操作的服務,比如:balancer等
- 寫成功2副本即返回
- 等
6. reference
杭研這邊的測試結果:
http://doc.hz.netease.com/pages/viewpage.action?pageId=179606369
官方文檔:
https://s0hadoop0apache0org.icopy.site/docs/stable/hadoop-distcp/DistCp.html
https://hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html
問題定位:
http://zhang-jc.github.io/2017/10/19/Hadoop-distcp-%E6%95%B0%E6%8D%AE%E5%90%8C%E6%AD%A5/
distcp的速度:
https://developer.ibm.com/hadoop/2016/02/05/fast-can-data-transferred-hadoop-clusters-using-distcp/
https://blog.csdn.net/weichanhua/article/details/92746057