开发者社区> 问答> 正文

hadoop hive任务失败,原因是GC overhead limit exceeded (OOM)

hadoop hive任务失败,原因是GC overhead limit exceeded (OOM)

展开
收起
封神 2016-04-14 13:49:15 13090 0
1 条回答
写回答
取消 提交回答
  • 专注在大数据分布式计算、数据库及存储领域,拥有13+年大数据引擎、数据仓库、宽表引擎、平台研发经验,6年云智能大数据产品技术一号位经验,10年技术团队管理经验;云智能技术架构/云布道师; 研发阿里历代的大数据技术产品包括ODPS、DLA、ADB,最近五年主导宽表引擎研发、DLA、ADB湖仓研发;

    Hadoop任务可能引起OOM错误的原因有很多。一般情况下,首先检查是否重设了hadoop参数:mapred.child.java.opts,一般设为-Xmx2000m,即使用2G的最大堆内存。
    Hive中可能引起OOM的原因及相关的修复设定如下表所示:

    原因:map aggregation
    map aggregation使用哈希表存储group by/distinct key和他们的aggregation结果。
    aggregate结果字段过多,或group by/distinct key的散度过大,可能导致内存占用过多。
    修复:
    减小hive.map.aggr.hash.percentmemory设定(默认为0.5,即使用50%的child堆内存)。

    原因:join
    join需要cache所有相同join key的非驱动表的记录
    修复:
    检查是否把大表设定为驱动表(大表写在join的最右边)。
    如果已经设定正确的驱动表,减小hive.join.emit.interval设定(默认为1000,即每1000行的join结果集输出一次)。

    原因:map join
    map join需要cache全部小表的所有数据
    修复:
    检查小表是否足够小。如果小表超过1G,考虑不要使用map join。

    2019-07-17 18:42:34
    赞同 2 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
spark替代HIVE实现ETL作业 立即下载
2019大数据技术公开课第五季—Hive迁移到MaxCompute最佳实践 立即下载
自建Hadoop数据如何托管到MaxCompute 立即下载

相关实验场景

更多