2017-08-31 83 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之上的一些高级抽象来简化您的工作。