我使用以下hive-site.xml属性配置了配置单元并行性,并重新启动了集群
物业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
为了测试并行性,我创建了以下两个条件:
1.在file.hql中执行单个查询并作为 hive -f file.hql
```
SELECT COL1, COL2 FROM TABLE1
UNION ALL
SELECT COL3, COL4 FROM TABLE2
结果:
当hive.exec.parallel=true时,所用时间:28.015秒,所用mapreduce cpu总时间:3秒10秒
当hive.exec.parallel=false时,所用时间:24.778秒,所用mapreduce cpu总时间:3秒90毫秒。
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毫秒
问题:
如何检查以上两个条件是否确实并行运行?在控制台中,我看到的结果就像查询是按顺序运行的一样。
为什么hive.exec.parallel=true时花费的时间更多?我怎样才能看到Hive的多个阶段被利用?
谢谢您,
1条答案
按热度按时间csbfibhn1#
当配置单元执行引擎为mr时(
hive.execution.engine=mr
),hive将查询表示为一个或多个map reduce作业,如果可能,这些作业(每个作业都包含map和reduce)可以并行执行。例如,此查询:可以作为3个作业执行:1-从表1中选择,2-选择表2,3-联合(不同)
前两个作业可以并行执行,第三个作业可以在第一个和第二个作业完成后执行。
可以执行更复杂的查询,因为有许多mr作业具有以下参数:
hive.exec.parallel
以及hive.exec.parallel.thread.number
允许对mr上运行的单个查询并行执行作业。您可以在作业跟踪器上检查作业,在执行期间,url会打印在日志中。您可以在日志中看到一些作业已启动及其执行进度。
如果在tez执行引擎上运行(
hive.execution.engine=Tez
),hive将查询表示为单个优化的dag,省略了不必要的步骤,例如将中间结果写入持久性存储并使用mapper再次读取它们。dag中可以并行执行的所有顶点都是并行执行的。在tez上运行时,相同的设置不起作用。它总是在tez上并行运行。同一个查询将表示为两个Map器顶点(并行运行)和最后运行的reducer。最后一个reducer也可以在mappers几乎完成时提前启动。设置
hive.exec.parallel
以及hive.exec.parallel.thread.number
不影响tez上查询的并行性,也不适用于单个脚本中的两个单独查询。单个脚本中的两个独立查询逐个运行,而不是并行运行(每个查询都有自己的任务并行性)
像上一个示例中那样的两个配置单元会话并行运行(取决于可用的集群资源)
时间差可以用
time
unix命令。Hive报告的时间是群集时间。如果集群没有可用的资源,并行任务可以等待资源。使用作业跟踪器检查执行过程中到底发生了什么。所以,实际上有不同种类的平行性。
单查询作业在mr上的并行性-您要求的参数就是这种类型的。
配置单元会话是并行运行的-这些参数不会影响它。
这些参数不会影响它
并行执行同一个顶点示例(Map器或缩减器,每个都可以启动多个)-它们并行运行-这些参数不影响它