我有非常多的文本文件,总大小为1 TB。比方说,我必须对每个文件执行字数统计,并希望单独存储每个文件的结果。Apache Hadoop是这类问题的正确解决方案吗?每个文件的大小为5 MB。我不能连接这些文件,因为我想单独查看每个文件的字数统计结果。我希望Hadoop所做的是将每个文件作为输入提供给映射器,并在reducer中为其生成单独的输出文件。
发布于 2017-09-02 01:08:50
看看这里的WholeFileInputFormat.java和WholeFileRecordReader.java - https://github.com/tomwhite/hadoop-book/tree/master/ch08-mr-types/src/main/java,这将帮助你将一个文件的内容作为一个记录来阅读。我认为您可能需要稍微调整一下InputFormat和RecordReader,才能将filename作为关键字发出。
在普通的map-reduce中,我认为这将是一个只有Map的任务,其中每个map任务负责计算记录中不同的单词(这是文件的全部内容)。您可以直接存储这些map任务的输出,这将为您提供单个文件的字数统计。
我相信您正在将您的用例与标准的word count map reduce应用程序进行比较,在该应用程序中,reducer用于计算所有输入(在您的情况下是所有文件)中的单词。你不打算这样做,因此我说你不会在这里减少。
我不确定使用reducer来计算单个文件中的单词是否是一个好主意。
另一种选择是使用上面提到的输入格式和记录阅读器,并在map-reduce之上使用Cascading或Apache Pig或一些高级抽象来简化您的工作。
https://stackoverflow.com/questions/45988755
复制相似问题