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

Dhi*_*raj 3 hadoop hive hadoop-yarn

提交给Yarn的单个HIVE查询是否会创建多个作业(即多个YARN应用程序)?在这里,我认为工作和应用程序在YARN环境中是一样的.

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

yarn application -list
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*mak 5

你在开始时是正确的:

  • MapReduce创建的YARN应用程序称为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;
Run Code Online (Sandbox Code Playgroud)

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

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

详细的解释和说明如何与MR的工作解决了这个位置.

如果在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)
Run Code Online (Sandbox Code Playgroud)

您可以看到Hive也创建了2个作业,一个接一个.您可以看到两次"启动作业",以及两次生成的新作业URL.

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

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

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