验证 Hive 单查询和多查询并行性
Validate Hive Single and Multi Query Parallelism
我使用以下 hive-site.xml 属性配置了 Hive 并行性并重新启动了集群
属性 1
Name: hive.exec.parallel
Value: true
Description: Run hive jobs in parallel
属性 2
Name: hive.exec.parallel.thread.number
Value: 8 (default)
Description: Maximum number of hive jobs to run in parallel
为了测试并行性,我创建了以下 2 个条件:
1。 file.hql 和 运行 中的单个查询,如 hive -f file.hql
SELECT COL1, COL2 FROM TABLE1
UNION ALL
SELECT COL3, COL4 FROM TABLE2
结果:
当hive.exec.parallel = 真时,
耗时:28.015秒,
总 MapReduce CPU 花费的时间:3 秒 10 毫秒
当hive.exec.parallel = false,
耗时:24.778 秒,
总 MapReduce CPU 花费的时间:3 秒 90 毫秒。
2。在 2 个不同的文件中独立查询如下,运行 为 nohup hive -f file1.hql & nohup hive -f file2.hql
select count(1) from t1 -> file1.sql
select count(1) from t2 -> file2.sql
结果:
当hive.exec.parallel = false,
耗时:29.391 秒,
总 MapReduce CPU 花费的时间:1 秒 890 毫秒
问题:
如何检查以上 2 个条件确实 运行ning 并行?
在控制台中,我看到的结果好像查询是按顺序 运行ning 进行的。
为什么 hive.exec.parallel = true 时花费的时间更多?我如何才能看到使用了多个阶段的配置单元?
谢谢,
当Hive执行引擎为MR(hive.execution.engine=mr
)时,Hive将query表示为一个或多个Map-Reduce作业,这些作业(每一个都包含Map和reduce)如果可能,可以并行执行。
例如这个查询:
SELECT COL1, COL2 FROM TABLE1
UNION
SELECT COL3, COL4 FROM TABLE2
可以作为 3 个作业执行:
1 - 来自表 1 的 select,
2-select表2,
3-UNION(不同)
前两个作业可以并行执行,第三个作业在第一个和第二个完成后并行执行。
可以根据这些参数执行更多的 MR 作业来执行更复杂的查询:
hive.exec.parallel
和 hive.exec.parallel.thread.number
允许在 MR 上并行执行单个查询 运行 的作业。
您可以在 Job Tracker 上查看作业,URL 会在执行期间打印在日志中。您可以在日志中看到一些作业已启动及其执行进度。
如果在 Tez 执行引擎上 运行(hive.execution.engine=Tez
),Hive 将查询表示为单个优化的 DAG,省略不必要的步骤,例如将中间结果写入持久存储并使用映射器再次读取它们。 DAG 中所有可以并行执行的顶点都在并行执行。当 运行 在 Tez 上时,相同的设置不起作用。它在 Tez 上总是 运行 并行。相同的查询将表示为 2 个映射器顶点(运行 并行)和最后的缩减器 运行。当 mappers 几乎完成时,最后一个 reducer 也可以提前启动。
设置 hive.exec.parallel
和 hive.exec.parallel.thread.number
不会影响 Tez 上查询的并行性,它们也不适用于单个脚本中的两个单独查询。
单个脚本中的两个独立查询 运行 一个接一个,不是并行的(每个都有自己的任务并行性)
上一个示例中的两个 Hive 会话是 运行 并行的(取决于可用的集群资源)
可以使用 time
Unix command 测量时间差异。 Hive 报告的时间是集群时间。如果集群没有可用资源,并行任务可以等待资源。使用作业跟踪器检查执行过程中究竟发生了什么。
所以,实际上有不同种类的并行性。
MR 上的单查询作业并行性 - 您要求的参数是此类。
Hive 会话是 运行 并行 - 这些参数不影响它。
Tez 顶点平行度 - 这些参数不影响它
同一个顶点实例的并行执行(mapper或reducer,每个都可以启动多个)——它们是运行并行的——这些参数不影响它
我使用以下 hive-site.xml 属性配置了 Hive 并行性并重新启动了集群
属性 1
Name: hive.exec.parallel
Value: true
Description: Run hive jobs in parallel
属性 2
Name: hive.exec.parallel.thread.number
Value: 8 (default)
Description: Maximum number of hive jobs to run in parallel
为了测试并行性,我创建了以下 2 个条件:
1。 file.hql 和 运行 中的单个查询,如 hive -f file.hql
SELECT COL1, COL2 FROM TABLE1
UNION ALL
SELECT COL3, COL4 FROM TABLE2
结果:
当hive.exec.parallel = 真时, 耗时:28.015秒, 总 MapReduce CPU 花费的时间:3 秒 10 毫秒
当hive.exec.parallel = false, 耗时:24.778 秒, 总 MapReduce CPU 花费的时间:3 秒 90 毫秒。
2。在 2 个不同的文件中独立查询如下,运行 为 nohup hive -f file1.hql & nohup hive -f file2.hql
select count(1) from t1 -> file1.sql
select count(1) from t2 -> file2.sql
结果:
当hive.exec.parallel = false, 耗时:29.391 秒, 总 MapReduce CPU 花费的时间:1 秒 890 毫秒
问题:
如何检查以上 2 个条件确实 运行ning 并行? 在控制台中,我看到的结果好像查询是按顺序 运行ning 进行的。
为什么 hive.exec.parallel = true 时花费的时间更多?我如何才能看到使用了多个阶段的配置单元?
谢谢,
当Hive执行引擎为MR(hive.execution.engine=mr
)时,Hive将query表示为一个或多个Map-Reduce作业,这些作业(每一个都包含Map和reduce)如果可能,可以并行执行。
例如这个查询:
SELECT COL1, COL2 FROM TABLE1
UNION
SELECT COL3, COL4 FROM TABLE2
可以作为 3 个作业执行: 1 - 来自表 1 的 select, 2-select表2, 3-UNION(不同)
前两个作业可以并行执行,第三个作业在第一个和第二个完成后并行执行。
可以根据这些参数执行更多的 MR 作业来执行更复杂的查询:
hive.exec.parallel
和 hive.exec.parallel.thread.number
允许在 MR 上并行执行单个查询 运行 的作业。
您可以在 Job Tracker 上查看作业,URL 会在执行期间打印在日志中。您可以在日志中看到一些作业已启动及其执行进度。
如果在 Tez 执行引擎上 运行(hive.execution.engine=Tez
),Hive 将查询表示为单个优化的 DAG,省略不必要的步骤,例如将中间结果写入持久存储并使用映射器再次读取它们。 DAG 中所有可以并行执行的顶点都在并行执行。当 运行 在 Tez 上时,相同的设置不起作用。它在 Tez 上总是 运行 并行。相同的查询将表示为 2 个映射器顶点(运行 并行)和最后的缩减器 运行。当 mappers 几乎完成时,最后一个 reducer 也可以提前启动。
设置 hive.exec.parallel
和 hive.exec.parallel.thread.number
不会影响 Tez 上查询的并行性,它们也不适用于单个脚本中的两个单独查询。
单个脚本中的两个独立查询 运行 一个接一个,不是并行的(每个都有自己的任务并行性)
上一个示例中的两个 Hive 会话是 运行 并行的(取决于可用的集群资源)
可以使用 time
Unix command 测量时间差异。 Hive 报告的时间是集群时间。如果集群没有可用资源,并行任务可以等待资源。使用作业跟踪器检查执行过程中究竟发生了什么。
所以,实际上有不同种类的并行性。
MR 上的单查询作业并行性 - 您要求的参数是此类。
Hive 会话是 运行 并行 - 这些参数不影响它。
Tez 顶点平行度 - 这些参数不影响它
同一个顶点实例的并行执行(mapper或reducer,每个都可以启动多个)——它们是运行并行的——这些参数不影响它