1)distcp(分布式拷貝)是用於大規模集群內部和集群之間拷貝的工具。
2)distcp命令是以mr作業(沒有r任務)的形式實現的,把檔案和目錄的列表作為m任務的輸入。每乙個檔案是由乙個m任務來拷貝的,distcp盡量把大小之和相同的各個檔案匯入到同乙個m任務中。這樣可以每個m任務拷貝的資料量大致相同。
3)集群之間的拷貝(hdfs版本相同):
bash$ hadoop distcp hdfs://nn1:8020/foo/bar hdfs:
//nn2:8020 /bar/foo
這個命令會把nn1集群的 /foo/bar 目錄下的所有檔案或目錄名展開並儲存到乙個臨時檔案中,這些檔案內容的拷貝工作被分配給多個m任務,然後每個tt分別執行從nn1到nn2的拷貝操作。【distcp使用絕對路徑進行操作】
4) 多個源目錄拷貝
bash$ hadoop distcp hdfs://nn1:8020/foo/a hdfs:
//nn1:8020/foo/b hdfs:
//nn2:8020/bar/foo
5) 更新-update和覆蓋-overwrite
預設情況下,如果在拷貝的目的地同名檔案已經存在,則會預設跳過這些檔案。可以通過-overwrite選項指定覆蓋掉同名檔案,或者通過-update選項來更新同名檔案。 關於distcp的更多用法,可以不加引數執行「hadoop distcp」命令來檢視其用法。
6) 不同版本hdfs之間拷貝
如果兩集群hadoop版本不一致就不能使用hdfs識別符號來拷貝檔案了,因為兩者的rpc系統是不相容的。
% hadoop distcp hftp://namenode1:50070/foo hdfs:
//namenode2/bar
% hadoop distcp webhdfs://namenode1:50070/foo webhdfs:
//namenode2:50070/bar
m任務的個數是按如下方式決定的:
1) 考慮到建立m任務的開銷,每個m任務至少處理256mb的資料(如果總輸入檔案小於256mb,則把這些輸入資料全部交給乙個m任務執行)。例如,乙個1gb大小的輸入資料會被分配四個m任務來拷貝。
2) 如果待拷貝的資料實在很大,這時候就不能只按每個m任務256mb輸入資料的標準來劃分了,因為這樣可能需要建立很多m任務。這時可以按每個dn有20個m任務來劃分,例如,如果有1000gb的輸入資料和100個節點,這是就會啟動100*20=2000個m任務來拷貝資料,每個m任務拷貝512mb資料。同時我們也可通過-m選項指定要使用的m數,例如,-m 1000就會啟動1000個m任務,每個m任務拷貝1gb資料。
hadoop 通過distcp進行並行複製
通過distcp進行並行複製 前面的hdfs訪問模型都集中於單執行緒的訪問。例如通過指定檔案通配,我們可以對一部分檔案進行處理,但是為了高效,對這些檔案的並行處理需要新寫乙個程式。hadoop有乙個叫distcp 分布式複製 的有用程式,能從hadoop的檔案系統並行複製大量資料。distcp一般用...
Hadoop之 通過distcp並行複製
distcp是乙個分布式複製程式,改程式可以從hadoop檔案系統間複製大量資料,也可以將大量的資料複製到hadoop中 distcp的典型應用是在兩個hdfs集群間傳輸資料 hadoop distcp hdfs binghe101 foo hdfs binghe102 bar預設情況下,distc...
hadoop3 DistCp 並行檔案複製
distcp 是hadoop的乙個分布式複製程式,它能從檔案系統同將大量的檔案複製到hadoop中也能是從hadoop中複製檔案到分布式檔案系統中 例如 hadoop distcp hdfs namenode1 foo hdfs namenode2 bar 將foo檔案複製到第二個bar目錄下 注意...