计算机系统应用教程网站

网站首页 > 技术文章 正文

大数据之-HIVE入门(十四) php hive大数据处理

btikc 2024-10-12 10:58:49 技术文章 10 ℃ 0 评论

查询优化

  • 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。


select /*+ MAPJOIN(time_dim) */ count(*) from
store_sales join time_dim on (ss_sold_time_sk = t_time_sk);
---
select /*+ MAPJOIN(time_dim, date_dim) */ count(*) from
store_sales 
join time_dim on (ss_sold_time_sk = t_time_sk) 
join date_dim on (ss_sold_date_sk = d_date_sk)
where t_hour = 8 and d_year = 2002
---
set hive.auto.convert.join=true;
set hive.auto.convert.join.noconditionaltask = true;
set hive.auto.convert.join.noconditionaltask.size = 10000000;
select count(*) from
store_sales join time_dim on (ss_sold_time_sk = t_time_sk)

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

  • group by 优化

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。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表