hadoop—简化Map程序和简化程序,用于在配置单元中的非常大的表/视图上进行简单查询

jrcvhitl  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(256)

我们在大约5 tb的表/视图上运行了一个简单的查询。我们正在执行etl,最后通过添加分区将数据添加到核心表中。
但是由于我们处理的数据非常庞大,查询产生了4000多个Map器和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
evrscar2

evrscar21#

使用静态分区,如果目标表中已经有许多分区,hive将在最终加载之前更快地扫描它们,另请参阅:hive动态分区提示

insert overwrite table dss.prblm_mtrc partition (LOAD_DT='2019-01-02') select * from dss.v_prblm_mtrc_stg_etl

如果源表中的小文件太多,请尝试减少它们,对orc文件使用concatenate或在加载源表时使用merge
使用矢量化、调整Map器和还原器:https://stackoverflow.com/a/48487306/2700344

set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;

所有的矢量化设置都在这里。
如果目标表包含许多已加载的分区,请尝试关闭统计信息自动收集,此设置可能会加快加载速度:

set hive.stats.autogather=false;

另外,如果源表是orc并且拆分计算花费的时间太长,请尝试此设置:

hive.exec.orc.split.strategy=BI;

更多关于兽人战略:兽人分裂战略

相关问题