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



我是hadoop的新手,我正在努力理解它。我说的是hadoop 2。当我有一个输入文件,我想做一个MapReduce,在MapReduce程序中,我输入Split的参数,它会生成和Split一样多的map任务,对吧?

资源管理器知道文件在哪里,并将任务发送给拥有数据的节点,但是谁说有多少节点将执行这些任务呢?映射完成后是shuffle,哪个节点执行reduce任务是由执行散列映射的分区者决定的,对吧?有多少节点会执行reduce任务?做过地图的节点会减少任务吗?

谢谢。

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

有多少张地图?

映射的数量通常由输入文件的总大小决定,即输入文件的块总数。

地图的正确并行度似乎是每个节点大约10-100个地图,尽管对于cpu非常轻的地图任务,它已经设置为300个地图。任务设置需要一段时间,所以映射最好至少花一分钟来执行。

如果您有10TB的输入数据和128MB的块大小,那么您将最终得到82,000个映射,除非Configuration.set(MRJobConfig. conf)。NUM_MAPS, int)(它只向框架提供一个提示)用于设置更高的值。

有多少个减少?

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

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

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

减速机没有

如果不需要reduce,则将reduce-task的数量设置为0是合法的

哪些节点用于Reduce任务?

您可以根据mapreduce.tasktracker.reduce.tasks.maximum

等配置参数配置每个节点的映射器数量和reducer数量。

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

来源:Map Reduce Tutorial from Apache.

注:对于给定的Job,可以设置mapreduce.job.maps &mapreduce.job.reduces。但它可能没有效果。我们应该把决策留给Map Reduce框架来决定Map &减少任务

编辑:

如何确定哪个Reducer节点?

假设N1和N2两个节点上有相等的reduce槽,且N1> N2上有当前负载,则reduce任务将分配给N2。如果负载和插槽数量相同,那么向资源管理器发送第一个心跳的人将获得任务。这是reduce赋值的代码块: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如何决定有多少节点执行map任务

默认情况下,映射器的数量将与mapreduce输入的分割(块)数量相同。

现在关于节点,在Hadoop 2中,每个节点运行自己的NodeManager (NM)。NM的工作是管理Resourcemanager (RM)分配给它的应用程序容器。所以基本上,每个任务都将在单独的容器中运行。为了运行映射器任务,ApplicationMasterResourceManager协商容器。一旦分配了容器,NodeManager将启动任务并监视它。

哪些节点将执行reduce任务?

同样,reduce任务也将在容器中运行。ApplicationMaster(每个应用程序(作业))将与RM协商容器并启动reducer任务。大多数情况下,它们在不同的节点上运行,然后在Mapper节点上运行。

任何作业的默认减速器数为1。可在作业配置中设置减速器的数量。

相关内容

  • 没有找到相关文章

最新更新