sql Hive优化配置项(含建表属性)总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql Hive优化配置项(含建表属性)总结相关的知识,希望对你有一定的参考价值。
-- 实战任务配置
-- 注: hadoop相关的设置用1024, hive相关的用1000
-- 内存限制
set mapreduce.job.running.map.limit=500;
set mapreduce.job.running.reduce.limit=400;
set mapreduce.map.memory.mb=2048;
set mapreduce.reduce.memory.mb=4096;
-- join优化
set hive.auto.convert.join=true; -- 开启mapjoin自动转换
set hive.mapjoin.smalltable.filesize=50000000; -- 小表判定规则(50mb, 默认25mb)
-- n路join时, 如果n-1张小表总大小小于300mb, 直接转换成一个mapjoin
set hive.auto.convert.join.noconditionaltask.size=300000000;
-- 合并文件
set mapred.max.split.size=134217728; -- 输入合并(map输入最大为128mb)
set mapred.min.split.size.per.node=52428800; -- 一个节点上split的至少的大小(50mb, 默认为1B)
set mapred.min.split.size.per.rack=52428800; -- 一个交换机下split的至少的大小(50mb, 默认为1B)
set hive.merge.smallfiles.avgsize=128000000; -- 小文件判定标准(128mb, block size一半即可, 默认16mb)
set hive.merge.mapfiles=true; -- map端输出合并
set hive.merge.mapredfiles=true; -- reduce端输出合并
set hive.merge.size.per.task = 256000000 -- 合并文件的大小, 能够保证block size充分利用
set hive.merge.orcfile.stripe.level=false; -- orc小文件合并
-- 压缩
set hive.exec.compress.intermediate=true; -- (可选, 大表适用)map端输出压缩
set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec
set mapred.output.compress=true; -- reduce端结果压缩
-- 动态分区支持
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
-- 其它优化
set mapreduce.job.reduce.slowstart.completedmaps=1.0;
set hive.groupby.skewindata=true; -- group by倾斜处理
-- 资源隔离处理
set mapreduce.map.cpu.vcores=2;
set mapreduce.map.memory.mb=6144;
set mapreduce.map.java.opts=-Xmx4608M;
set mapreduce.reduce.cpu.vcores=4;
set mapreduce.reduce.memory.mb=8192;
set mapreduce.reduce.java.opts=-Xmx6144M;
set yarn.app.mapreduce.am.resource.cpu-vcores=3;
set yarn.app.mapreduce.am.resource.mb=8192;
set yarn.app.mapreduce.am.command-opts=-Xmx6144m;
set mapreduce.task.io.sort.mb=1024;
-- (可选, 重要或紧急任务适用)并行执行, 高优先级指定
set hive.exec.parallel = true;
set hive.exec.parallel.thread.number=16; -- 同一个sql允许最大并行度,默认为8。
SET mapreduce.job.priority=HIGH; -- 所有可用枚举值为:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW
-- [废弃]Lzo压缩专用(由于orc暂不支持lzo压缩输出, 使用默认的zlib即可, 无需设置)
set mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
set io.compression.codecs=com.hadoop.compression.lzo.LzopCodec;
参考链接: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC
![ORC建表属性配置](http://image.congyh.com/18-6-7/83867902.jpg)
例子
```sql
CREATE TABLE lxw1234_orc2 stored AS ORC
TBLPROPERTIES
('orc.create.index'='true', -- 建立Row Group Index, 适用于范围过滤
"orc.bloom.filter.columns"="pcid[, col2]", -- 指定需要创建布隆过滤器的列, 适用于等值过滤
)
AS
SELECT CAST(siteid AS INT) AS id,
pcid
FROM lxw1234_text
```
-- 配置项介绍的官网链接: https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties
-- 配置项使用的官网链接: https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration#AdminManualConfiguration-ConfiguringHive
-- 所有的配置属性都在HiveConf.java中管理, 可以在代码中看到所有的配置所选项.
-- 设置Hive MR任务并行运行
set hive.exec.parallel = true;
set hive.exec.parallel.thread.number=16; -- 同一个sql允许最大并行度,默认为8。
SET mapreduce.job.priority=HIGH; -- 所有可用枚举值为:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW
-- 如果使用hadoop来调整优先级的话:
hadoop job -set-priority job_id VERY_HIGH
set hive.groupby.skewindata=true; -- 解决group by数据倾斜的问题, 解决方法是第一轮reduce先不按照key进行分发, 而是随机负载均衡进行分发, 然后起一轮额外的reduce进行常规的汇总.
-- 开启动态分区, 并使用非strict模式, 允许完全的动态分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
-- 指定job运行队列
set mapreduce.job.queuename=队列名
-- 启动本地模式, 加速执行, 即不需要提交到集群执行的直接local mr
set hive.exec.mode.local.auto=true
-- limit抽样优化(缺点是有些数据可能永远访问不到)
set hive.limit.optimize.enable=true; -- 将针对查询对元数据进行抽样
set hive.limit.row.max.size=100000; -- 最多从10w行数据中抽样
set hive.limit.optimize.limit.file=10; -- 最多从10个文件中进行抽样
-- jvm调优
set mapred.job.reuse.jvm.num.tasks=10; -- 默认是1, 修改成-1则不受限制, 重用是任务顺序执行, 不用重新启动jvm
set mapreduce.map.java.opts=-Xmx2600M; -- jvm内存最大值上调为2600m, 默认为1536M
-- 实战任务配置, 无注释版
set mapreduce.job.running.map.limit=500;
set mapreduce.job.running.reduce.limit=400;
set mapreduce.map.memory.mb=2048;
set mapreduce.reduce.memory.mb=4096;
set hive.auto.convert.join=true;
set hive.mapjoin.smalltable.filesize=50000000;
set hive.auto.convert.join.noconditionaltask.size=300000000;
set hive.merge.smallfiles.avgsize=128000000;
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task = 256000000;
set hive.merge.orcfile.stripe.level=false;
set mapred.output.compress=true;
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set mapreduce.job.reduce.slowstart.completedmaps=1.0;
set hive.groupby.skewindata=true;
-- 可选
set hive.exec.parallel = true;
set hive.exec.parallel.thread.number=16; -- 同一个sql允许最大并行度,默认为8。
SET mapreduce.job.priority=HIGH; -- 所有可用枚举值为:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW
以上是关于sql Hive优化配置项(含建表属性)总结的主要内容,如果未能解决你的问题,请参考以下文章