簡體   English   中英

使用Hadoop MapReduce在不同的節點上處理不同的文件

[英]Processing different files on separate nodes using Hadoop MapReduce

我之前使用過Pig和Hive,但對Hadoop MapReduce還是陌生的。 我需要編寫一個具有多個小型文件作為輸入的應用程序(例如10)。 它們具有不同的文件結構,因此我想在單獨的節點上並行處理它們,以便可以快速對其進行處理。 我知道Hadoop的強項是處理大數據,但是這些輸入文件雖然很小,但需要大量處理,因此我希望利用Hadoop的並行計算能力。 這可能嗎?

有可能,但您可能不會獲得太多價值。 您受到這些力量的攻擊:

輸入混亂

您需要編寫一個映射器,該映射器可以處理所有不同的輸入格式(通過檢測輸入格式,或使用輸入的文件名來確定期望的格式)

多路輸出

您需要使用Hadoop的稍微棘手的多輸出文件處理功能,或者將輸出寫為reducer(或mapper,如果可以確定每個文件都將到達不同的節點)的副作用。

初始化成本高

每個hadoop map reduce作業都會帶來巨大的啟動成本,在小型集群上大約需要30秒,在大型集群上則更多。 僅此一點,您將比您從並行獲得的更多時間浪費。

簡而言之:嘗試NLineInputFormat

將所有輸入文件復制到所有節點沒有問題(如果願意,可以將它們放入分布式緩存中)。 您真正想要分發的是支票處理。

使用Hadoop,您可以創建(單個!)輸入控制文件,格式為(文件名,檢查2運行)或(文件名,格式,檢查2運行),並使用NLineInputFormat將指定數量的檢查輸入到您的節點(mapreduce.input.lineinputformat.linespermap控制編號行映射到每個映射器)。

注意:Hadoop輸入格式決定了分割的計算方式。 NLineInputFormat (與TextInputFormat不同)不關心塊。

根據檢查的性質,您可能能夠計算linepermap值以覆蓋一波映射器中的所有文件/檢查(或者可能根本無法使用此方法:))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM