Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!
当前位置: 主页 > Java文档 > 大数据云计算 >

hive优化建议 PDF 下载


分享到:
时间:2020-12-22 09:07来源:http://www.java1234.com 作者:转载  侵权举报
hive优化建议 PDF 下载
失效链接处理
hive优化建议  PDF 下载


本站整理下载:
提取码:qm75 
 
 
相关截图:
 
主要内容:


慎用count(distinct( columnA ))
在大数据场景下不怕数据量大,怕的是数据倾斜,在数据量较大的情况下不要使用count(distinct ( columnA )),这个函数极易触发数据倾斜问题,要用group代替。
Map阶段优化
一、减少map数:
是为了避免小文件过多造成启动很多map任务,浪费集群资源,影响其他job的正常运行。对于总运行时间的减少大部分是节省在map任务的启停与排队等待资源上。注意:对于我们集群上大部分作业来说减少map数更好一些
set mapred.max.split.size= 268435456; 
set mapred.min.split.size.per.node= 134217728; 
set mapred.min.split.size.per.rack= 134217728; 
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 
参数解释:
268435456 Bytes = 256MB
134217728 Bytes = 128MB
mapred.max.split.size:每个Map最大输入大小
mapred.min.split.size.per.node:一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
mapred.min.split.size.per.rack:一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并) 
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat:执行Map前进行小文件合并
前三个参数用于确定map任务切割大小。注:集群hdfs的block块大小为128MB。
第四个参数表示在任务执行前进行小文件合并。
在hive sql加上这4个参数后表示:
1、大于256MB的文件,按照256MB分割输入文件
2、小于256MB但大于128MB的文件,按照128MB分割
3、小于128MB的文件(包括小文件和大文件切割后剩下的),进行合并
注意:要结合实际情况进行着三个参数的设置,找到最合适的设置。
未加参数:
 
加参数之后:
set mapred.max.split.size= 268435456; 
set mapred.min.split.size.per.node= 134217728; 
set mapred.min.split.size.per.rack= 134217728; 
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 
 
 
测试结论:
可以看到在stage-6阶段相比之下减少了10个map,stage18阶段减少了2个map,stage2阶段减少了14个map,总运行时间减少了89秒,资源占用总共减少了26个map任务,如果是在资源池繁忙的时候,总运行时间会减少的更多。
 
二、增加map数:
当input的文件都很大,任务逻辑复杂(用到了很多sum\case when等),map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
参数依然是上面四个,值调整如下:
set mapred.max.split.size= 67108864; 
set mapred.min.split.size.per.node= 67108864; 
set mapred.min.split.size.per.rack= 67108864; 
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
 
未加参数:
 
加参数之后:
 
注意:看上去,貌似这两种配置有些矛盾,一个是要合并小文件,一个是要把大文件拆成小文件,这正是需要重点关注的地方:使单个map任务处理合适的数据量
Join优化(通用)
1、首先明确一点,对于数据量大的表,不要全表join,只join自己需要的数据即可。
2、对要join表的连接字段进行null值处理,可以用函数过滤null,也可以用where条件
3、在对要join的表进行数据过滤时,要把过滤条件写在子句里面
4、保持连接字段类型一致,若不一致会发生数据倾斜,所有数据会集中到1个reduce中处理。不一致的话可以在join时用cast转换一下类型: Select column1 from tableA left join tableB on tableA.id = cast(tableB.id as string);

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐