1.行过滤
尽早尽量过滤数据,减少每个阶段的数据量。
例如两个表join,把where筛选条件写到单表子查询里再进行join可减少每个表的读取数据量。
2.列裁剪
例如某表有a,b,c,d,e五个字段,但是我们只需要a和b,那么请用select a,b from table 而不是select * from table。
3.分区裁剪
在查询的过程中减少不必要的分区,即尽量指定分区,这一块hive分区表严格模式有强制措施。
4.减少job数
巧妙的使用 UNION ALL 减少 job 数量
对于多表union all场景,我们可以把多个表的数据先读取进来,然后打上标记再去做聚合统计。
利用多表相同的JOIN 条件,去减少 job 的数量
不论是外关联outer join还是内关联inner join,如果join的key相同,不管有多少表,都会合并为一个MapReduce任务。
5.减少任务map数量
主要困扰我们的是小文件问题,首先我们hive配置中添加了set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat参数,
其次从根本上还是要通过采集端文件拆分优化或者小文件合并服务等方面减少小文件的形成。
6.善用multi-insert、善用union all
#查询了两次a
insert overwrite table tmp1 select ... from a where 条件1 union all insert overwrite table
大数据处理与优化技巧

最低0.47元/天 解锁文章
997

被折叠的 条评论
为什么被折叠?



