hive优化: http://itindex.net/detail/46074-hive-%E4%BC%98%E5%8C%96-tips it瘾的。 hive优化是一个课题 需要在仔细整理
http://www.aboutyun.com/thread-7392-1-1.html hive join 细节
什么时候可以避免执行MapReduce?
select *
where语句中只有分区字段
set hive.exec.mode.local.auto=true; 设置为本地模式
group by语句
having语句
order by、sort by、distribute by、cluster by语句
orderby是全局排序、sort by是单reduce排序、distribute by是分区字段;
cluster by是distribute by和sort by的简写。
select ip,count(1) as nums from stu group by ip sort by nums desc limit 100; top(100)
以ip为分类, 以统计个数升序排列展示
join优化:
驱动表(数据最多的表)最右边
join中查询表表的大小从左边到右边依次增大
标志机制
显示的告知查询优化器哪张表示大表
/*+streamtable(table_name)*/ eg:
select /*+streamtable(stu)*/ 显示告知hive编译器 stu是这个join中最大的表
a.*, b.name from stu a join tea b on a.id=b.sid;
数据倾斜:
1 怎么看到数据倾斜了,
是reduce状态是99%一直卡在那,数据倾斜大部分数据都集中在reduce的某个文件中造成这个
reduce迟迟完不成。
2 哪些原因造成了倾斜
Mr优化:
什么样的依据说把block从128调成256或者64M---> 根据数据源,比如是视频,看视频平均大小
如果平都都是J几M
集群配置 知道了 才能在优化时候 根据内存 CPU个数来确定容器下map reduce内存和容器个数
hive group by时,某些字段是NULL或者0时,最容易出现倾斜,
写SQL时, select * from t1 where a!=0; where name is not null; 过滤掉这些容易倾斜的。
同时开启set hive.map.aggr=true;
这个设置可以将顶层的聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。