在mapper端执行join:
set hive.auto.convert.join=true;
启用本地模式:
set hive.exec.mode.local.auto=true;
启用并行执行:
set hive.exec.parallel=true;
启用严格模式/非严格模式:
set hive.mapred.mode=strict;
set hive.mapred.mode=nonstrict;
严格模式可以禁止以下三种查询:
1、对于分区表的查询必须限定where条件;
2、order by语句的查询必须使用limit;
3、限制笛卡尔积的查询。
调整每个reducer处理的数据文件大小:
set hive.exec.reducers.bytes.per.reducer=750000000;//单位为B
调整reducer的个数:
set mapred.reduce.tasks=4;
设置允许启用的最大reducer个数:
set hive.exec.reducers.max=8;
取消动态分区的严格模式(严格模式下,必须至少保证一个分区是静态的):
set hive.exec.dynamic.partition.mode=nonstrict;
解决数据倾斜:
set hive.map.aggr=true;//在mapper端聚合
set hive.groupby.skewindata=true;//相同的key也能随机分发给不同的reducer
set hive.optimize.skewjoin=true;//解决join类倾斜
待补充。