单个配置单元应用程序(作业)是否产生多个纱线应用程序?
Does single hive application(job) spawn multiple yarn applications?
提交给 Yarn 的单个 HIVE 查询是否会创建多个作业(即多个 YARN 应用程序)?在 YARN 上下文中,我将工作和应用程序视为相同的想法。
据我了解 -- Yarn 根据 'application' 创建一个应用程序主控 (AM)。所以这里可以将单个 HIVE 查询视为 'application'。因此,资源管理器将在某个节点上创建容器并在该容器中启动 AM。该容器反过来可能会创建多个 'tasks'(不是应用程序),即为该 AM 保留的其他容器内的映射器和缩减器(在相同或不同的节点上——这在这里无关紧要)。现在,所有这些 Application Master 的集合都致力于解决提交给 YARN 的单个 HIVE 查询。事实上,这就是为什么我们说 AM 是针对每个应用程序的。由于我们只提交了一个 HIVE 查询,因此从 YARN 的角度来看,只有一个应用程序。所以当我启动下面的 YARN 命令时,它应该只显示一个应用程序 运行:-
yarn application -list
这个理解对吗?或者,如果我们为一个 HIVE 查询生成了多个映射器和缩减器,则会调用多个 YARN 应用程序?
一开始你是对的:
- 由 MapReduce 创建的 YARN 应用程序称为作业。所以申请=工作。正确。
- 每个作业有一个 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 的结果映射到逆对 (total,city) 并让 shuffle/reduce 对它们进行排序
关于如何使用 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个job,一个接一个。您可以看到 "Starting Job" 记录了两次,以及生成了两次新工作 url。
Hive 将作业称为 "Stages",但这些只是普通的 MapReduce 作业(即应用程序)。
您可以找到 Hive 与我做过的一些手动工作的比较和基准测试 here。 Hive 使用的作业数量和执行时间与我手动编码的 MR 作业大致相同。所以基本上它仍然是链式 MapReduce 作业,它们是为您生成的,因此您不需要编写代码。
我所说的一切仅对默认执行引擎 MapReduce 有效。使用 Tez 或 Spark 作为执行引擎是另一回事。
提交给 Yarn 的单个 HIVE 查询是否会创建多个作业(即多个 YARN 应用程序)?在 YARN 上下文中,我将工作和应用程序视为相同的想法。
据我了解 -- Yarn 根据 'application' 创建一个应用程序主控 (AM)。所以这里可以将单个 HIVE 查询视为 'application'。因此,资源管理器将在某个节点上创建容器并在该容器中启动 AM。该容器反过来可能会创建多个 'tasks'(不是应用程序),即为该 AM 保留的其他容器内的映射器和缩减器(在相同或不同的节点上——这在这里无关紧要)。现在,所有这些 Application Master 的集合都致力于解决提交给 YARN 的单个 HIVE 查询。事实上,这就是为什么我们说 AM 是针对每个应用程序的。由于我们只提交了一个 HIVE 查询,因此从 YARN 的角度来看,只有一个应用程序。所以当我启动下面的 YARN 命令时,它应该只显示一个应用程序 运行:-
yarn application -list
这个理解对吗?或者,如果我们为一个 HIVE 查询生成了多个映射器和缩减器,则会调用多个 YARN 应用程序?
一开始你是对的:
- 由 MapReduce 创建的 YARN 应用程序称为作业。所以申请=工作。正确。
- 每个作业有一个 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 的结果映射到逆对 (total,city) 并让 shuffle/reduce 对它们进行排序
关于如何使用 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个job,一个接一个。您可以看到 "Starting Job" 记录了两次,以及生成了两次新工作 url。
Hive 将作业称为 "Stages",但这些只是普通的 MapReduce 作业(即应用程序)。
您可以找到 Hive 与我做过的一些手动工作的比较和基准测试 here。 Hive 使用的作业数量和执行时间与我手动编码的 MR 作业大致相同。所以基本上它仍然是链式 MapReduce 作业,它们是为您生成的,因此您不需要编写代码。
我所说的一切仅对默认执行引擎 MapReduce 有效。使用 Tez 或 Spark 作为执行引擎是另一回事。