hive在跑数据时经常会出现数据倾斜的情况,使的作业经常reduce完成在99%后一直卡住,最后的1%花了几个小时都没跑完,这种情况就很可能是数据倾斜的原因,解决方法要根据具体情况来选择具体的方案

1、join的key值发生倾斜,key值包含很多空值或是异常值

这种情况可以对异常值赋一个随机值来分散key

通过rand函数将为null的值分散到不同的值上,在key值比较就能解决数据倾斜的问题

注:对于异常值如果不需要的话,最好是提前过滤掉,这样计算量可以大大减少

2、当key值都是有效值时,解决办法为设置以下几个参数

set hive.exec.reducers.bytes.per.reducer = 1000000000

也就是每个节点的reduce 默认是处理1G大小的数据,如果你的join 操作也产生了数据倾斜,那么你可以在hive 中设定

set hive.optimize.skewjoin = true;

set hive.skewjoin.key = skew_key_threshold (default = 100000)

hive 在运行的时候没有办法判断哪个key 会产生多大的倾斜,所以使用这个参数控制倾斜的阈值,如果超过这个值,新的值会发送给那些还没有达到的reduce, 一般可以设置成你

(处理的总记录数/reduce个数)的2-4倍都可以接受.

倾斜是经常会存在的,一般select 的层数超过2层,翻译成执行计划多于3个以上的mapreduce job 都很容易产生倾斜,建议每次运行比较复杂的sql 之前都可以设一下这个参数. 如果你不知道设置多少,可以就按官方默认的1个reduce 只处理1G 的算法,那么 skew_key_threshold = 1G/平均行长. 或者默认直接设成250000000 (差不多算平均行长4个字节)

3、reduce数太少

set mapred.reduce.tasks=800;

默认是先设置hive.exec.reducers.bytes.per.reducer这个参数,设置了后hive会自动计算reduce的个数,因此两个参数一般不同时使用

4、对于group by 产生倾斜的问题

set hive.map.aggr=true (开启map端combiner); //在Map端做combiner,假如map各条数据基本上不一样, 聚合没什么意义,做combiner反而画蛇添足,hive里也考虑的比较周到通过参数hive.groupby.mapaggr.checkinterval = 100000 (默认)

hive.map.aggr.hash.min.reduction=0.5(默认)

两个参数的意思是:预先取100000条数据聚合,如果聚合后的条数/100000>0.5,则不再聚合

set hive.groupby.skewindata=true;// 决定 group by 操作是否支持倾斜的数据。注意:只能对单个字段聚合. 控制生成两个MR Job,第一个MR Job Map的输出结果随机分配到reduce做次预汇总,减少某些key值条数过多某些key条数过小造成的数据倾斜问题

5、小表与大表关联

此时,可以通过mapjoin来优化,

总体来说:相对于数据量不是很大,又出现了数据倾斜,以上的方式也是可以的,但是相比较spark来处理数据倾斜差距不是一个级别的。

HIVE--数据倾斜解决办法相关推荐

  1. Hive数据倾斜解决方法总结

    Hive数据倾斜解决方法总结 参考文章: (1)Hive数据倾斜解决方法总结 (2)https://www.cnblogs.com/kongcong/p/7777092.html 备忘一下.

  2. Hive数据倾斜解决要点

    数据倾斜的外在表现是执行时间超长. 一般发生在group by 或者join操作上,表现为一个或几个reduce一直没办法做完,原因是key分布不均,某个或某几个key的数据特别大.这种情况下,另外有 ...

  3. 【HIVE数据倾斜常见解决办法】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.什么是HIVE数据倾斜? 二.数据倾斜原因及解决办法 1. Join 倾斜 a. 大表 Join 小表 b. 大表 ...

  4. HIVE 数据倾斜浅谈

    HIVE 数据倾斜浅谈 一.数据倾斜现象   map100%,reduce一直卡在一个值,如99%. 二.数据倾斜的原因   数据按key的hash值分配到reduce中,如果有的key值比较集中,就 ...

  5. Hive数据倾斜优化

    Hive数据倾斜 Group By 中的计算均衡优化 1.Map端部分聚合 先看看下面这条SQL,由于用户的性别只有男和女两个值 (未知).如果没有map端的部分聚合优化,map直接把groupby_ ...

  6. Spark数据倾斜解决

    一.数据倾斜表现 数据倾斜就是数据分到各个区的数量不太均匀,可以自定义分区器,想怎么分就怎么分. Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量 ...

  7. hive数据倾斜及处理案例

    什么是数据倾斜 数据倾斜其实是进行分布式计算的时候,某些节点的计算能力比较强或者需要计算的数据比较少,早早执行完了,某些节点计算的能力较差或者由于此节点需要计算的数据比较多,导致出现其他节点的redu ...

  8. sqoop-import 并行抽数及数据倾斜解决

    最近在数据中台的数据抽数优化工作,由于单表数据量太大(每天千万级别)导致sqoop抽数使用单实例报内存溢出以及抽数时间过长,决定采用sqoop的多实例并行抽数,参考了一些文档,但同时遇到了一些问题,趁 ...

  9. 深入浅出Hive数据倾斜,最全面的讲解(好文收藏)

    背景 我们日常使用HIVE SQL的时候可能会遇到这样一个令人苦恼的场景:执行一个非常简单的SQL语句,任务的进度条长时间卡在99%,不确定还需多久才能结束,这种现象称之为数据倾斜.这一现象出现的原因 ...

  10. 爬虫爬数据时,post数据乱码解决办法

    最近在写一个爬虫,目标网站是:http://zx.bjmemc.com.cn/,可能是为了防止被爬取数据,它给自身数据加了密.用谷歌自带的抓包工具也不能捕获到数据.于是下了Fiddler.     F ...

最新文章

  1. ttf,woff2字体转化为png图片,python读取图片
  2. mysql--多实例启动方法
  3. 前端一HTML:三: 浏览器页面的本质-html,html语言规则
  4. [BS-28] iOS中分页的几种算法
  5. UVA 11557 - Code Theft (KMP + HASH)
  6. 【课题总结】OpenCV 抠图项目实战(7)边缘检测
  7. JS 回车快捷键登陆页面 兼容火狐和IE
  8. 26、Windows API Shell编程(2)
  9. win10双显卡怎么切换amd和英特尔_win10双显卡怎么切换
  10. C语言练手题(52个小练习)
  11. (综述,讲得很好)基于3DMM的三维人脸重建技术总结
  12. 【题解】PTA-Python题库 浙大版《Python 程序设计》题目集题解索引
  13. HTML5快速设计网页
  14. Miles per gallon to kilometers per liter
  15. 【中土世界】萨鲁曼小传
  16. 吴洪声十问易名CEO金小刚:域名还有没有投资价值?
  17. mysql 多表中间表查询_mysql多表连接查询
  18. Bluetooth Core Architecture Blocks----蓝牙核心架构
  19. oracle 删除数据违反约束条件,ORA-02292: 违反完整约束条件 处理
  20. PyTorch中BN层与CONV层的融合(merge_bn)

热门文章

  1. 那些年,我们解析过的前端异常
  2. linux 下的动态库制作 以及在python 中如何调用 c 函数库
  3. 深度优先搜索-和为某数的所有组合
  4. 经验总结21--抓取WEB数据,汇率,HtmlAgilityPack
  5. hive实战读书笔记(第4章)hive表DDL
  6. CPU,内存, 硬盘,指令之间的关系
  7. Android开发实践:Java层与Jni层的数组传递
  8. 【编译原理笔记01】什么是编译,编译系统各结构作用
  9. thing php官网,Thinkphp5企业官网,php后台管理框架
  10. 关于vhr项目部署所遇到的问题总结,Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin