2017-08-31 84 views
0

我有大量文本文件,其大小合計爲1 TB。比方說,我必須對每個文件執行字數統計並分別存儲每個文件的結果。 Apache Hadoop是否是這種問題的正確解決方案?每個文件的大小是5 MB。我無法連接文件,因爲我想單獨查看每個文件的字數統計結果。我希望Hadoop做的是將每個文件作爲輸入提供給映射器,並在reducer中爲其生成單獨的輸出文件。使用Apache Hadoop處理大量文本文件

回答

0

看看的WholeFileInputFormat.javaWholeFileRecordReader.java在這裏 - https://github.com/tomwhite/hadoop-book/tree/master/ch08-mr-types/src/main/java 這將幫助你閱讀一個文件的內容作爲一個記錄。我認爲你可能不得不調整InputFormat和RecordReader的一點點來發布文件名作爲關鍵。

在普通的map-reduce中,我認爲它將是一個Map only作業,其中每個map任務負責計算記錄中的不同單詞(這是文件的全部內容)。您可以直接存儲這些地圖任務的輸出,這些任務會爲您提供單個文件的字數。

我相信你正在比較你的用例和標準字數映射reduce應用程序,其中reducer用於計算所有輸入(在你的案例中的所有文件)的單詞。你不打算這樣做,因此我說你不會在這裏減速。

我不確定是否使用reducer來計算單個文件中的單詞是個好主意。

其他選項是使用上面提到的inputformat和recordreader,並使用CascadingApache Pig或在map-reduce之上的一些高級抽象來簡化您的工作。