2016-08-18 83 views
0

我有一種情況,我必須將數據/文件從PROD複製到UAT(hadoop羣集)。爲此,我現在使用'distcp'。但它是永恆的。由於distcp在底層使用map-reduce,有沒有辦法使用spark來使進程更快?就像我們可以將配置單元執行引擎設置爲'TEZ'(替換map-reduce),我們可以設置執行引擎爲distcp啓動嗎?還是有任何其他'spark'方式來跨羣集複製數據,這可能甚至不打擾distcp?使用火花在hadoop羣集之間複製數據

這裏是我的第二個問題(假設我們可以將distcp執行引擎設置爲spark來代替map-reduce,否則請不要麻煩回答這個問題): - 據我所知,Spark比map-減少的主要原因是它將數據存儲在可能需要處理的存儲器中,以便它不必從磁盤一直加載數據。在這裏,我們正在跨羣集複製數據,因此不需要多次處理一個文件(或塊或分割),因爲每個文件都會上傳到內存中,然後通過網絡發送,並複製到目標羣集磁盤,該文件的故事結束。那麼,如果不使用主要功能,Spark如何讓這個過程更快?

+0

沒有嘗試這個,但也許你可以實際使用Hive來讀寫(創建表格作爲select)數據並在Tez或Spark上運行Hive。關於第二部分Spark的優勢不僅在於使用內存,而且還有更好的執行階段調度,所以它的順序比MR –

回答

1

Spark並非真正用於Hadoop集羣之間的數據移動。您可能需要使用"-m"選項來查看distcp作業的其他映射器。

+0

從: https://hadoop.apache.org/docs/r2.7.2/hadoop-distcp/DistCp .html 我明白它指定最大可以同時執行任何地圖任務。那麼是否有任何方法可以最大限度地知道我的集羣正在同時執行多少個數據(假設有25個工作分組)?我可以在多大程度上增加這個數字而不會妨礙其他流程? 我有12個節點PROD和6個節點UAT,都有大約250 GB的物理內存和大約45 TB的磁盤空間。 – Mrinal

+0

可能需要一些測試來確定最佳設置。 –

1

你的上塊狀交簇IO瓶頸通常是

  1. 簇之間帶寬
  2. 讀取帶寬源集羣
  3. 寫入帶寬到目的地簇關閉(並用3×複製,寫操作取磁盤和交換機的帶寬)
  4. 工作分配的空間(即執行者的數量,任務)

通常在長距離上傳它的長途網絡是瓶頸:你不需要那麼多的工作人員來淹沒網絡。

有兩個雅虎之間的distcp操作着名的故事。集羣確實可以做到這一點:Hadoop運營團隊對distcp發展如此之快感到滿意,而網絡運營團隊則驚慌失措,他們的核心服務由於兩個站點之間的流量而受到某種程度的損害。我相信這個事件是distcp現在有-bandwidth選項的原因:)

distcp可能存在限制,它可能在任務設置和執行中:決定要提前複製哪些文件並且沒有如果某些文件複製速度很快,但其他文件卻很優秀,那麼很多(任何?)情報在重新安排工作。

Distcp只是預先建立了列表,並將它交給特殊的distcp映射器,每個distcp映射器都讀取它的文件列表並複製它。

有人可以嘗試做一個distcp的spark版本;如果有人想要更好地進行調度,那麼這可能是一個有趣的項目,依靠Spark向現有執行者推出新工作非常有效的事實:Spark版本可以動態地推出工作,而不是事先列出所有事情。事實上,它仍然可以在枚舉要複製的文件時啓動複製操作,從而縮短啓動時間。即便如此:跨集羣帶寬通常會成爲瓶頸。