单个蜂巢应用程序(作业)是否会产生多个纱线应用程序?

时间:2016-07-06 10:21:30

标签: hadoop hive yarn

提交给Yarn的单个HIVE查询是否会创建多个作业(即多个YARN应用程序)?在这里,我将工作和应用视为在YARN背景下的相同思想。

根据我的理解 - Yarn为每个应用程序创建一个应用程序主(AM)'。因此,单个HIVE查询可以被视为“应用程序”。因此,资源管理器将在某个节点上创建容器并在该容器中启动AM。反过来,该容器可能会创建多个任务' (不是应用程序),即为该AM保留的其他容器中的映射器和缩减器(在相同或不同的节点上 - 这在这里是无关紧要的)。现在,所有这些应用程序大师的集合都参与解决提交给YARN的单个HIVE查询。事实上,这就是为什么我们说AM是每个应用程序。由于我们只提交了一个HIVE查询,从YARN的角度来看,只有一个应用程序。因此,当我触发下面的YARN命令时,它应该只显示一个正在运行的应用程序: -

yarn application -list

这种理解是否正确?或者,如果我们为一个HIVE查询生成了多个映射器和缩减器,则会调用多个YARN应用程序?

1 个答案:

答案 0 :(得分:5)

一开始你是对的:

  • MapReduce创建的YARN应用程序称为Job。所以 application = job 。正确的。
  • 每份工作有一个AM。正确的。

从那里,你说的话有点混乱。 Hive查询不是应用程序。 Hive将Hive查询转换为链式MapReduce作业。因此,当您执行复杂的Hive查询时,Hive将提交必要的MapReduce作业(这是YARN应用程序),一个接一个地运行以获得最终结果。

例如,让我们采用以下SQL查询:

SELECT SUM(total) as sumtotal, city
FROM donations
GROUP BY city
ORDER BY sumtotal;

如果您想使用MapReduce手动解决此问题,则需要创建2个作业:

  • 作业1 - 聚合:将输入映射到(城市,总计)对并减少获取每个城市的SUM值
  • 作业2 - 排序:将作业1的结果映射到反向对(总计,城市),然后让它们进行洗牌/减少排序

有关如何使用MR作业解决此问题的详细说明和说明here

如果在Hive中运行该查询,则输出如下所示:

INFO  : number of splits:3
INFO  : Submitting tokens for job: job_1454508485700_0039
INFO  : The url to track the job: http://ubuntu0:8088/proxy/application_1454508485700_0039/
INFO  : Starting Job = job_1454508485700_0039, Tracking URL = http://ubuntu0:8088/proxy/application_1454508485700_0039/
INFO  : Kill Command = /home/hduser/hadoop/bin/hadoop job  -kill job_1454508485700_0039
INFO  : Hadoop job information for Stage-1: number of mappers: 3; number of reducers: 3
INFO  : 2016-02-10 22:21:15,773 Stage-1 map = 0%,  reduce = 0%
INFO  : 2016-02-10 22:22:08,421 Stage-1 map = 11%,  reduce = 0%, Cumulative CPU 99.2 sec
INFO  : 2016-02-10 22:22:17,019 Stage-1 map = 44%,  reduce = 0%, Cumulative CPU 127.32 sec
INFO  : 2016-02-10 22:22:20,694 Stage-1 map = 67%,  reduce = 0%, Cumulative CPU 134.32 sec
INFO  : 2016-02-10 22:22:21,906 Stage-1 map = 78%,  reduce = 0%, Cumulative CPU 135.2 sec
INFO  : 2016-02-10 22:22:32,877 Stage-1 map = 89%,  reduce = 0%, Cumulative CPU 147.49 sec
INFO  : 2016-02-10 22:22:35,379 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 149.85 sec
INFO  : 2016-02-10 22:22:39,108 Stage-1 map = 100%,  reduce = 44%, Cumulative CPU 160.65 sec
INFO  : 2016-02-10 22:22:41,578 Stage-1 map = 100%,  reduce = 56%, Cumulative CPU 170.0 sec
INFO  : 2016-02-10 22:22:42,792 Stage-1 map = 100%,  reduce = 60%, Cumulative CPU 171.87 sec
INFO  : 2016-02-10 22:22:44,022 Stage-1 map = 100%,  reduce = 89%, Cumulative CPU 183.23 sec
INFO  : 2016-02-10 22:22:46,540 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 183.23 sec
INFO  : Ended Job = job_1454508485700_0039
INFO  : number of splits:2
INFO  : Submitting tokens for job: job_1454508485700_0040
INFO  : The url to track the job: http://ubuntu0:8088/proxy/application_1454508485700_0040/
INFO  : Starting Job = job_1454508485700_0040, Tracking URL = http://ubuntu0:8088/proxy/application_1454508485700_0040/
INFO  : Kill Command = /home/hduser/hadoop/bin/hadoop job  -kill job_1454508485700_0040
INFO  : Hadoop job information for Stage-2: number of mappers: 2; number of reducers: 1
INFO  : 2016-02-10 22:23:16,180 Stage-2 map = 0%,  reduce = 0%
INFO  : 2016-02-10 22:23:46,453 Stage-2 map = 50%,  reduce = 0%, Cumulative CPU 13.39 sec
INFO  : 2016-02-10 22:23:47,715 Stage-2 map = 67%,  reduce = 0%, Cumulative CPU 14.73 sec
INFO  : 2016-02-10 22:23:48,945 Stage-2 map = 100%,  reduce = 0%, Cumulative CPU 17.38 sec
INFO  : 2016-02-10 22:24:10,960 Stage-2 map = 100%,  reduce = 71%, Cumulative CPU 25.33 sec
INFO  : 2016-02-10 22:24:13,383 Stage-2 map = 100%,  reduce = 98%, Cumulative CPU 31.32 sec
INFO  : 2016-02-10 22:24:14,616 Stage-2 map = 100%,  reduce = 100%, Cumulative CPU 32.61 sec
INFO  : MapReduce Total cumulative CPU time: 32 seconds 610 msec
INFO  : Ended Job = job_1454508485700_0040
INFO  : Moving data to: /user/hduser/donors/hive_output_part2 from hdfs://ubuntu0:9000/user/hive/warehouse/.hive-staging_hive_2016-02-10_22-20-50_281_4971139345555329337-4/-ext-10001
INFO  : Table default.hive_output_part2 stats: [numFiles=0, numRows=14966, totalSize=0, rawDataSize=321343]
No rows affected (207.86 seconds)

你可以看到Hive也创造了2个工作,一个接一个。您可以看到两次“启动作业”,以及两次生成的新作业URL。

Hive将作业称为“阶段”,但这些只是普通的MapReduce作业(即应用程序)。

你可以找到Hive与我做过here的一些手工工作的比较和基准。 Hive使用相同数量的作业,并且与手动编码的MR作业的执行时间大致相同。所以基本上它仍然是链接的MapReduce作业,它们是为你生成的,所以你不需要编写代码。

我所说的一切只对默认执行引擎MapReduce有效。使用Tez或Spark作为执行引擎是另一回事。