Hive sql在执行时如何优化?

1、使用mr引擎时的优化方案:
Map端:

① 设置环形缓冲区的大小:mapreduce.task.io.sort.mb   默认100M,可以调高
② 设置环形缓冲区的阈值:mapreduce.map.sort.spll.percent   默认80%,可以调高到90%
③ 增加Merge合并的次数:mapreduce.task.io.sort.factor  默认10 可提高
④ 增加MapTask内存大小:mapreduce.map.memory.mb   默认1G    --> 处理128M的数据,设置1G
⑤ 增加MapTask堆内存的大小:mapreduce.map.java.opts=-Xmx13106M  --设置为13G
⑥ 增加MapTask中的核数:mapreduce.map.cpu.vcores     默认MapTask的cpu核数为1
⑦ 设置重试次数:mapreduce.map.maxattempts    默认重试次数为4
⑧ 合并小文件:set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
⑨ 设置map端聚合
set hive.map.aggr=true;   相当于map端执行combiner

Reduce端

① mapreduce.reduce.shuffle.parallelcopies   拉取Map端数据的并行数  默认5
② mapreduce.reduce.shuffle.input.buffer.percent    默认0.7  提高0.8
③ mapreduce.reduce.memory.mb   默认1G
④ mapreduce.reduce.cpu.vcores   默认cpu为1个
⑤ mapreduce.task.timeout  默认10min    
⑥ mapreduce.reduce.slowstart.completedmaps   默认0.05  当MapTask完成的比例到达该值后才会向ReduceTask申请资源
set hive.exec.parallel=true  开启任务并行执行
set hive.exec.parallel.thread.number=16; //同一个sql允许最大并行度,默认为8
--对于分区表:分区表不使用分区过滤,除非where语句中含有分区字段过滤条件来限制范围,否则不允许执行
set hive.strict.checks.no.partition.filter=true;
--使用了order by语句的查询,要求必须使用limit语句。
hive.strict.checks.orderby.no.limit=true

2、使用spark 引擎时的优化

--设置使用spark引擎
set hive.execution.engine=spark;
--设置spark的核数
set spark.executor.cores=4
--设置shuffle的分区数
set spark.sql.shuffle.partitions = 1500  --设置shuffle的并行度
set spark.executor.memory=10g; --设置堆内内存
set spark.yarn.executor.memoryOverhead=2g;  --设置堆外内存
--设置driver端核数
set spark.driver.cores=2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值