2012-02-10 46 views
1

我完全和hadoop API混淆。 (猜它時刻都在變化)Hadoop API:Reducer的OutputFormat

如果我沒看錯的,JobConfdeprecated和我們應該使用JobConfiguration類,而不是運行圖從Java減少工作。它似乎雖然在最近發佈hadoop 1.0.0JobConf不再棄用!

所以我使用作業和配置類來運行地圖縮減作業。現在,我需要將減速器輸出文件放入文件夾結構中,該文件夾基於某些值,這些值是我的地圖輸出的一部分。我通過幾篇文章去,發現一個可以實現與一OutputFormat類,但我們有這個類兩種封裝:

org.apache.hadoop.mapred and 
org.apache.hadoop.mapreduce 

在我們job對象,我們可以設置輸出格式類爲:

job.setOutputFormatClass(SomeOutputFormat.class); 

現在,如果SomeOutputFormatextendsorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat,我們得到一個名爲getRecordWriter();的方法,這不會幫助以任何方式覆蓋輸出路徑。

還有另外一種方法,使用jobConf,但對於設置mappers, reducers, partitions, sorting and grouping類似乎不起作用。

有什麼非常明顯的,我失蹤?我想在一個基於值的文件夾中編寫減少輸出文件。例如,SomeOutputPrefix/Value1/Value2/realReduceFileName

謝謝!

回答

0

我認爲你需要實現

  1. 自己的輸出格式類和
  2. 自己RecordWriter的將被寫入不同的值到不同的地方

所以你SomeOutputWriter將返回new SomeRecordWriter("SomeOutputPrefix")getRecordWriter()方法和SomeRecordWriter將寫入不同的值到不同的文件夾。

+1

謝謝DNNX。是在這些線上,但想看看是否有其他更簡單的方法來做到這一點。似乎這是做到這一點的方法。不得不調整我的分區邏輯,以便與記錄寫作者正常工作。它的工作。 – 2012-02-20 01:50:37