默认情况下,hadoop 2.7.3 中一个作业可以有两个映射器。我有一个由 2 个系统组成的集群,每个系统有 4 个核心可用。一个是主人,一个是 worker 。现在我想运行 3 个 map task 工作节点。我可以做吗?我正在使用 hadoop 流式处理来运行作业。那么我应该为此设置什么参数。我还想将一个输入(行)设置为仅一个映射器。参数的格式应该是什么。我当前未完成任务的命令是
hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar\
-D mapred.output.compress=true \
-D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
-files test.py -mapper test.py -reducer cat \
-input /aws/input/sample.gz -output /aws/output/test
输出显示只有一个maptask
最佳答案
并行运行的映射器数量基于输入拆分和容器资源。
尝试 NLineInputFormat
这样输入文件的每一行都转到它自己的映射器:
-inputformat org.apache.hadoop.mapreduce.lib.input.NLineInputFormat
每个映射器的行数可以通过配置参数设置
-Dmapreduce.input.lineinputformat.linespermap=N
如果你希望作业只有 3 个映射器,你应该设置 N = file_lines/3 + 1
如果您还希望它们并行运行,请确保有足够的 RAM 和 CPU 资源来同时运行 3 个 map task 。通常在 YARN xml 文件中配置 map container memory
。请记住,Hadoop 运行多个辅助生态系统进程,如 NameNode、DataNode、AppMaster、ResourceManager 等,它们也会消耗资源。
另外我不确定 GZ 文件是否作为输入源,也许你需要使用纯文本以便 NLineInputFormat 可以工作。
关于java - 将映射器更改为 hadoop 2.7.3 中每个工作人员的核心数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41549053/