HiveSQL运行优化 | Hive参数类优化,SQL优化类【精选内容】

一、Hive参数类优化

控制MapReduce的map数 ---建议设置

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

但是当文件行数过多,上面合并设置反而会导致并发减小,导致速率变慢,也可以进行合并,合并后再进行设置合并文件的大小

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

set mapreduce.input.fileinputformat.split.minsize=256000000;

set mapreduce.input.fileinputformat.split.maxsize=256000000;

set mapreduce.input.fileinputformat.split.minsize.per.node=256000000;

set mapreduce.input.fileinputformat.split.minsize.per.rack=256000000;

以上表示合并小文件,大于文件块大小256M的按照256来分割,把那些小于256M的(包括小文件和分割大文件剩下的)进程合并

控制MapRduce的reduce数 ---建议设置

一种方法:

 set mapred.reduce.tasks=10;

另外一种:

set hive.exec.reducers.max=999;

set hive.exec.reducers.bytes.per.reducer=512000000;

建议第二种.

资源类---建议设置

setmapreduce.map.memory.mb=4096;

set mapreduce.reduce.memory.mb=4096;

set mapreduce.map.cpu.vcores=1;

set mapreduce.reduce.cpu.vcores=1;

set yarn.app.mapreduce.am.resource.cpu-vcores=1;

set mapreduce.map.java.opts=-Xms3024m -Xmx024m;

set mapreduce.reduce.java.opts=-Xms024m -Xmx3024m;

set mapreduce.task.io.sort.mb=200; #mr程序进行合并排序操作的时候或者mapper写数据的时候,内存大小

set mapreduce.task.io.sort.factor=500;  #mr程序进行合并排序的时候,打开的文件数量

set mapreduce.job.reduce.slowstart.completedmaps=0.60;

set mapreduce.reduce.shuffle.parallelcopies=500;  #mr程序reducer copy数据的线程数

set mapreduce.reduce.shuffle.input.buffer.percen=0.7;

mr job 并行执行,JVM重用 ---可选

set hive.exec.parallel=true;

set hive.exec.parallel.thread.number=8

set mapreduce.job.jvm.numtasks=20;

压缩 ---可选

# 启用结果输出压缩(接口表,结果表不用,中间表考虑使用)

set hive.exec.compress.output=true;

set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

set mapred.output.compression.type=BLOCK;

# 启用中间数据压缩

set hive.exec.compress.intermediate=true;

set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;

set hive.intermediate.compression.type=BLOCK;

数据倾斜---可选,未必能解决所有

set hive.optimize.skewjoin=true;   

set hive.skewjoin.key=10000000;

set hive.optimize.skewjoin.compiletime=true;  #优化数据倾斜

set hive.groupby.skewindata=true;  #进行负载均衡减少数据倾斜  

启动本地模式执行MapReduce---可选,一般在测试阶段使用,会增加hs2服务压力

set hive.exec.mode.local.auto=true;

set hive.exec.mode.local.auto.inputbytes.max=128MB; #不启动本地模式的最大输入文件大小

set hive.exec.mode.local.auto.tasks.max=4;  #不启用本地模式的task最大个数

set hive.exec.mode.local.auto.input.files.max=4; #不启用本地模式的文件最大个数

启用向量化 ---可选

从单行处理数据改为批量处理方式,具体来说是一次处理1024行而不是原来的每次只处理一行

set hive.vectorized.execution.enabled=true;

set hive.vectorized.execution.reduce.enabled=true;

set hive.vectorized.execution.reduce.groupby.enabled=true;

选择计算引擎

set hive.execution.engine=tez;

set mapreduce.framework.name=yarn-tez;  

二、SQL优化类

LEFT SEMI JOIN 是 IN/EXISTS 子查询的一种更高效的实现

select *

from wedw_dw.t_user t1

where t1.user_id in (select user_id from wedw_dw.t_order) ;

变更为

select *

from wedw_dw.t_user t1

left semi join wedw_dw.t_order t2

on t1.user_id = t2.user_id;

采用parquet存储格式

create table test_par_snappy stored as parquet tblproperties ("parquet.compression"="SNAPPY") as

select * from xx;

三、平台优化类

1、批量申请资源

如何控制一个nodemanager里Container的数量呢?

yarn.scheduler.fair.assignmultiple

true

是否允许NodeManager一次分配多个容器

yarn.scheduler.fair.max.assign

如果允许一次分配多个,一次最多可分配多少个,这里按照一个最小分配

yarn.scheduler.minimum-allocation-mb

4gb来计算总共内存120/4=30给20即可

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MIDSUMMER_yy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值