减少映射器和缩减器以在 Hive 中对非常大的 table/view 进行简单查询
Reducing mappers and reducers for a simple query on a very large table/view in Hive
我们在大小约为 5 TB 的 table/view 上有一个简单的查询 运行。我们正在执行 ETL,最后通过添加分区将数据添加到核心 table。
但是由于我们处理的数据量很大,查询产生了 4000 多个映射器和 1000 多个缩减器。查询也运行了 40 多分钟。
如何提高/降低资源利用率?
查询:
insert overwrite table dss.prblm_mtrc partition (LOAD_DT) select *, '2019-01-02' as LOAD_DT from dss.v_prblm_mtrc_stg_etl
使用静态分区,如果目标 table 中已经有很多分区,Hive 将在最终加载之前更快地扫描它们,另请参见:HIVE Dynamic Partitioning tips
insert overwrite table dss.prblm_mtrc partition (LOAD_DT='2019-01-02') select * from dss.v_prblm_mtrc_stg_etl
如果你的来源table有太多小文件,尽量减少它们,使用 or use
使用矢量化、调整映射器和缩减器并行度:
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
所有矢量化设置都是 here。
并且如果您的目标 table 包含许多已加载的分区,请尝试关闭统计信息自动收集,此设置可能会加快加载速度:
set hive.stats.autogather=false;
此外,如果您的来源 table 是兽人并且拆分计算需要很长时间,请尝试此设置:
hive.exec.orc.split.strategy=BI;
有关 ORC 策略的更多信息:ORC split strategy
我们在大小约为 5 TB 的 table/view 上有一个简单的查询 运行。我们正在执行 ETL,最后通过添加分区将数据添加到核心 table。
但是由于我们处理的数据量很大,查询产生了 4000 多个映射器和 1000 多个缩减器。查询也运行了 40 多分钟。
如何提高/降低资源利用率?
查询:
insert overwrite table dss.prblm_mtrc partition (LOAD_DT) select *, '2019-01-02' as LOAD_DT from dss.v_prblm_mtrc_stg_etl
使用静态分区,如果目标 table 中已经有很多分区,Hive 将在最终加载之前更快地扫描它们,另请参见:HIVE Dynamic Partitioning tips
insert overwrite table dss.prblm_mtrc partition (LOAD_DT='2019-01-02') select * from dss.v_prblm_mtrc_stg_etl
如果你的来源table有太多小文件,尽量减少它们,使用
使用矢量化、调整映射器和缩减器并行度:
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
所有矢量化设置都是 here。
并且如果您的目标 table 包含许多已加载的分区,请尝试关闭统计信息自动收集,此设置可能会加快加载速度:
set hive.stats.autogather=false;
此外,如果您的来源 table 是兽人并且拆分计算需要很长时间,请尝试此设置:
hive.exec.orc.split.strategy=BI;
有关 ORC 策略的更多信息:ORC split strategy