java - 将映射器更改为 hadoop 2.7.3 中每个工作人员的核心数

标签 java python hadoop mapreduce

默认情况下,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/

相关文章:

java - 如何在 servlet 中使用 JSONObject 创建多级 JSON 数据

python - 计算主题标签的功能

python - 删除日期时间差异的值,并进行修订

java - 输入 block 的哪个副本在映射器中处理?

hadoop - Hive 包含没有分隔符的数据

java - IntStream 来自 Random 和 Random 并发

java - 数据表的 JSF 'total' 变量

java - 为什么前缀增量的使用被认为比构造标准中的后缀增量更好

python - 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

sql - 通过选择在 Hive 中插入值