hadoop 通過distcp並行複製。

hadoop權威指南第四版

Hadoop自帶一個有用程序distcp,該程序可以並行從Hadoop文件系統中複製大量數據,也可以系那個大量數據複製到Hadoop中。

        Distcp的一種用法是替代 hadoop fs -cp。例如,我們可以將文件複製到另一個文件中:

% hadoop distcp file1 file2

也可以複製目錄:

% hadoop distcp dir1 dir2


        如果dir2 不存在,將新建dir2,目錄dir1的內容全部複製到dir2下。可以指定多個源路徑,所有源路徑下的內容都將被複制到目錄路徑下。

        如果dir2 已經存在,那麼目錄dir1將被複制到dir2下,形成目錄結構dir2/dir1。如果這不是你所需的,你可以補充使用-overwrite選項,在保持同樣的目錄結構的同時強制覆蓋原有文件。你也可以使用-update選項,僅更新發生變化的文件。用一個示例可以更好解釋這個過程。如果我們修改了dir1 子樹中一個文件,我們能夠通過運行以下命令將修改同步到dir2中:

hadoop distcp -update dir1 dir2


        建議:如果不確定discp操作的效果,最好先在一個小的測試目錄樹下試運行。

        distcp是作爲一個MapReduce作業來實現的,該複製作業是通過集羣中並行運行的map來完成。這裏沒有reducer。每個文件通過一個map進行復制,並且distcp試圖爲每一個map分配大致相等的數據來執行,即把文件劃分爲大致相等的塊。默認情況下,將近20個map被使用,但是可以通過爲distcp指定-m參數來修改map的數目

        關於distcp的一個常見使用實例是在兩個HDFS集羣間傳送數據。例如,以下命名在第二個集羣上爲第一個集羣/foo目錄創建了一個備份:

hadoop distcp -update -delete -p hdfs://namenode1/foo hdfs:namenode2/foo


        -delete選項使得distcp可以刪除目錄路徑中任意沒有原路徑中出現的文件或目錄,-P 選項意味着文件狀態屬性如權限、塊大小和複本數被保留。當你運行不帶參數的distcp時,能夠看到準確的用法

        如果兩個集羣運行的是HDFS的不兼容版本,你可以將webhdfs協議用於他們之間的distcp:

hadoop distcp webhdfs://namenode1:50070/foo webhdfs://namenode2:50080/foo


        另一個變種是使用HttpFs代理作爲distcp源或目標(有一次使用了webhdfs協議),這樣具有設置防火牆和控制帶寬的優點。

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