我有大约170 gb的数据。我必须用hadoop2.7.3来分析它。有14名工人。我必须找到每个文档的唯一mime类型的总数,例如文本/html类型的文档总数。当我运行mapreduce作业(用python编写)时,hadoop返回许多输出文件,而不是我期望的单个输出文件。我认为这是由于许多工人分别处理一些数据并给出输出。我想要一个输出。问题出在哪里。如何限制hadoop提供单个输出(通过合并所有小的输出文件)。
fcg9iug31#
从hdfs检索数据时,可以使用hadoop getmerge命令合并结束文件:
hadoop fs -getmerge /output/reduce/ /localcatalog/mergedresult.txt
每个mapper和reducer将生成一个单独的文件,通过减少mapper和reducer的数量,您将降低作业的并行度。我认为最好的方法不是将reducer限制为单个输出,而是使用提供的命令从hdfs获得合并结果。
csga3l582#
你的工作是为每个Map器生成一个文件,你必须强制一个reducer阶段使用1个reducer来完成这项工作,你可以在所有Map器中发出相同的键来完成这项工作。
ryhaxcpt3#
使Map器为处理的每个文档发出- (doc-mime-type, 1) 然后在reduce阶段计算所有这些对。本质上,这是一个标准的字数计算练习,除了Map器为每个文档的mime类型发出1之外。关于要设置的reducer的数量:alex合并reducer结果的方法更可取,因为它允许在reduce阶段使用所有的worker节点。但是,如果作业要在1-2个节点上运行,那么只有一个reducer可以正常工作。
(doc-mime-type, 1)
3条答案
按热度按时间fcg9iug31#
从hdfs检索数据时,可以使用hadoop getmerge命令合并结束文件:
每个mapper和reducer将生成一个单独的文件,通过减少mapper和reducer的数量,您将降低作业的并行度。我认为最好的方法不是将reducer限制为单个输出,而是使用提供的命令从hdfs获得合并结果。
csga3l582#
你的工作是为每个Map器生成一个文件,你必须强制一个reducer阶段使用1个reducer来完成这项工作,你可以在所有Map器中发出相同的键来完成这项工作。
ryhaxcpt3#
使Map器为处理的每个文档发出-
(doc-mime-type, 1)
然后在reduce阶段计算所有这些对。本质上,这是一个标准的字数计算练习,除了Map器为每个文档的mime类型发出1之外。关于要设置的reducer的数量:alex合并reducer结果的方法更可取,因为它允许在reduce阶段使用所有的worker节点。但是,如果作业要在1-2个节点上运行,那么只有一个reducer可以正常工作。