亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會(huì)深度解析
1294
2025-03-31
3.7? 通過(guò)distcp并行復(fù)制
前面著重介紹單線程訪問(wèn)的HDFS訪問(wèn)模型。例如,通過(guò)指定文件通配符,可以對(duì)一組文件進(jìn)行處理,但是為了提高性能,需要寫(xiě)一個(gè)程序來(lái)并行處理這些文件。Hadoop自帶一個(gè)有用程序distcp,該程序可以并行從Hadoop 文件系統(tǒng)中復(fù)制大量數(shù)據(jù),也可以將大量數(shù)據(jù)復(fù)制到Hadoop中。
Distcp的一種用法是替代hadoop fs –cp。例如,我們可以將文件復(fù)制到另一個(gè)文件中:[1]
% hadoop distcp file1 file2
也可以復(fù)制目錄:
% hadoop distcp dir1 dir2
如果dir2不存在,將新建dir2,目錄dir1的內(nèi)容全部復(fù)制到dir2下??梢灾付ǘ鄠€(gè)源路徑,所有源路徑下的內(nèi)容都將被復(fù)制到目標(biāo)路徑下。
如果dir2已經(jīng)存在,那么目錄dir1將被復(fù)制到dir2下,形成目錄結(jié)構(gòu)dir2/dir1。如果這不是你所需的,你可以補(bǔ)充使用-overwrite選項(xiàng),在保持同樣的目錄結(jié)構(gòu)的同時(shí)強(qiáng)制覆蓋原有文件。你也可以使用-update 選項(xiàng),僅更新發(fā)生變化的文件。用一個(gè)示例可以更好解釋這個(gè)過(guò)程。如果我們修改了dir1子樹(shù)中一個(gè)文件,我們能夠通過(guò)運(yùn)行以下命令將修改同步到dir2中:
% hadoop distcp –update dir1 dir2
如果不確定discp 操作的效果,最好先在一個(gè)小的測(cè)試目錄樹(shù)下試運(yùn)行。
distcp是作為一個(gè)MapReduce作業(yè)來(lái)實(shí)現(xiàn)的,該復(fù)制作業(yè)是通過(guò)集群中并行運(yùn)行的map來(lái)完成。這里沒(méi)有reducer。每個(gè)文件通過(guò)一個(gè)map進(jìn)行復(fù)制,并且distcp試圖為每一個(gè)map分配大致相等的數(shù)據(jù)來(lái)執(zhí)行,即把文件劃分為大致相等的塊。默認(rèn)情況下,將近20個(gè)map被使用,但是可以通過(guò)為distcp指定-m參數(shù)來(lái)修改map的數(shù)目。
關(guān)于distcp的一個(gè)常見(jiàn)使用實(shí)例是在兩個(gè)HDFS 集群間傳送數(shù)據(jù)。例如,以下命令在第二個(gè)集群上為第一個(gè)集群/foo目錄創(chuàng)建了一個(gè)備份:
% hadoop distcp -update -delete -p hdfs://namenode1/foo hdfs://namenode2/foo
-delete選項(xiàng)使得distcp可以刪除目標(biāo)路徑中任意沒(méi)在源路徑中出現(xiàn)的文件或目錄,-P選項(xiàng)意味著文件狀態(tài)屬性如權(quán)限、塊大小和復(fù)本數(shù)被保留。當(dāng)你運(yùn)行不帶參數(shù)的distcp時(shí),能夠看到準(zhǔn)確的用法。
如果兩個(gè)集群運(yùn)行的是HDFS的不兼容版本,你可以將webhdfs協(xié)議用于它們之間的distcp:
% hadoop distcp webhdfs://namenode1:50070/foo webhdfs://namenode2:50070/foo
另一個(gè)變種是使用HttpFs 代理作為distcp源或目標(biāo)(又一次使用了webhdfs協(xié)議),這樣具有設(shè)置防火墻和控制帶寬的優(yōu)點(diǎn),詳情參見(jiàn)3.4節(jié)對(duì)HTTP的討論。
保持 HDFS 集群的均衡
向HDFS復(fù)制數(shù)據(jù)時(shí),考慮集群的均衡性是相當(dāng)重要的。當(dāng)文件塊在集群中均勻分布時(shí),HDFS 能達(dá)到最佳工作狀態(tài),因此你想確保distcp不會(huì)破壞這點(diǎn)。例如,如果將-m選項(xiàng)指定為1,即由一個(gè)map來(lái)執(zhí)行復(fù)制作業(yè),它的意思是不考慮速度變慢和未充分利用集群資源每個(gè)塊的第一個(gè)復(fù)本將存儲(chǔ)到運(yùn)行map 的節(jié)點(diǎn)上(直到磁盤被填滿)。第二和第三個(gè)復(fù)本將分散在集群中,但這一個(gè)節(jié)點(diǎn)是不均衡的。將map的數(shù)量設(shè)定為多于集群中節(jié)點(diǎn)的數(shù)量,可以避免這個(gè)問(wèn)題。鑒于此,最好首先使用默認(rèn)的每個(gè)節(jié)點(diǎn)20個(gè)map來(lái)運(yùn)行distcp命令。
然而,這也并不總能阻止集群的不均衡。也許想限制map的數(shù)量以便另外一些節(jié)點(diǎn)可以運(yùn)行其他作業(yè)。若是這樣,可以用均衡器(balancer)工具(參見(jiàn)11.1.4節(jié)對(duì)均衡器的討論),進(jìn)而改善集群中塊分布的均勻程度。
大數(shù)據(jù) Hadoop
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。