本節書摘來異步社群《hadoop實戰手冊》一書中的第1章,第1.3節,作者: 【美】jonathan r. owens , jon lentz , brian femiano 譯者: 傅傑 , 趙磊 , 盧學裕 責編: 楊海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
hadoop分布式複制(distcp)是hadoop叢集間複制大量資料的高效工具。distcp是通過啟動mapreduce實作資料複制的。使用mapreduce的好處包含可并行性、高容錯性、作業恢複、日志記錄、進度彙報等。hadoop分布式複制(distcp)對在開發叢集環境、研究叢集環境和生産叢集環境之間進行資料複制十分有用。
準備工作
首先必須保證複制源和複制目的地能夠互相通路。
最好關閉複制源叢集map任務的推測機制,可以在配置檔案mapred-site.xml中将mapred.map.tasks.speculative.execution的值設定為false來實作,這樣就可以避免在map任務失敗的時候産生任何不可知的行為。
源叢集和目的叢集的rpc協定必須是一緻。這意味着兩個叢集之間安裝的hadoop版本必須一緻3。
操作步驟
完成以下幾個步驟實作叢集間的檔案夾複制。
1.将叢集a的weblogs檔案夾複制到叢集b上:
2.将叢集a的weblogs檔案夾複制到叢集b并覆寫已存在檔案:
3.同步叢集a和叢集b之間的weblogs檔案夾:
工作原理
在源叢集,檔案夾中的内容将被複制為一個臨時的大檔案。将會啟動一個隻有map(map-only4)的mapreduce作業來實作兩個叢集間的資料複制。預設情況下,每個map就将會配置設定到一個256 mb的資料塊檔案。舉個例子,如果weblogs檔案夾總大小為10 gb,預設将會啟動40個map,每個map會複制大約256 mb的資料。distcp複制也可以通過參數手動設定啟動的map數量。
在上面這個例子中,将會啟動10個map進行資料複制。如果weblogs檔案夾的總大小是10 gb,那麼每個map會複制大約1 gb的資料。
更多參考
如果要在運作的hadoop版本不一樣的兩個叢集之間進行資料複制,一般建議在複制源叢集使用hftpfilesystem5。hftpfilesystem是一個隻讀的檔案系統。相應的distcp指令隻能在目标伺服器上運作:
在上面這條指令中,port的值要與配置檔案hdfs-site.xml中dfs.http.address屬性的端口值一緻。