验证 Hive 单查询和多查询并行性
Posted
技术标签:
【中文标题】验证 Hive 单查询和多查询并行性【英文标题】:Validate Hive Single and Multi Query Parallelism 【发布时间】:2021-01-04 15:22:33 【问题描述】:我使用以下 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 = true 时, 耗时: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 个条件是否确实并行运行? 在控制台中,我看到的结果好像查询是按顺序运行的一样。
为什么当 hive.exec.parallel = true 时花费的时间更多?如何查看 hive 多个阶段被利用?
谢谢,
【问题讨论】:
【参考方案1】:当Hive执行引擎为MR时(hive.execution.engine=mr
),Hive将查询表示为一个或多个Map-Reduce作业,这些作业(每个都包含Map和reduce)可以尽可能并行执行.
例如这个查询:
SELECT COL1, COL2 FROM TABLE1
UNION
SELECT COL3, COL4 FROM TABLE2
可以作为 3 个作业执行: 1 - 从表 1 中选择, 2-选择表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 个映射器顶点(并行运行)和最后运行的减速器。最后一个 reducer 也可以在 mappers 快完成时提前启动。
设置 hive.exec.parallel
和 hive.exec.parallel.thread.number
不会影响 Tez 上查询的并行性,它们也不适用于单个脚本中的两个单独查询。
单个脚本中的两个单独的查询一个接一个地运行,而不是并行的(每个都有自己的任务并行性)
两个 hive 会话(如上一个示例)并行运行(取决于可用的集群资源)
可以使用time
Unix command 测量时间差异。 Hive 报告的时间是集群时间。如果集群没有可用资源,并行任务可以等待资源。使用 Job tracker 检查执行期间究竟发生了什么。
所以,实际上有不同种类的并行。
MR 上的单查询作业并行性 - 您要求的参数适用于这种类型。
Hive 会话并行运行 - 这些参数不会影响它。
Tez 顶点并行度 - 这些参数不影响它
并行执行同一个顶点实例(mapper或reducer,每个都可以启动多个)——它们是并行运行的——这些参数不影响它
【讨论】:
谢谢@leftjoin。正如您所说,hive.exec.parallel 仅适用于条件 1。parelleism = true -> 34 秒的执行时间。 parelleism = false -> 40 秒 对于条件 2,我猜不需要设置 hive.exec.parallel 参数。不管并行度=真/假,执行时间几乎相似。如果为真,则为 40 秒。假时,38 / 41 秒。 @user1 是的,它可以是任何数字。如果没有什么可并行的,它也可以工作。对于 select count(1) from t1 - 这里没有什么可以并行执行。但您可以在所有情况下保留这些设置。 @user1 影响性能的因素:矢量化 - 矢量化有很多参数。并非所有这些都适用于镶木地板和复杂类型。映射器和减速器并行性(我的答案中的最后一个),另请参阅***.com/a/48296562/2700344 - 使用这些设置 @user1 MR 的映射器并行性:***.com/a/48487306/2700344以上是关于验证 Hive 单查询和多查询并行性的主要内容,如果未能解决你的问题,请参考以下文章
使用 Oozie 在 Hive 上执行查询时,如何解决“只能使用 kerberos 或 Web 身份验证颁发委托令牌”?
在远程集群上从 Spark 运行 hive 查询时,客户端无法通过以下方式进行身份验证:[TOKEN, KERBEROS]