提交给yarn的单个配置单元查询是否会创建多个作业(即多个yarn应用程序)?在这里,我把工作和申请看成是同一种思维方式。
据我所知,Yarn为每个“应用程序”创建一个应用程序主控(am)。因此,这里可以将单个配置单元查询视为“应用程序”。因此,资源管理器将在某个节点上创建容器,并在该容器中启动am。该容器反过来可能会创建多个“任务”(而不是应用程序),即在为该am保留的其他容器中创建Map器和还原器(在相同或不同的节点上——这在这里无关紧要)。现在,所有这些应用程序主程序的集合都致力于解决提交给yarn的单一配置单元查询。事实上,这就是为什么我们说am是每个应用程序。因为我们只提交了一个配置单元查询,所以从yarn的Angular 来看,只有一个应用程序。所以当我启动下面的命令时,它应该只显示一个应用程序running:-
yarn application -list
这种理解正确吗?或者,如果我们为一个配置单元查询生成了多个Map器和还原器,那么会调用多个yarn应用程序?
1条答案
按热度按时间wi3ka0sx1#
你一开始是对的:
mapreduce创建的应用程序称为作业。所以申请=工作。对的。
每个工作有一个am。对的。
从那以后,你说的话有点搞混了。配置单元查询不是应用程序。配置单元查询由配置单元转换为链接的mapreduce作业。因此,当您执行一个复杂的配置单元查询时,配置单元将提交必要的mapreduce作业(这是应用程序),一个接一个地运行以获得最终结果。
例如,我们使用以下sql查询:
如果要使用mapreduce手动解决此问题,则需要创建2个作业:
作业1-聚合:将输入Map到(city,total)对,并减少每个城市的和值
作业2-排序:将作业1的结果Map到反向对(total,city),并让shuffle/reduce对它们进行排序
详细解释和说明如何解决这个问题与乔布斯先生在这里。
如果在配置单元中运行该查询,则输出如下所示:
你可以看到Hive也创造了两个工作岗位,一个接一个。您可以看到两次记录“starting job”,以及两次生成的新作业url。
hive将作业称为“阶段”,但这些只是普通的mapreduce作业(即应用程序)。
你可以找到Hive和我在这里做的一些手工工作的比较和基准。hive使用了与我手工编码的mr jobs相同的作业数和执行时间。所以基本上它仍然链接着mapreduce作业,它们是为您生成的,这样您就不需要编写代码了。
我所说的一切只对默认的执行引擎mapreduce有效。使用tez或spark作为执行引擎是另一回事。