【问题标题】:Reducing mappers and reducers for a simple query on a very large table/view in Hive减少映射器和减少器以在 Hive 中对非常大的表/视图进行简单查询
【发布时间】:2019-06-03 11:12:53
【问题描述】:

我们有一个在大约 5 TB 大小的表/视图上运行的简单查询。我们正在执行 ETL,最后通过添加分区将数据添加到核心表中。

但由于我们正在处理的数据非常庞大,因此查询会产生 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

【问题讨论】:

    标签: hadoop hive hdfs query-optimization apache-tez


    【解决方案1】:

    使用静态分区,如果目标表中已经有很多分区,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
    

    如果你的源表小文件太多,尽量减少,使用concatenate for orc files或者merge during loading source table

    使用矢量化、调整映射器和缩减器的并行性:https://stackoverflow.com/a/48487306/2700344

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

    所有矢量化设置均为here

    如果您的目标表包含许多已加载的分区,请尝试关闭自动收集统计信息,此设置可能会加快加载速度:

    set hive.stats.autogather=false;
    

    另外如果你的源表是orc并且拆分计算耗时太长,试试这个设置:

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

    更多关于ORC策略:ORC split strategy

    【讨论】:

    • 非常感谢所有这些建议。我将立即开始工作,并随时向您通报进度。
    猜你喜欢
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多