2012-03-15 90 views
6

我對使用Avro和map reduce非常困惑,無法找到好的教程。使用純文本輸入和avro輸出的mapreduce作業

似乎像AvroJob和AvroMapper這樣的類在輸入和輸出都是Avro數據文件時都會遇到問題。什麼時候你的輸入只是純文本?

具體來說:

我的映射器將LongWritable鍵和Text值作爲輸入。它發出文本鍵和MyAvroRecord值。

我的reducer將MyAvroRecords的Text鍵和Iterator作爲輸入,併發出Text鍵和MyAvroRecord值。

如何獲得將這些文本鍵和MyAvroRecord值寫入文件的OutputFormat?

乾杯,戴夫

回答

6

好了,我想通了這一點。

而不是輸出文本鍵和MyAvroRecord值的映射器,我需要一個生成AvroKey鍵和AvroValue值的映射器。這可以將結果直接輸入到AvroReducer中,我可以使用AvroJob.setOutputSchema()來處理輸出(我根本不需要實現OutputFormat)。

+0

戴夫你好,我想做某事相反。我的輸入是文本,輸出是通用記錄。我嘗試爲AvroJob設置Avro輸入模式,然後將輸出模式設置爲通用記錄的模式。但我不知道如何包裝輸入模式,以便AvroJob可以理解它是純文本。我應該只使用setInputSchema()什麼都沒有? – 2014-05-02 01:00:46

0

接近的另一種方法是:mapper的輸出不需要是AvroKey和AvroValue。它可以是您的一般輸出類型,它可以輸入到您的減速器中。在減速器中,我們可以進行Avro轉換。通過將Outputformat類型設置爲Avro。

問候, sujoy