1.hive并行执行
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=8;
**2.增大hive memory--java heep space **
--mr
set mapreduce.map.memory.mb=10240;
set mapreduce.reduce.memory.mb=10240;
--tez
set hive.tez.container.size=20480;
set hive.tez.java.opts=-Xmx16384m;
3.mr读取递归目录设置
hive执行引擎为mr时,默认不支持读取递归目录,如要读取递归目录下的文件,则需要进行如下设置
set mapreduce.input.fileinputformat.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
4.显示当前数据库名称
set hive.cli.print.current.db=true;
--显示列名
set hive.cli.print.header=true;
5.map和reducer个数控制
---MR-map控制个数:
set mapred.max.split.size=128000000 --128M新版本通过此参数控制map个数
set mapred.min.split.size.per.node=8000000;
set mapred.min.split.size.per.rack=8000000;
---设置tez的map大小
set tez.grouping.min-size = 128000000; --最小128M,合并map端小文件
set tez.grouping.max-size = 128000000; --最大128M,可增加处理Map数量
---reducer设置:
set hive.exec.reducers.bytes.per.reducer = 128000000;--设置reducer处理大小
set hive.exec.reducers.max = 999;--设置最大reducer个数
6.设置队列名和作业名
set mapred/tez.job.queue.name=xxx;
set mapred.job.name=xxxx;
7.hive 列选择
---hive中不选择最后一列
set hive.support.quoted.identifiers=none;
SELECT `(inc_day)?+.+` FROM tbl_name limit 1;
8.日志信息中打印出统计信息
set hive.tez.exec.print.summary=true;
9.常用的数据倾斜设置
set hive.groupby.skewindata=true;
set hive.map.aggr = true;
set hive.groupby.mapaggr.checkinterval =100000;
set hive.optimize.skewjoin=true;
set hive.skewjoin.key=100000;
10.hive增加动态分区数量
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=2000;
set hive.exec.max.dynamic.partitions.pernode=2000;
11.更新表的统计信息
ANALYZE TABLE xxxx PARTITION(inc_day='20181031') COMPUTE STATISTICS;
12.mapjoin
亲测map join在大表join小表的时候十分有用,小表的大表由参数hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值,即25M。
Hive0.7之前,需要使用hint提示 /*+ mapjoin(table) */才会执行MapJoin,否则执行Common Join,但在0.7版本之后,默认自动会转换Map Join,由参数hive.auto.convert.join来控制,默认为true.
假设a表为一张大表,b为小表,并且hive.auto.convert.join=true,那么Hive在执行时候会自动转化为MapJoin。
set hive.auto.convert.join=true