- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hive优化方法
Hive优化方法简介
目录
为什么要优化
如何优化
如何排查
常见问题
注意事项
Hive-0.13新特性
为什么要优化
Hive使用简单
门槛低
容易造成误用
为什么要优化
低效的查询语句会带来哪些问题?
耗时长
浪费集群资源
某任务查询涉及分区表,但未限制分区,导致任务map起了好几万个map
任务类型
是否优化
耗时
Sqoop任务A
否
3hrs, 58mins, 35sec
Sqoop任务A
是
1hrs, 9mins, 17sec
如何优化
减少处理数据量
如何合理的设置map、reduce个数
小文件合并
Shuffle过程优化
JOIN优化
数据倾斜优化
Hive执行
Hive执行其实是将hql语句转换为MapReduce任务进行运行。
MAP
Reduce
Shuffle
Hive执行
以一个GroupBy查询为例:
logs
name
area
A
China
A
China
A
China
B
Japan
select name,count(*) from logs group by name
fileA
fileB
Hive执行
select name,count(*) from logs group by name
logs
name
area
A
China
A
China
logs
name
area
A
China
B
Japan
key
value
A
2
key
value
A
1
B
1
MAP
key
value
A
2
A
1
key
value
B
1
Shuffle
Reduce
key
value
A
3
key
value
B
1
hive.map.aggr
减少处理数据量
分区裁剪
查询涉及分区表时,在WHERE子句或ON子句中限制分区范围
列裁剪
只读取查询中需要用到的列,忽略其他不关心的列
select * from …
select t.col1,… from …
合理设置map、reduce个数
增加map/reduce数,提高并发度,可以加快计算速度,但……
是不是map 、reduce个数越多越好呢?
合理设置map、reduce个数
那么设置过多task会造成哪些影响呢?
从单一任务角度看
Task overhead过大
调度成本高
从用户资源调度角度看
抢占资源,造成任务拥堵
合理设置map数
影响Map个数的因素:
hdfs块大小(dfs.block.size: 128M)
文件的大小
文件的个数
splitsize的大小( mapred.max.split.size 和mapred.min.split.size )
splitSize=Math.max(minSize, Math.min(maxSize, blockSize))
合理设置map个数
建议值
128MB~512MB/Task
调大map个数
调小mapred.max.split.size
调小map个数
调大mapred.max.split.size
合理设置reduce个数
在未指定reduce个数的情况下,计算公式如下:
reducers = Math.min(maxReducers, totalInputFileSize/bytesPerReducer)
maxReducers由参数hive.exec.reducers.max设置,默认999
bytesPerReducer由参数hive.exec.reducers.bytes.per.reducer 设置,默认1G
极端:大数据量Count(1) 情况
合理设置reduce个数
建议值
512MB~1GB/Task
调整reduce个数
通过mapred.reduce.tasks或mapreduce.job.reduces设置
Map Output Bytes
小文件合并——输入合并
输入是大量小文件的影响:
Overhead过大:map task 调度启动时间:4~6s
实际计算时间很小
输入数据是大量小文件怎么办?
考虑输入合并
小文件合并——输入合并
输入合并示例:
set hive.input.format = binehiveinputformat;
set mapred.max.split.size = 536870912; //512MB
set mapred.min.split.size = 134217728; //128MB
小文件合并——输出合并
若任务A输出很多小文件,则后续的任务B/C/D均要做相应的优化处理。
如何合并输出小文件?
任务A
任务B
结果表
输入
输出
输出
输入
任务C
输入
输入
任务D
输出
输出
小文件合并——输出合并
文档评论(0)