#1.数据倾斜
什么是数据倾斜?
一部分数据多
一部分数据少
造成的结果: MR运行过慢 主要是shuffle和reduce过程慢
分组聚合导致数据倾斜
Hive未优化的分组聚合
方法1:在MAP端直接聚合(分组聚合优化),减少Key
MR失败
方法2:随机数,按随机数放入reduce中 解决数据倾斜 第二个Jobs按分组字段分区
因为生成随机了,所以按
方法1和方法2 一起用是不影响的
先进行聚合 然后按随机数分配reduce 再启动一个job dierge job 按分组字段分区
join的数据倾斜
最后根据KEY进行分组
这里的数据倾斜的现象和影响是什么呢?
1.map join
2. skew join
牺牲一个job为代价解决
将产生数据倾斜的Key去单独跑一个job
其实就是啥, map将大K提出来重新一个job ,剩下的直接生成结果集,然后job2的结果最后也注入结果集
根据参数判断
这里晚点多看一下
大表Join 对倾斜Key的表的key打散,对关联的另一张表的key扩容
为什么????
reduce 并行度
可以指定并行度,也可以自动
可以设置最大值
为什么最大默认1009
可以设置reduce task数据量 估算Reduce并行度
reduce task量与数据量相关合理么?
不合理,因为收到的是map处理后的数据,有可能已经变小很多了,在reduce端小文件
但是无法获取map的数据量
3表join OBC如何优化?
优化后: 先进行小表合并,
谓词下推
谓词下推(predicate pushdown)是指,尽量将过滤操作前移,以减少后续计算步骤的数据量。
CBO优化也会完成一部分的谓词下推优化工作,因为在执行计划中,谓词越靠前,整个计划的计算成本就会越低。
–是否启动谓词下推(predicate pushdown)优化
set hive.optimize.ppd = true;
白话:
谓词下推:先执行过滤条件再执行join
hive本地模式
开启自动转换模式
符合条件用本地 不符合条件用集群
与直接设置HADOOP参数语句的不同
一个自动,一个主动。
set mapreduce.framework.name=local;