第三章 第七節 使用distcp並行拷貝

2021-07-11 03:00:54 字數 1809 閱讀 7873

到現在為止我們看到的hdfs訪問模式都是單執行緒訪問。它可以操作一組檔案----例如定義file glob----

但是要高效並行處理這些檔案,你需要自己寫乙個程式。hadoop自帶了乙個有用的程式叫distcp用來

並行拷貝檔案到/從hadoop檔案系統。

distcp的乙個作用是有效代替hadoop fs -cp。例如,你可以拷貝乙個檔案到另一檔案:

% hadoop distcp file1 file2
你也可以拷貝乙個目錄:

% hadoop distcp dir1 dir2
如果dir2不存在,它會建立,並且把dir1下的內容拷貝進去。你可以定義多個原始檔路徑,它們都會被

拷貝到目標路徑。

如果dir2已經存在,那麼dir1會被拷貝到它裡面,建立乙個目錄結構dir2/dir1。如果這不是你想要的,你

可以提供乙個-overwrite選項來保持同樣的目錄結構並強制覆蓋檔案。你也可以使用-update選項來只更新那

些改變了的檔案。這最好使用乙個例子。如果我們改變dir1裡的乙個檔案,我們可以通過執行如下命令來同步

改變dir2:

% hadoop distcp -update dir1 dir2
distcp是通過mapreduce job來實現的,它的工作就是通過並行執行在集群的map來拷貝。沒有reducer。

每乙個檔案由乙個單獨的map來拷貝,distcp把所有分成檔案大概相等的份來保證每乙個map得到相近數量的

資料。預設只用20個map,可以通過定義-m引數來改變這個值。

distcp最普遍的使用是在兩個hdfs集群之間傳遞資料。例如,下面的命令會把第乙個集群下的/foo目錄

備份到第二個集群下:

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

-delete標記將導致distcp將源目錄中不存在的檔案或目錄從目標目錄中刪除,-p意味著檔案的狀態屬性如

許可權、block size及副本都將儲存。你可以無引數執行distcp來檢視詳細使用指導。

如果這兩個集群執行的hdfs版本不相容,你可以使用webhdfs協議來distcp他們:

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

另乙個變形是使用乙個httpfs**來作為distcp的源或目標(同樣使用webhdfs協議),它的優點是可以控制

防火牆及頻寬(見54頁「http")。

保持hdfs集群平衡

在拷貝資料到hdfs時,考慮集群的平衡是很重要的。hdfs在檔案block均勻分布在集群中時工作的最好,所以

你要確認distcp不會破壞這個。例如,如果你定義-m 1,只會有乙個map來做拷貝----除了慢且沒有有效使用集群的

資源不說----還意味著第乙個副本的所有block會儲存在執行map的那個節點上(直到硬碟填滿)。第二個和第三個副本

可能儲存到整個集群,但是這個節點將支是不平衡的。通過使用比集群節點更多的map可以避免這個問題。基於這個

原因,最好執行distcp時使用預設的每個節點20個map。

儘管這樣,並不總是可以避免集群變得不平衡的。也許你想限制map的數量這樣其它的node可以用來做其它工作。

在這種情況下,你可以使用balancer工作(見329頁「balancer「)來使block均勻分布在集群上。

C 迴圈使用二(第七節)

呈上可知還有while迴圈與do while迴圈沒有說明。首先簡單說一下while迴圈和do while迴圈 while 迴圈條件 判斷迴圈條件是否滿足,若滿足則執行迴圈體語句,若不滿足則退出迴圈。do while 迴圈條件 先做一次迴圈體,然後判定迴圈條件是否滿足,若滿足則繼續執行下次迴圈體語句,...

啊哈C語言 第五章 第七節

專案一 問題與 檔名稱 myfirstc.完成日期 2020年3月25日 版本號v1.0 問題描述 輸入乙個三位數,求其個位,十位及百位之和。程式輸出 和。include include intmain 結果輸出 專案二問題與 檔名稱 myfirstc.完成日期 2020年3月24日 版本號v1.0...

第三章 3 3 3節練習

練習3.16 編寫一段程式,把練習3.13中vector物件的容量和具體內容輸出來。解答 使用for配合auto來輸出物件。容量可以用size 函式。練習3.17 從cin讀入一組詞並把它們存入乙個vector物件,然後設法把所有詞都改寫為大寫形式。輸出改變後的結果,每個詞佔一行。解答 includ...