仅映射程序Python Mapreduce流式作业生成器重复输出

2024-04-28 09:03:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在java中编写了很多mapreduce作业这是第一次使用python编写mapper-only作业来运行在mapreduce流jar下。我发现的问题是mapper的输出文件包含重复的记录。我做了一些分析,发现重复的记录来自同一个节点上运行的映射任务。例如,我在hdfs文件夹中有100个csv文件作为mapreduce作业输入,该作业在5节点集群上运行。作业将根据csv文件的数量生成100个地图任务。每个节点将获得20个地图任务。作业将在hdfs输出目录中生成100个输出文件,看起来像“part-000xx”。每个mymapper任务将读入一个csv文件(1000条记录),并生成3000条记录作为输出。所以我应该期望每个输出文件生成3000条记录。但是我在每个文件中找到了20*3000=60000条记录。似乎在同一节点上运行的所有映射程序任务都将写入该hdfs文件上的同一个文件,并且在同一节点上运行的所有输出文件都将接收来自同一节点上运行的所有映射程序任务的记录。我认为这是流式mapreduce作业的行为,我以前在使用java时从未遇到过这个问题。你知道吗

我试着为每一行打印(dataframe)和打印(key,value)。两者都会产生重复的记录

hadoop jar/usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-流媒体.jar-文件/home/xxxxxx/pythonfiles-Dmapreduce.job.queuename=队列名称-Dyarn.scheduler.minimum最小值-分配mb=1024-Dmapreduce.job.reduces=0-Dmapreduce.map.memory内存.mb=4096个-Dmapreduce.map.java文件.opts=-xmx3277米-Dmapreduce.task.timeout=0-input/user/uxxxxx/inputs-文件/主页/uxxxxx/映射器.py-mapper“/apps/bin/python/home/uxxxxxx/映射器.py“-output/user/uxxxxxx/mytest”

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


Tags: 文件csv程序hadoop数量节点作业记录