2019独角兽企业重金招聘Python工程师标准>>>

概括

先概括下,Hive中出现OOM的异常原因大致分为以下几种:

1. Map阶段OOM。
2. Reduce阶段OOM。
3. Driver提交Job阶段OOM。

Map阶段OOM:

1. 发生OOM的几率很小,除非你程序的逻辑不正常,亦或是程序写的不高效,产生垃圾太多。

Reduce阶段OOM:

1. data skew 数据倾斜

data skew是引发这个的一个原因。 
key分布不均匀,导致某一个reduce所处理的数据超过预期,导致jvm频繁GC。

2. value对象过多或者过大

某个reduce中的value堆积的对象过多,导致jvm频繁GC。

3.reduce内存不足

 错误信息如下:Container [pid=26845,containerID=container_1419056923480_0212_02_000001] is running beyond virtual memory limits. Current usage: 262.8 MB of 2 GB physical memory used; 4.8 GB of 4.2 GB virtual memory used. Killing container.

解决办法:

1. 增加reduce个数,set mapred.reduce.tasks=300,。

2. 在hive-site.xml中设置,或者在hive shell里调大参数

set mapreduce.map.memory.mb=1024;
set mapreduce.map.java.opts=-Xmx819m;
set mapreduce.reduce.memory.mb=2048;
set mapreduce.reduce.java.opts=-Xmx1638m;

mapreduce.map.memory.mb是向RM申请的内存资源大小

mapreduce.reduce.java.opts 一般只用于配置JVM参数

JVM大小一般是所申请内存的0.75

3. 使用map join 代替 common join. 可以set hive.auto.convert.join = true

4. 设置 hive.optimize.skewjoin = true 来解决数据倾斜问题

Driver提交job阶段OOM:

job产生的执行计划的条目太多,比如扫描的分区过多,上到4k-6k个分区的时候,并且是好几张表的分区都很多时,这时做join。

究其原因,是 因为序列化时,会将这些分区,即hdfs文件路径,封装为Path对象,这样,如果对象太多了,而且Driver启动的时候设置的heap size太小,则会导致在Driver内序列化这些MapRedWork时,生成的对象太多,导致频繁GC,则会引发如下异常:

java.lang.OutOfMemoryError: GC overhead limit exceeded
at sun.nio.cs.UTF_8.newEncoder(UTF_8.java:53)
at java.beans.XMLEncoder.createString(XMLEncoder.java:572)

原因是因为扫描的表的分区太多,上到3千到6千个分区,这样在对计划进行序列化时,仅仅是路径对象Path就会耗去大半Driver,如果Driver设置的heap太小,甚至都会OOM。

解决思路:

1.  减少分区数量,将历史数据做成一张整合表,做成增量数据表,这样分区就很少了。

2. 调大Hive CLI Driver的heap size, 默认是256MB,调节成512MB或者更大。

具体做法是在bin/hive bin/hive-config里可以找到启动CLI的JVM OPTIONS。

这里我们设置

export HADOOP_HEAPSIZE=512

转载于:https://my.oschina.net/u/2000675/blog/1810971

hive job oom相关推荐

  1. Hive MapJoin OOM

    Hive升级完后ETL开发找到我说有的Job一直failed.看了一下在MAP阶段进行MAPJOIN处理时就OOM了,但是开发说没有加MAPJOIN HINT,其实在0.11后hive.auto.co ...

  2. 史上最详细大数据基础知识

    # **1___Hive** ## 0.0.hive基本命令 ```sql [1.分区表] --创建分区 alter table table_name add partition(分区字段='分区值' ...

  3. Apache Doris 03|杂问题记录和案例测试

    目录 案例测试 导入数据测试 查询测试 技术文档: 百度数据仓库 (baidu.com) https://www.kancloud.cn/dorisdb/dorisdb/2146878 http:// ...

  4. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别

    Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了.当初雅虎自己慢慢退出pig的维护之后将它开源贡献到开源社区由所有爱好者来维护.不过现在还是有些公司在用,不过我 ...

  5. hive 语句总结_大数据分析工程师面试集锦4-Hive

    导语 本篇文章为大家带来Hive面试指南,文内会有两种题型,问答题和代码题,题目一部分来自于网上,一部分来自平时工作的总结 精选题型 Hive可考察的内容有:基本概念.架构.数据类型.数据组织.DDL ...

  6. hive增量表和全量表_基于 Flink + Hive 构建流批一体准实时数仓

    基于 Hive 的离线数仓往往是企业大数据生产系统中不可缺少的一环.Hive 数仓有很高的成熟度和稳定性,但由于它是离线的,延时很大.在一些对延时要求比较高的场景,需要另外搭建基于 Flink 的实时 ...

  7. hive解决数据倾斜问题_八种解决 Spark 数据倾斜的方法

    有的时候,我们可能会遇到大数据计算中一个最棘手的问题--数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能. 数 ...

  8. 从 Hive 大规模迁移作业到 Spark 在有赞的实践

    编者荐语: 本文介绍了有赞迁移 Hive 做到到 SparkSQL 上所做的一些改进,以及如何做到 SparkSQL 占比提升到 91% 以上,最后也分享一些在 Spark 踩过的坑和经验希望能帮助到 ...

  9. 深入浅出学Hive:Hive优化

    目录: 初始Hive Hive安装与配置 Hive内建操作符与函数开发 Hive JDBC Hive参数 Hive高级编程 Hive QL Hive Shell基本操作 Hive优化 Hive体系结构 ...

最新文章

  1. 2022-2028年中国B2C电子商务市场投资分析及前景预测报告
  2. 高德全链路压测——语料智能化演进之路
  3. 11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001
  4. 低头是家和月光,抬头是车和远方
  5. SQL Server数据库中使用sql脚本删除指定表的列
  6. 【Python】判断列表中是否存在一个数
  7. 剑指offer66题 -- 输入一个链表,从尾到头打印链表每个节点的值
  8. python利用什么模块_什么是Python的heapq模块?
  9. eclipse快捷键、智能提示
  10. 前端中心化管理API使用说明
  11. Flink AggOperator 增量聚合函数
  12. Matlab期货量化交易特征选取,【策略分享】Matlab量化交易策略源码分享
  13. 数据库实例: STOREBOOK 用户
  14. latex longtable and supertabular 跨页表格
  15. 移动通信网络演进之路
  16. P1138 第k小整数
  17. 新版微信页面底部导航问题
  18. android中如何打开指定卡上的数据连接开关,Android 代码控制手机数据网络的开关(5.0以上)...
  19. YOLOv5训练自己的数据集之详细过程篇
  20. 链栈(Linked Stack)

热门文章

  1. c语言rand随机输出字母,菜鸟求助,写一个随机输出26个英文字母的程序
  2. java日历记事本ppt_JAVA做的日历记事本
  3. 需求分析中适应性怎么写_商业计划书中的市场分析怎么写,这样才完整!
  4. css中属性兼容性写法,CSS3兼容属性和标准属性的书写顺序
  5. php5.3 with-mysql centos_Centos编译搭建php7让php5.3和php7兼容共存教程
  6. 用什么写php最好用,php用什么开发工具比较好
  7. 【存储知识学习】第八章-Fibre Channel协议-8.1 FC网络和8.2FC协议中七种端口类型-《大话存储》阅读笔记
  8. 从架构理解价值-我的软件世界观
  9. SpringBoot+Vue整合WebSocket实现前后端消息推送
  10. Nginx在Windows下载安装启动与配置前后端请求代理