2013-01-03 24 views
0

我有一種情況,需要經過兩次OutputFormat的鍵/值對。實質上:如何在Hadoop中通過OutputFormat.RecordWriter寫入(鍵值)兩次

OutputFormat.getRecordWriter() // returns RecordWriteType1 
... and when all those are complete across all machines 
OutputFormat.getRecordWriter() // return RecordWriterType2 

兩個RecordWriterType1/2的鍵入都是相同的。有沒有辦法做到這一點?

謝謝, Marko。

+0

你是否重複遍歷reducer鍵/值?你能多解釋一下嗎? –

+0

是的。這正是我的意思。我希望它可以在同一個「OutputFormat運行」中兩次通過我的鍵/值。 –

回答

0

不幸的是,你不能簡單地運行減速器數據兩次。

你確實有一些選項可能解決:

  • 使用的身份減速器輸出排序的數據到HDFS,然後用身份映射器運行在數據的兩個職位 - 浪費的,但簡單,如果你不」 t有那麼多的數據
  • 如上所述,但您可以使用map only作業和鍵比較器來模擬reducer函數,因爲您知道輸入已經排序(您需要確保將分割大小設置得足夠大確保來自第一個減速器輸出文件的所有數據都在一個映射器中處理,而不是分割成2+映射器實例
  • 您可以在reducer中將reducer鍵/值寫入本地磁盤,然後在reducer的清理方法中,打開本地文件並按第二個選項中的詳細說明進行處理(使用組比較器確定鍵邊界) 。
  • 如果你挖通了源ReduceTask,你甚至可以爲「濫用」在本地磁盤上的合併排序段和在數據再次運行,但這種做法是純純粹的兩輪牛車...