登 录
注 册
< 大 数 据
Flink
Hadoop
Spark
Hive
HBase
Kafka
其他框架
生产中常见问题
Hive压缩和存储
通过JDBC访问
企业级调优(一)
企业级调优(二)
企业级调优(三)
UDF实战
Hive调优参数大全
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
Hive
>>
生产中常见问题
生产中常见问题
2020-07-05 10:14:31 星期日 阅读:1898
####内存OOM问题 问题背景 在执行insert overwrite操作的时候,执行到一半直接内存OOM 报错内容 `org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space` 问题定位 查询的逻辑输入的原始数据太多(没有限制分区,或者分区的数据量过大),导致启动很多mappers。map阶段的堆内存占用超过设置的默认值(1G?)。可通过hive客户端临时设置map空间占用的内存大小。 `SET mapreduce.map.java.opts="-Xmx4096m";` `Set mapreduce.map.memory.mb=2048;` 这里的设置是会话级别的,退出客户端就是失效。永久设置需要改配置文件:mapred-site.xml ``` <property> <name>mapreduce.map.java.opts</name> <value>-Xmx1024M</value> </property> ``` ####数据倾斜问题 #####数据倾斜发生的场景 **`技术角度`** - Hadoop中的数据倾斜一般都都发生在SQL中count(distinct)、group语句和join上,而且和数据逻辑绑定比较深。比如:A表有id和pid两个字段,对于获取不到pid值的情况,该字段为null。B表中有id和pid字段,对于获取不到pid值的情况,该字段为0。让这两个表进行关联的时候会卡死。 - join数据倾斜包含三种 - - 一张大表一张小表(用mapjoin解决) 两张大表,且某一张有大量空值(因为空值都是一个reduce来处理,所以需要过滤空值后再join) 两张大表,数据本身分布不均匀(针对热点数据单独处理,非热点数据正常处理) spark中的数据倾斜一般也是伴随着group和SQL的join操作,造成OOM **`业务角度`** 某一天北京和上海两个大城市做了大量市场活动。导致这两天当天的曝光日志非常多。按城市统计的时候,半天出不来。 ####解决方案 `解决数据倾斜的重点在于数据设计和业务理解` 1、异常值的过滤:null值 2、对于group by产生的数据倾斜,可以对倾斜的key值做单独处理(比如上面的城市,单独跑北京上海的) 3、尽量不要使用count(distinct),这样会导致只有一个reduce。可以先group,外面再包一层count 4、数据预处理:保证在任务开始之前数据是干净的(这个涉及到团队数仓的开发规范) 5、mapjoin方式 6、设置map端输出结果(中间结果)压缩以节省网络传输量 7、left semi join的使用 8、hive.groupby.skewindata=true(当出现数据倾斜时,hive会自动进行负载均衡,通过启动两轮mr的方式,第一轮将相同的Key随机放到多个reduce计算,这样会把该key的数据量大大减小,第二轮的时候再把相同的Key放在一个reduce里) 9、对key进行hash化(group by的时候拼接随机数)