set datasync.input.table.encrypt=true;
- 用于在ks_db_origin_encrypt(这种为加密表)的解密
set hive.fetch.task.conversion=none;
- 启动MapReduce Job需要消耗系统开销,有时候简单的查询(没有子查询,没有聚合函数,没有join,没有distinct,没有lateral view)时不需要启动mr的; 例如:select * from table [limit n]; 这种情况不用启动mr,直接fetch即可;
- 有3个值:none, minimal, more;
<property> <name>hive.fetch.task.conversion</name> <value>more</value> <description> Expects one of [none, minimal, more]. Some select queries can be converted to single FETCH task minimizing latency. Currently the query should be single sourced not having any subquery and should not have any aggregations or distincts (which incurs RS), lateral views and joins. 0. none : disable hive.fetch.task.conversion 1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only 2. more : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns) </description> </property>
set hive.auto.convert.join = true;
//是否自动转换为mapjoin
set hive.mapjoin.smalltable.filesize=25000000;//小表的最大文件大小,默认为25000000,即25M
hive.auto.convert.join.noconditionaltask//是否将多个mapjoin合并为一个
hive.auto.convert.join.noconditionaltask.size//多个mapjoin转换为1个时,所有小表的文件大小总和的最大值
- Hive内置提供的优化机制之一就包括MapJoin。 在Hive v0.7之前,需要给出MapJoin的指示,Hive才会提供MapJoin的优化。Hive v0.7之后的版本已经不需要给出MapJoin的指示就进行优化。
- hive自动转换为mapjoin时,需要判断另外一个表的大小,需要配合hive.mapjoin.smalltable.filesize=25000000(默认值是25Mb)使用;
- 例如,一个大表顺序关联3个小表a(10M), b(8M),c(12M),如果hive.auto.convert.join.noconditionaltask.size的值:
- 小于18M,则无法合并mapjoin,必须执行3个mapjoin;
- 大于18M小于30M,则可以合并a和b表的mapjoin,所以只需要执行2个mapjoin;
- 大于30M,则可以将3个mapjoin都合并为1个。
set hive.exec.parallel = true;
// 开启任务并行执行
set hive.exec.parallel.thread.number = 16;同一个sql允许并行任务的最大线程数
- 有时候会有多个sql的union操作, 如果不加上面的参数,他会按顺序执行,但是如果union的多个sql之间没有关系,那么是可以并行执行的。
set hive.groupby.skewindata = true;
- 控制生成两个MR Job,第一个MR Job Map的输出结果随机分配到reduce中减少某些key值条数过多某些key条数过小造成的数据倾斜问题。
- 在第一个 MapReduce 中,map 的输出结果集合会随机分布到 reduce 中, 每个reduce 做部分聚合操作,并输出结果。这样处理的结果是,相同的 Group By Key 有可能分发到不同的reduce中,从而达到负载均衡的目的;
- 第二个 MapReduce 任务再根据预处理的数据结果按照 Group By Key 分布到 reduce 中(这个过程可以保证相同的 Group By Key 分布到同一个 reduce 中),最后完成最终的聚合操作。
- set hive.mapred.mode=nonstrict;
- 使用严格模式可以限制3种类型的查询:
1.对于分区表,不加分区字段进行查询,不能执行。
2.对于order by语句必须使用limit语句。
3.限制笛卡尔积的查询(join的时候不适用on,而使用where的)
- set hive.specify.execution.engine.enforce.name=spark;
// 设置使用spark
- set mapreduce.map.java.opts=-Xmx4915m;
- set mapreduce.map.memory.mb=6144;
- set mapreduce.reduce.java.opts=-Xmx4912m;
- set mapreduce.reduce.memory.mb=6144;
- set mapreduce.task.timeout= 1200000;
- set spark.cores.max=10;
- set spark.driver.memory=20G;
- set spark.executor.cores=3;
- set spark.executor.memory=20G;
- set spark.network.timeout=500s;
- set spark.executor.memoryOverhead=3G;