HiveQL常用参数
文章目录
一、并行参数
(一)允许不同的job并行执行。当脚本中使用较多个UNION ALL或者不相关联的临时表时,使用并行参数将明显提高执行速度,但同时会占用更多资源。
SET hive.exec.parallel = true;
(二)并行数默认为8,可以根据需要调高。
SET hive.exec.parallel.thread.number = 32;
二、小表数据内存运行参数
(一)自动对比表数据,将小表放内存执行。利用mapjoin的方式,直接在map阶段进行join操作,省去reduce过程,提高性能。
SET hive.auto.convert.join = true;
(二)设置小表的大小(单位是字节)。结合这两个参数,关联维度时,可以把左联结的维表先根据过滤条件做成小数据量的临时表再关联,以此来提高性能。
SET hive.mapjoin.smalltable.filesize = 25000000
三、数据倾斜时负载均衡参数
(一)当脚本运行时长时间停留在reduce=99%,reduce执行缓慢。
SET hive.groupby.skewindata = true;
四、调整内存参数
(一)调整每个Map Task需要的内存量
SET mapreduce.map.memory.mb = 4096;
(二)调整每个Reduce Task需要的内存量
SET mapreduce.reduce.memory.mb = 4096;
(三)调整每个Map Task的JVM最大使用内存
SET mapreduce.map.java.opts = Xmx3276M -Djava.net.preferIPv4stack = true;
(四)调整每个Reduce Task的JVM最大使用内存
SET mapreduce.reduce.java.opts = Xmx3276M -Djava.net.preferIPv4stack = true;
五、调整占用CPU数量参数
(一)调整每个Map Task可用最多CPU Core数量
SET mapreduce.map.cpu.vcores = 4;
六、调整map和reduce的数量参数
(一)合并小文件限制map数
# 一个inputspilt最大含有500M数据
SET mapred.max.split.size = 500000000;
# 一个inputspilt最小含有100M数据
SET mapred.min.split.size = 100000000;
# 一个节点可以处理文件的大小
SET mapred.min.split.size.per.node = 100000000;
# 一个机架可以处理文件的大小
SET mapred.min.split.size.per.rack = 100000000;
# 实现map中的数据合并(默认)
SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
(二)设置reduce数
# 一个reduce处理500M数据
SET hive.exec.reducers.bytes.per.reducer = 500000000;
# 启用5个reduce
SET mapred.reduce.tasks = 5;
七、动态分区参数
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
# 所有节点上最大可以创建多少个动态分区
SET hive.exec.max.dynamic.partitions = 1000;
# 每个节点上最大可以创建多少个动态分区
SET hive.exec.max.dynamic.partitions.pernode = 1000;
# 整个MR job中最大可以创建多少个HDFS文件
SET hive.exec.max.created.files=100000;
八、物化with as
(一)当with as临时表被使用多次时,使用该参数可以将with as临时表物化。比如设置该参数 = 2,则with as临时表被使用两次以上时,with as只会执行一次,以此提高性能。
SET hive.optimize.cte.materialize.threshold = 2;
九、本地模式
查询时不使用Mapreduce,不触发job,比如一些直接查询的操作,如:SELECT * FROM xxx;
SET hive.exec.mode.local.auto = true;
十、显示表头
查询表字段时,显示表名+字段名
SET hive.cli.print.header = true;
十一、大数据集报错Java heap space
SET io.sort.mb
生产中场景,SET io.sort.mb发现默认为512,调整为100后任务跑通。