1.hive中的参数优化

mapred.reduce.tasks   

返回reduce文件的个数,根据需求调整,默认的也可以使用分桶数量控制 

hive.mapred.mode 
Map/Redure 模式,如果设置为 strict,将禁止3中类型的查询:
1.分区表的where筛选条件必须含有分区字段;
2.对使用了order by语句的查询,必须使用limit语句(order by语句为执行排序会将所有的结果集数据分发到同一个reducer中进行处理,增加limit语句可以防止reducer额外执行很长时间)
3.限制笛卡儿积的查询,就是有where语句,而没有on语句。 
设置为nonstrict好一点吧

hive.merge.mapfiles 
在Map-only的任务结束时合并小文件

hive.merge.mapredfiles 
是否开启合并 Map/Reduce 小文件,即是否在Map-Reduce的任务结束时合并小文件
false

hive.exec.parallel 
是否开启 map/reduce job的并发提交。 
false

hive.limit.optimize.enable
当使用LIMIT语句时,其可以对数据源进行抽样,避免执行整个查询语句,然后再返回部分结果
但这个功能有个缺点,有可能输入中有用的数据永远不会被处理到。

hive.multigroupby.singlemr
一个特别的优化,是否将查询中的多个group by操作组装到单个MapReduce任务中。
false
 

hive.exec.mode.local.auto 
决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) 
true

hive.exec.mode.local.auto.inputbytes.max 
如果 hive.exec.mode.local.auto 为 true,当输入文件大小小于此阈值时可以自动在本地模式运行,默认是 128兆。 
134217728L

hive.exec.mode.local.auto.tasks.max 
如果 hive.exec.mode.local.auto 为 true,当 Hive Tasks(Hadoop Jobs)小于此阈值时,可以自动在本地模式运行。 
4

hive.auto.convert.join 
是否根据输入小表的大小,自动将 Reduce 端的 Common Join 转化为 Map Join,从而加快大表关联小表的 Join 速度。 
false

hive.mapred.local.mem 
Mapper/Reducer 在本地模式的最大内存量,以字节为单位,0为不限制。 
0

hive.groupby.skewindata 
决定 group by 操作是否支持倾斜的数据。 
false

hive.exec.compress.intermediate 
决定查询的中间 map/reduce job (中间 stage)的输出是否为压缩格式。 
false

hive.exec.parallel.thread.number 
并发提交时的并发线程的个数。 
8

mapred.job.tracker 
Job Tracker 的 URL,使用 Hadoop Client 的配置,如果这个配置设置为 'local',将使用本地模式。 
local

hive.map.aggr 
决定是否可以在 Map 端进行聚合操作 
true

hive.merge.size.per.task 
每个任务合并后文件的大小,根据此大小确定 reducer 的个数,默认 256 M。 
256000000

hive.merge.smallfiles.avgsize 
需要合并的小文件群的平均大小,默认 16 M。 
16000000

hive.optimize.skewjoin 
是否优化数据倾斜的 Join,对于倾斜的 Join 会开启新的 Map/Reduce Job 处理。 
false

hive.skewjoin.key 
倾斜键数目阈值,超过此值则判定为一个倾斜的 Join 查询。 
1000000

hive.skewjoin.mapjoin.map.tasks 
处理数据倾斜的 Map Join 的 Map 数上限。 
10000

hive.skewjoin.mapjoin.min.split 
处理数据倾斜的 Map Join 的最小数据切分大小,以字节为单位,默认为32M。 
33554432

hive.mergejob.maponly 
是否启用 Map Only 的合并 Job。 
true

2.表结构优化

分区分桶优化

分区分桶优化主要作用是减少检索的范围

每个分区对应一个文件夹, 分桶对应的是文件,每个通数据量控制在1个block大小(128m)分桶也可以用来合并小文件

3.sql语句优化

少用子查询,多用开窗函数

union分为多条sql执行