hadoop 通過distcp進行並行複製

2021-09-01 06:53:07 字數 2025 閱讀 1980

通過distcp進行並行複製

前面的hdfs訪問模型都集中於單執行緒的訪問。例如通過指定檔案通配,我們可以對一部分檔案進行處理,但是為了高效,對這些檔案的並行處理需要新寫乙個程式。hadoop有乙個叫distcp(分布式複製)的有用程式,能從hadoop的檔案系統並行複製大量資料。

distcp一般用於在兩個hdfs集群中傳輸資料。如果集群在hadoop的同一版本上執行,就適合使用hdfs方案:

% hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar

這將從第乙個集群中複製/foo目錄(和它的內容)到第二個集群中的/bar目錄下,所以第二個集群會有/bar/foo目錄結構。如果/bar不存在,則新建乙個。我們可以指定多個源路徑,並且所有的都會被複製到目標路徑。源路徑必須是絕對路徑。

預設情況下,distcp會跳過目標路徑已經有的檔案,但可以通過提供的-overwrite選項進行覆蓋。也可以用-update選項來選擇只更新那些修改過的檔案。

注意:使用-overwrite和-update中任意乙個(或兩個)選項會改變源路徑和目標路徑的含義。這可以用乙個例子清楚說明。如果改變先前例子中第乙個集群的子樹/foo下的乙個檔案,就能通過執行對第二個集群的改變進行同步:

% hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo

目標路徑需要末尾這個額外的子目錄/foo,因為源目錄下的內容已被複製到目標目錄下。(如果熟悉rsync,你可以想像-overwrite或-update項對源路徑而言,如同新增乙個隱含的斜槓。)

如果對discp操作不是很確定,最好先對乙個小的測試目錄樹進行嘗試。

有很多選項可以控制分布式複製行為,包括預留檔案屬性,忽略故障和限制複製的檔案或總資料的數量。執行時不帶任何選項,可以看到使用說明。

distcp是作為乙個mapreduce作業執行的,複製工作由集群中並行執行的map來完成。這裡並沒有reducer。每個檔案都由乙個單一的map進行複製,並且distcp通過將檔案分成大致相等的檔案來為每個map數量大致相同的資料。

map的數量是這樣確定的。通過讓每乙個map複製數量合理的資料以最小化任務建立所涉及的開銷,是乙個很好的想法,所以每個map的副本至少為256 mb。(除非輸入的總大小較少,否則乙個map就足以操控全域性。)例如,1 gb的檔案會被分成4個map任務。如果資料很大,為限制頻寬和集群的使用而限制對映的數量就變得很有必要。map預設的最大數量是每個集群節點(tasktracker)有20個。例如,複製1000 gb的檔案到乙個100個節點的集群,會分配2000個map(每個節點20個map),所以平均每個會複製512 mb。通過對distcp指定-m引數,會減少對映的分配數量。例如,-m 1000會分配1000個map,平均每個複製1 gb。

如果想在兩個執行著不同版本hdfs的集群上利用distcp,使用hdfs協議是會失敗的,因為rpc系統是不相容的。想要彌補這種情況,可以使用基於http的hftp檔案系統從源中進行讀取。這個作業必須執行在目標集群上,使得hdfs rpc版本是相容的。使用hftp重複前面的例子:

% hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

注意,需要在uri源中指定名稱節點的web埠。這是由dfs.http.address的屬性決定的,預設值為50070。

保持hdfs集群的平衡

向hdfs複製資料時,考慮集群的平衡相當重要。檔案塊在集群中均勻地分布時,hdfs能達到最佳工作狀態。回顧前面1000 gb資料的例子,通過指定-m選項為1,即由乙個單一的map執行複製工作,它的意思是,不考慮速度變慢和未充分利用集群資源,每個塊的第乙個副本會儲存在執行map的節點上(直到磁碟被填滿)。第二和第三個副本分散在集群中,但這乙個節點並不會平衡。通過讓map的數量多於集群中節點的數量,我們便可避免這個問題。鑑於此,最好首先就用預設的每個節點20個map這個預設設定來執行distcp。

然而,這也並不總能阻止乙個集群變得不平衡。也許想限制map的數量以便一些節點可以被其他作業使用。若是這樣,可以使用balancer工具(參見第10章)繼續改善集群中塊的分布

Hadoop之 通過distcp並行複製

distcp是乙個分布式複製程式,改程式可以從hadoop檔案系統間複製大量資料,也可以將大量的資料複製到hadoop中 distcp的典型應用是在兩個hdfs集群間傳輸資料 hadoop distcp hdfs binghe101 foo hdfs binghe102 bar預設情況下,distc...

Hadoop資料遷移 distcp 工具

hadoop distcp 備份hdfs檔案,並行複製大量資料。1.同版本集群之間複製 hadoop distcp hdfs namenode1 src hdfs namenode2 dist這將從第乙個集群中複製 src目錄下的內容複製到第二個集群中的 dist目錄下 預設情況下,distcp會跳...

Hadoop集群間資料拷貝distcp使用

distcp是hadoop集群間拷貝工具,使用mapreduce的方式,進行大資料在集群的拷貝,不同於簡單的資料copy,distcp會校驗資料,穩定傳輸,最後進行拷貝結果統計,彙總拷貝狀態,如拷貝成功的檔案數 大小等 基本命令 hadoop distcp option src dst 關於dist...