1.运行环境
内存
设置Mapper内存:set mapreduce.map.memory.mb = <4096>;
设置Reudcer内存:set mapreduce.reduce.memory.mb = <8192>;
小文件
设置map_only任务合并小文件: set hive.merge.mapfiles = true;
设置mapreduce任务合并小文件:set hive.merge.mapredfiles = true;
设置合并后文件大小:set hive.merge.size.per.task = 64000000;
设置输入合并小文件格式:set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
文件处理逻辑复杂
设置每个mapper处理文件大小:set mapred.max.split.size=64000000;
动态分区
开启动态分区:set hive.exec.dynamic.partition=true;
开启动态分区非严格模式:set hive.exec.dynamic.partition.mode=nonstrict;
设置动态分区最大分区数:set hive.exec.max.dynamic.partitions=2000;
JVM重用
适用于mapper数量过于多的场景:set mapred.job.reuse.jvm.num.tasks=<number>;
并行执行
开启并行执行:set hive.exec.parallel=true;
设置并行执行度:set hive.exec.parallel.thread.number=<number>;
数据倾斜
开启在mapper端提前合并(group by配合使用效果更加):set hive.map.aggr=true
通常数据倾斜后优先优化sql,从业务场景触发,靠参数通常是不能解决问题
2.表相关命令
添加字段
如果不是分区表:
alter table <表名> add columns (字段名 字段类型 comment ’字段注释‘);
如果是分区表:
alter table <表名> add columns (字段名 字段类型 comment ’字段注释‘ ) cascade;
修改表注释
alter table <表名> set tblproperties('comment' = '新注释');
修改表名
alter table <表名> rename to <新表名>;
修改字段名
alter table <表名> change column <原字段名> <新字段名> <新字段类型> comment '注释‘;