Hadoop中一個distcp (R1)
distcp一般用於在兩個HDFS叢集中傳輸資料。如果叢集在hadoop的同一版本上執行,就適合使用hdfs方案:
% hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
這將從第一個叢集中複製/foo目錄(和它的內容)到第二個叢集中的/bar目錄下,所以第二個叢集會有/bar/foo目錄結構。如果/bar不存在,則會新建一個。可以指定多個源路徑,並且所有的都會被複制到目標路徑。源路徑必須是絕對路徑。
預設情況下,distcp會跳過目標路徑已經有的檔案,但可以透過提供的-overwrite選項進行覆蓋,也可以用-update選項來選擇只更新那些修改過的檔案。
第一個叢集的子樹/foo下的一個檔案與第二個叢集的改變進行同步。
% hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo
distcp是作為一個MapReduce作業執行的,複製工作由叢集中並行執行的map來完成。這裡沒有reducer。每個檔案都由一個單一的map進行復制,並且distcp透過將檔案分成大致相等的檔案來為每個map數量大致相同的資料。
map的數量確定:
透過讓每一個map複製數量合理的資料以最小化任務建立所涉及的開銷,是一個很好的想法,所以每個map的副本至少為256MB。例如,1GB的檔案被分成4個map任務。如果資料很大,為限制頻寬和叢集的使用而限制對映的資料就變得很有必要。map預設的最大數量是每個叢集節點(tasktracker)有20個。例如,複製1000GB的檔案到一個100個節點的叢集,會分配2000個map(每個節點20個map),所以平均每個會複製512MB。透過對distcp指定-m引數,會減少對映的分配數量。例如,-m 1000會分配1000個map,平均每個複製1GB。
如果想在兩個執行著不同版本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工具繼續改善叢集中塊的分佈。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26613085/viewspace-1100934/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hadoop 之distcp(分散式拷貝)HadoopTCP分散式
- Hadoop源生實用工具之distcpHadoopTCP
- hadoop 配置項的調優(R1)Hadoop
- 使用DistCp將Hadoop進行雲遷移時注意事項TCPHadoop
- Hadoop是怎麼分塊的(R1)Hadoop
- sqoop條件抽取報錯distcpOOPTCP
- eclipse中一個project下多個module?EclipseProject
- 堅果R1黑白雙色對比評測 堅果R1白色和黑色哪個好看?
- 如何居中一個元素(終結版)
- matlab之刪除其中一個subplotMatlab
- CSS如何居中一個float浮動元素?CSS
- ASP中一個字串處理類(VBScript) (轉)字串
- 解決github中一個新手著名問題Github
- MapReduce流程分析(R1)
- CuOI R1 - Split The Crystals
- 刪除陣列中一個或者多個連續的元素陣列
- 堅果R1配置效能全面評測 堅果R1值得買嗎?
- 關於 curl 工作中一個小錯誤
- 取週期性字串中的其中一個字串
- python中一個數的平方怎麼表示Python
- 面試中一個暴露能力等級的問題面試
- Python 字典中一鍵對應多個值Python
- 控制檔案損壞,丟失其中一個
- 堅果R1對比Pro2區別對比導購 堅果R1和堅果Pro2哪個好?
- oracle merge into用法(R1)Oracle
- oracle 12c R1 新特性對單個表的恢復Oracle
- 好程式設計師分享居中一個float元素程式設計師
- C++中一個名字查詢的小知識C++
- MYSQL中一個特殊的MDL LOCK死鎖案列MySql
- 啟動資料庫的其中一個錯誤資料庫
- TSM 實施中一定要理解的幾個概念
- DRIVING_SITE Hint (R1)
- Spring框架中一個有用的小元件:Spring RetrySpring框架元件
- Redis中一個String型別引發的慘案Redis型別
- 透過現實生活中一個例子來理解 JavaScript PromiseJavaScriptPromise
- hadoop之 map個數控制Hadoop
- hadoop之 reduce個數控制Hadoop
- Hadoop Reducer個數設定Hadoop