如何组合hadoop映射器输出以获得单个结果

时间:2017-02-23 03:42:27

标签: python hadoop mapreduce

我有大约170 GB的数据。我必须使用hadoop 2.7.3进行分析。有14名工人。我必须找到每个文档的唯一MIME类型的总和,例如text / html类型的文档总数。当我运行mapreduce作业(用python编写)时,Hadoop会返回许多输出文件,而不是我期待的单个输出文件。我认为这是由于许多工人分别处理一些数据并提供输出。我想得到单输出。问题出在哪儿。我如何限制hadoop提供单输出(通过组合所有小输出文件)。

3 个答案:

答案 0 :(得分:3)

从hdfs检索数据时,可以使用hadoop getmerge 命令合并结束文件:

hadoop fs -getmerge /output/reduce/ /localcatalog/mergedresult.txt

每个映射器和缩减器将生成一个单独的文件,通过减少映射器和缩减器的数量,您将降低作业的并行度。我认为不是将reducer限制为单输出,而是使用提供的命令从hdfs获取合并结果。

答案 1 :(得分:1)

你的工作是为每个映射器生成1个文件,你必须使用1 reducer强制执行reducer阶段,你可以在所有映射器中完成相同的键。

答案 2 :(得分:1)

让映射器为每个已处理的文档发出 - (doc-mime-type, 1)然后在减少阶段计算所有这些对。本质上,它是一个标准的字数统计练习,除了你的映射器为每个doc的mime类型发出1s。

关于要设置的减速器数量:Alex优选合并减速器结果的方式,因为允许在减少阶段使用所有工作节点。但是,如果要在1-2个节点上运行作业,那么只有一个减速器应该可以正常工作。