HIVE查询性能-数据块大小

HIVE查询性能-数据块大小,第1张

通过desc formatted table_name查看表信息,包含文件数、size路径等;

desc formatted table_name 

通过totalSize/numFiles可以算出每个文件的平均大小;

当启动的map数远远大于文件数且每个文件比较大时,启动的map会copy相关文件到map本地,如果集群较大时可能会影响执行效率。

当join时有一个或多个小表可以装载进内存时可以使用mapjoin完成。

第一种方法是可以加上mapjoin指示

第二种方法是设置 set hive.auto.convert.join=true来让hive自动优化。同时可以指定

set hive.auto.convert.join.noconditionaltask = true--默认开启

set hive.auto.convert.join.noconditionaltask.size = 10000000--默认10M,可以根据需求做调整。

hive.mapjoin.smalltable.filesize= 2500000;--早期hive版本小表文件大小设置默认25M。

数据量比较大启动mapjoin后会造成问题请关闭

set hive.map.aggr = true//是否在 Map 端进行聚合,默认为 True ;

set hive.groupby.mapaggr.checkinterval = 100000000//在 Map 端进行聚合 *** 作的条目数目

1、在关联 *** 作前尽量减小数据集,能先聚合的先聚合、能过滤的先过滤(如设置查询条件、合理设置分区,有分区必须设置分区范围)。

2、关联时数据类型要做到一致,如果不一致请用cast先转换类型。

3、慎用count(distinct) ,容易产生数据倾斜,可以先group by 再count。

4、减少小文件,合理设置输入文件大小、合理设置map job 、reduce job数。

set hive.merge.mapredfiles=true;--设置合并map文件标识。

set mapred.max.split.size=100000000--设置最大输入文件大小,大于此数值都会进行拆分。

set mapred.min.split.size.per.node=100000000--设置每个节点可处理的最小值。

set mapred.min.split.size.per.rack=100000000--设置每个机架可处理的最小值。

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat– 执行前进行小文件合并。

set mapred.reduce.tasks=10-- 设置reduce的数量

set hive.exec.reducers.bytes.per.reducer=1073741824 --设置每个reduce所处理的数据大小

5、选取字段避免用select * ,只引用你要用的字段,如select a.uid,a.price。

6、关联值有null值的情况下,可以将null值过滤出来单独处理或者将null值随机赋值。当存在某key有热点问题,也可以同样处理。

7、合理设置数据模型、文件存储格式有利于查询效率优化。

8、善用union all 合并对于同一个表的查询,有利于整体提高效率。

9、合理使用中间临时表,数据量巨大时,如统计一年的数据,可先小规模聚合如按月聚合生成中间表,最后再合并统计出结果。

10、有order by 要限制输出条数。

11、合理设置并行查询

set hive.exec.parallel= true ; --以开启并发执行。

set hive.exec.parallel.thread.number= 10//同一个sql允许最大并行度,默认为8。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11925938.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存