仅限Mapper Python Mapreduce流作业生产者重复输出

时间:2019-05-22 13:24:54

标签: python mapreduce output streaming mapper

我已经在Java中编写了很多mapreduce作业,这是第一次使用python编写仅在mapreduce流媒体jar下运行的mapper作业。我发现的问题是映射器的输出文件包含重复的记录。我进行了一些分析,发现重复的记录来自同一节点上运行的地图任务。例如,在hdfs文件夹中有100个csv文件作为mapreduce作业输入,该作业在5节点群集上运行。该作业将根据csv文件的数量产生100个地图任务。每个节点将获得20个地图任务。该作业将在hdfs输出目录中生成100个输出文件,看起来像“ part-000xx”。每个我的映射器任务将读取一个csv文件(1000条记录),并产生3000条记录作为输出。因此,我希望每个输出文件都能生成3000条记录。但是我发现每个文件中有20 * 3000 = 60000条记录。似乎在同一节点上运行的所有映射器任务都将写入该hdfs文件中的同一文件,并且同一节点上的所有输出文件也将从运行在同一节点上的所有映射器任务接收记录。我认为这是流式mapreduce作业的行为,在使用Java之前我没有遇到过此问题。

我尝试了每一行的print(dataframe)和print(key,value)。两者都会产生重复的记录

hadoop jar /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-streaming.jar -files / home / xxxxxx / pythonfiles -Dmapreduce.job.queuename = queuename -Dyarn.scheduler.minimum-allocation- mb = 1024 -Dmapreduce.job.reduces = 0 -Dmapreduce.map.memory.mb = 4096 -Dmapreduce.map.java.opts = -Xmx3277m -Dmapreduce.task.timeout = 0 -input / user / uxxxxx / inputs -file /home/uxxxxx/mapper.py -mapper“ / apps / bin / python /home/uxxxxxx/mapper.py” -output / user / uxxxxxxx / mytest

我希望每个输出文件包含每个映射器任务的3000条记录。我可以设置任何配置来更改此行为吗?还是应该限制在同一节点上运行的并发映射器任务的数量?

0 个答案:

没有答案