1、使用本地模式执行
set hive.exec.mode.local.auto=true
2、将Hive设置为“严格”模式
set hive.mapred.mode=strict
备注:strict(严格)、nonstrict(非严格)
3、动态分区属性
属性名称 | 缺省值 | 描述 |
hive.exec.dynamic.partition | false | 设置成true,表示开启动态分区功能 |
hive.exec.dynamic.partition.mode | strict | 设置成nonstrict,表示允许所有分区都是动态的 |
hive.exec.max.dynamic.partitions.pernode | 100 | 每个mapper或reducer可以创建的最大动态分区个数。如果某个mapper或reducer尝试创建大于这个值的分区的话则会抛出一个致命错误信息 |
hive.exec.max.dynamic.partitions | +1000 | 一个动态分区创建语句可以创建的最大动态分区个数。如果超过这个值则会抛出一个致命错误信息 |
hive.exec.max.created.files | 100000 | 全局可以创建的最大文件个数。有一个Hadoop计数器会跟踪记录创建了多少个文件,如果超过这个值则会抛出一个致命错误信息 |
4、大表 join 小表时,将小表放到内存中缓存(默认情况下这个属性的值是false)
set hive.auto.convert.join=true
5、设定放入内存的表的大小上限的
set hive.mapjoin.smalltable.filesize=25000000
6、开启桶的关联(join)
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat
set hive.optimize.buchetmapjoin=true
set hive.optimize.bucketmapjoin.sortedmerge=true
7、向分桶表中填充数据
set hive.enforce.bucketing=true
8、调整mapper和reducer个数
set hive.exec.reducers.bytes.per.reducer=1G
set mapred.reduce.tasks=96
9、group by数据倾斜
set hive.map.aggr=true
set hive.groupby.skewindata=true;