gpt4 book ai didi

performance - 使用 IN 子句参数并行执行 Hive 查询

转载 作者:可可西里 更新时间:2023-11-01 14:32:35 26 4
gpt4 key购买 nike

我有一个如下所示的 Hive 查询:

select a.x as column from table1 a where a.y in (<long comma-separated list of parameters>)
union all
select b.x as column from table2 b where b.y in (<long comma-separated list of parameters>)

我已将 hive.exec.parallel 设置为 true,这有助于我在 union all 之间实现两个查询之间的并行性。

但是,我的 IN 子句有许多逗号分隔的值,每个值在 1 个作业中被取一次,然后是下一个值。这实际上是按顺序执行的。

是否有任何配置单元参数启用后可以帮助我为 IN 子句中的参数并行获取数据?

目前,我的解决方案是多次使用 = 而不是一个 IN 子句触发选择查询。

最佳答案

不需要在单独的查询中多次读取相同的数据来实现更好的并行性。为此调整适当的映射器和缩减器并行性。

首先,启用带矢量化的 PPD,使用 CBO 和 Tez:

SET hive.optimize.ppd=true;
SET hive.optimize.ppd.storage=true;
SET hive.vectorized.execution.enabled=true;
SET hive.vectorized.execution.reduce.enabled = true;
SET hive.cbo.enable=true;
set hive.stats.autogather=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.partition.stats=true;
set hive.execution.engine=tez;
SET hive.stats.fetch.column.stats=true;
SET hive.tez.auto.reducer.parallelism=true;

Tez 上映射器的示例设置:

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
set tez.grouping.max-size=32000000;
set tez.grouping.min-size=32000;

如果您决定在 MR 而不是 Tez 上运行,则 Mappers 的示例设置:

set mapreduce.input.fileinputformat.split.minsize=32000; 
set mapreduce.input.fileinputformat.split.maxsize=32000000;

-- reducer 的示例设置:

set hive.exec.reducers.bytes.per.reducer=32000000; --decrease this to increase the number of reducers, increase to reduce parallelism

玩这些设置。成功的标准是更多的映射器/缩减器,并且您的映射和缩减阶段运行得更快。

阅读本文以更好地了解如何调整 Tez:https://community.hortonworks.com/articles/14309/demystify-tez-tuning-step-by-step.html

关于performance - 使用 IN 子句参数并行执行 Hive 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48484391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com