我们在大约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
1条答案
按热度按时间evrscar21#
使用静态分区,如果目标表中已经有许多分区,hive将在最终加载之前更快地扫描它们,另请参阅:hive动态分区提示
如果源表中的小文件太多,请尝试减少它们,对orc文件使用concatenate或在加载源表时使用merge
使用矢量化、调整Map器和还原器:https://stackoverflow.com/a/48487306/2700344
所有的矢量化设置都在这里。
如果目标表包含许多已加载的分区,请尝试关闭统计信息自动收集,此设置可能会加快加载速度:
另外,如果源表是orc并且拆分计算花费的时间太长,请尝试此设置:
更多关于兽人战略:兽人分裂战略