2012-02-25 35 views
1

我正在使用Hadoop的ETL工作,我需要輸出有效,轉換後的數據到HBase的,而該數據到MySQL外部指標。我最初的想法是,我可以使用MultipleOutputFormats用HFileOutputFormat(關鍵字是Text並且值是ProtobufWritable)和TextOutputFormat的索引(關鍵字是Text,值是Text)來導出轉換後的數據。Hadoop的MultipleOutputFormats到HFileOutputFormat和TextOutputFormat

的輸入記錄的平均大小的就業人數(我需要同時運行很多的能力)爲700萬美元。

我想知道如果A)這似乎是在效率和複雜性而言,一個合理的做法,和B)如何與CDH3分佈的API,如果可能做到這一點。

回答

1

如果您使用的是舊版的MapReduce API,那麼你可以使用MultipleOutputs和寫入多種輸出格式。

不過,如果您使用的是新的MapReduce API,我不知道,有一種方法可以做到你想要做什麼。您可能不得不在相同的輸入上支付另一個MapReduce作業的代價。但在肯定之前,我必須對此做更多的研究。可能有一種方法可以將舊的+新的api混合在一起,以允許您在新的API中使用MultipleOutputs。

編輯:有一個在這個post。你可以實現你自己的OutputFormat並在OutputFormat中包裝合適的RecordWriters,並用它寫入多種輸出格式。

+0

我使用CDH3u3,它具有MultipleOutputs。我會嘗試的。你認爲一般的方法是高性能的嗎?還有其他建議嗎?我不想顯然執行第二項工作,因爲我已經在減速器的RAM中存儲了所有的數據。 – ja87 2012-02-26 22:09:46

+0

我個人沒有使用MultipleOutputs,但我懷疑它會非常高效。至少比運行第二份MR作業更有效。我對這種方法的建議是注意你的泄漏。如果您不再對數據進行第二次掃描而獲得性能,那麼您的工作量就會增加一倍,這可能會導致泄漏事件增加一倍。我會運行MultipleOutputs運行作業的實驗,並將作業作爲兩個獨立的作業運行,以查看哪些作業更具性能。 – 2012-02-27 05:08:21