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执行