欢迎投稿

今日深度:

hive数据倾斜,

hive数据倾斜,


hive数据倾斜
定义:
key分布不均匀 导致分发到不同的reduce上 个别reduce任务特别重 导致其他reduce都完成  而这些个别的reduce迟迟不完成

原因:
1.key分布不均匀
2.map端数据倾斜 输入文件太多且大小不一
3.reduce端数据倾斜 分区器问题

解决方案:
1.调解hive配置参数
1)设置hive.map.aggr = true map端部分聚合 相当于combiner
2)设置hive.groupby.skewindata = true 有数据倾斜时 查询计划生成两个mr job 第一个job先进行key随机分配处理 先缩小数据量 第二个job再进行真正的group  by key 处理

2.sql优化
1)大小表进行连接时 使用map join 让小表先进内存 在map端完成reduce
2)大大表进行连接时 如果是空值造成数据倾斜 那么把空值变成一个字符串加上随机数 把这部分倾斜的数据分发到不同的reduce上
3)count distinct 有大量相同特殊值(如空值) 空值可以不同处理 直接最后count结果加即可。或者空值单独拿出来处理 最后再union 回去
4)不同数据类型关联 默认的hash操作会按照其中一种类型的值进行分配,导致别一种类型全部分发到同一个reduce中 把两个关联的类型转换成相同类型


3.MR解决方案
假如A,B两张表关联,A中存在数据倾斜的key
1)先对A表进行采样 将造成数据倾斜的key记录存入一个临时表tmp1(一般来说造成数据倾斜的key不会太多 所以tmp1会是一个小表)
2)故可以将tmp1和B表进行map join,生成tmp2,再把tmp2分发到distribute file cache
3)map读入A表和B表 
4)假如记录来自A表,则判断key是否在tmp2中,如果是,输出到本地文件a,如果不是,则生成对;假如记录来自B表,生成对,进入reduce阶段
5)将文件和步骤4中reduce输出文件合并起来写到hdfs
   

 

文本引用来源:https://baijiahao.baidu.com/s?id=1598147454625876981&wfr=spider&for=pc

www.htsjk.Com true http://www.htsjk.com/hive/39421.html NewsArticle hive数据倾斜, hive数据倾斜 定义: key分布不均匀 导致分发到不同的reduce上 个别reduce任务特别重 导致其他reduce都完成  而这些个别的reduce迟迟不完成 原因: 1.key分布不均匀 2.map端数据...
相关文章
    暂无相关文章
评论暂时关闭