hadoop如何决定有多少节点将执行map和reduce任务?

ccrfmcuu  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(621)

我是hadoop的新手,我正在努力理解它。我说的是hadoop2。当我有一个输入文件,我想做一个mapreduce,在mapreduce程序中,我说的是split的参数,所以它会做和split一样多的map任务,对吗?
资源管理器知道文件在哪里,并将任务发送给拥有数据的节点,但是谁说有多少节点将执行任务?在Map完成之后就有了洗牌,哪个节点将执行reduce任务是由执行哈希Map的分区器决定的,对吗?有多少节点可以减少任务?完成Map的节点是否也会减少任务?
谢谢您。
tldr:如果我有一个集群并且我运行一个mapreduce作业,hadoop如何决定有多少节点将执行map任务,然后哪些节点将执行reduce任务?

cgvd09ve

cgvd09ve1#

有多少张Map?
Map的数量通常由输入的总大小驱动,即输入文件的总块数。
Map的正确并行级别似乎是每个节点10-100个Map,尽管已经为每个cpu的光照Map任务设置了300个Map。任务设置需要一段时间,因此最好至少花一分钟执行Map。
如果您有10tb的输入数据和128mb的块大小,那么最终将得到82000个Map,除非使用configuration.set(mrjobconfig.num\u maps,int)(它只向框架提供提示)将其设置得更高。
减少多少?
正确的reduces数似乎是0.95或1.75乘以(<nodes.of nodes>*<no.of maximum containers per nodes>)。
使用0.95时,所有reduces都可以立即启动,并在Map完成时开始传输Map输出。使用1.75,速度更快的节点将完成第一轮reduce并启动第二轮reduce,从而更好地完成负载平衡。
增加的数量减少了框架开销,但增加了负载平衡并降低了失败的成本。
异径管无
如果不需要减少,将reduce任务数设置为零是合法的
哪些节点用于减少任务?
您可以根据mapreduce.tasktracker.reduce.tasks.maximum等配置参数配置每个节点的Map器数和还原器数
如果将此参数设置为零,则该节点将不会被视为reduce任务。否则,群集中的所有节点都有资格执行reduce任务。
来源:apache的map-reduce教程。
注意:对于给定的作业,可以设置mapreduce.job.maps和mapreduce.job.reduces。但它可能并不有效。我们应该将决策留给map reduce框架来决定map&reduce任务的数量
编辑:
如何确定哪个节点?
假设在两个节点n1和n2上有相等的reduce插槽可用,并且n1上的当前负载大于n2,那么reduce任务将分配给n2。如果负载和插槽数都相同,则向资源管理器发送第一个心跳信号的人将获得该任务。这是reduce a的代码块ssignment: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

oymdgrw7

oymdgrw72#

hadoop如何决定有多少节点将执行Map任务
默认情况下,Map器的数量将与mapreduce输入的分割(块)数量相同。
关于节点,在hadoop2中,每个节点都运行自己的节点 NodeManager (纳米)。nm的任务是管理应用程序分配给它的应用程序容器 Resourcemanager (rm)。因此,基本上,每个任务都将在单个容器中运行。要运行Map程序任务, ApplicationMaster 从船上协商集装箱 ResourceManager . 一旦分配了容器,则 NodeManager 将启动任务并监视它。
哪些节点将执行reduce任务?
同样,reduce任务也将在容器中运行。这个 ApplicationMaster (每个应用程序(作业))将从rm协商容器并启动reducer任务。它们主要在不同的节点上运行,然后在Map器节点上运行。
任何作业的默认减速器数为1。可以在作业配置中设置减速器的数量。

相关问题