hadoop - Hadoop 如何决定有多少节点将执行 Map 和 Reduce 任务?

标签 hadoop mapreduce hadoop2

我是 hadoop 的新手,我正在努力理解它。我在谈论 hadoop 2。当我有一个我想执行 MapReduce 的输入文件时,在 MapReduce 程序中我说了 Split 的参数,所以它会创建与 splits 一样多的 map 任务,对吧?

资源管理器知道文件在哪里,并将任务发送给拥有数据的节点,但谁说有多少节点将执行任务? maps donde 之后就是 shuffle,哪个节点做 reduce 任务是由做 hash map 的 partitioner 决定的,对吧?有多少节点会做reduce任务?做过map的节点也会做reduce任务吗?

谢谢。

TLDR:如果我有一个集群并运行 MapReduce 作业,Hadoop 如何决定有多少节点将执行 map 任务,然后哪些节点将执行 reduce 任务?

最佳答案

有多少张 map ?

The number of maps is usually driven by the total size of the inputs, that is, the total number of blocks of the input files.

The right level of parallelism for maps seems to be around 10-100 maps per-node, although it has been set up to 300 maps for very cpu-light map tasks. Task setup takes a while, so it is best if the maps take at least a minute to execute.

如果您有 10TB 的输入数据和 128MB 的 block 大小,您最终将得到 82,000 张 map ,除非使用 Configuration.set(MRJobConfig.NUM_MAPS, int)(仅向框架提供提示)来设置甚至更高。

减少了多少?

reduce 的正确数量似乎是 0.95 或 1.75 乘以(<节点数> * <每个节点的最大容器数>)。

有了 0.95,所有的 reduce 都可以立即启动并在 map 完成时开始传输 map 输出。在 1.75 中,更快的节点将完成第一轮减少并启动第二轮减少,从而更好地实现负载平衡。

增加 reduce 的数量会增加框架开销,但会增加负载平衡并降低故障成本。

reducer 无

如果不需要减少,将 reduce task 的数量设置为零是合法的

哪些节点用于 Reduce 任务?

您可以根据 Configuration parameters 配置每个节点的映射器数量和缩减器数量像 ma​​preduce.tasktracker.reduce.tasks.maximum

如果您将此参数设置为零,则该节点将不会被考虑用于 Reduce 任务。否则,集群中的所有节点都有资格执行 Reduce 任务。

来源:Map Reduce Tutorial来自 Apache。

注意:对于给定的作业,您可以设置 mapreduce.job.maps 和 mapreduce.job.reduces。但它可能没有效果。我们应该让 Map Reduce Framework 来决定 Map & Reduce 任务的数量

编辑:

如何决定使用哪个Reducer节点?

假设您在两个节点 N1 和 N2 上有相等的可用 reduce 插槽,并且 N1 上的当前负载 > N2,那么,Reduce 任务将分配给 N2。如果负载和槽数都相同,谁先向资源管理器发送心跳,谁就得到任务。这是减少分配的代码块:http://grepcode.com/file/repository.cloudera.com/content/repositories/releases/com.cloudera.hadoop/hadoop-core/0.20.2-320/org/apache/hadoop/mapred/JobQueueTaskScheduler.java#207

关于hadoop - Hadoop 如何决定有多少节点将执行 Map 和 Reduce 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282121/

相关文章:

performance - HDFS 与 HBASE : Which one performs better on millions of small text files?

mapreduce - RavenDb - 查询在 Reduce 函数中聚合的字段

Hadoop、MapReduce 线程中的自定义 Java 计数器异常 "main"java.lang.IllegalStateException : Job in state DEFINE instead of RUNNING

hadoop - apache Pig 试图在每个组中获得最大计数

apache-spark - spark-2.0.3中的spark.sql.shuffle.partitions无效

java - 调用 MapReduce 两次

java - 如何将 Hadoop Reducer 的最终输出写入文本文件?

java - 认知复杂性及其对代码的影响

hadoop - 在 MapReduce 中不运行分区器的多个 reducer

hadoop - 无法通过Cloudera Manager中的端口14000连接到WebHDFS