簡體   English   中英

Hadoop幾個映射器

[英]Hadoop several mappers

我可以將多個映射器類設置為一項工作嗎?

例如,我有一個來自HDFS的csv輸入文件。 我有兩個任務要做。 第一個是從csv輸入文件中計數兩個字段,並將結果輸入輸出文件。 第二個是計數來自同一csv輸入文件的另外兩個字段,並將結果放入另一個輸出文件。 減速器是相同的。

我怎樣才能僅使用一項工作並同時處理它們? (我不想做第一個,然后在第一個完成后再做第二個,我想讓它們並行處理)。

我嘗試以下代碼:

    job1.setMapperClass(Mapper1.class);
    job1.setReducerClass(LogReducer.class);

    job1.setMapperClass(Mapper2.class);
    job1.setReducerClass(LogReducer.class);

我嘗試了一下,但是沒有用,只顯示了第二個結果,第一個結果消失了。

顯然,它需要兩個作業才能並行運行。 並行運行兩個作業的問題是什么,因為映射任務和輸出路徑不同。 如果未鏈接,則Job無法處理多個映射器。

因此,問題是您是否需要減速器的一個輸出或兩個輸出。 您可以映射兩個輸入,一個由Mapper1映射,另一個由Mapper2映射,然后將合並的中間結果傳遞給reducer以獲取一個輸出。 那是在單個作業中使用MultipleInputs類,可以在驅動程序類中進行配置。

如果希望將Mapper1的精簡結果與Mapper2的精簡結果分開,則需要配置兩個作業。 這兩個作業將具有不同的映射器,但將配置相同的reducer類。

看一下Hadoop中的MultipleOutputs類,以從reducer寫入多個文件。 根據您的reduce方法中的條件將輸出寫入第二個文件。

暫無
暫無

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

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