Hive并行参数

场景

之前有处理过因为文件大小导致并行问题产生的数据倾斜问题,但并不是所有场景都适用,这篇文章讲讲个人认为的并行参数心得

-- 参数可以控制reducer,是一种倾斜的调测手段
set hive.exec.reducers.bytes.per.reducer;  
-- 默认是64MB

看到很多文献和博客都表示数据倾斜的时候 可以调整并行, 但是并不是适用所有场景

set hive.exec.reducers.bytes.per.reducer=134217728;  --reduce大小,我们集群默认64
set hive.exec.reducers.max --我们集群默认设置是1099

甚至设置失败会直接报错

-- 设置太小的个数不合适,会直接报错
[30041] Errorwhile processing statement: FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session fa2bdba3-a761-409f-b3f8-dd1e83de1a59_0: java.util.concurrent.TimeoutException: Client 'fa2bdba3-a761-409f-b3f8-dd1e83de1a59_0' timed out waiting for connection from the Remote Spark Driver

参数

网上茫茫多的数据倾斜并行相关参数(仅讨论对资源修改)其实可以进行一下总结

  • 容器个数
--通过调整
spark.executor.instances
--参数来设置容器的数量。增加容器个数可以提高并行度,允许同时执行更多的任务。
  • 容器内核心数
--通过调整
spark.executor.cores
--参数来设置每个容器内可用的核心数。增加核心数可以提高每个容器的并行度,使其能够更快地完成计算任务。
  • Hive并行设置
--通过设置
set hive.exec.parallel=true
--开启Hive的并行执行功能,然后通过调整
set hive.exec.parallel.thread.number
--参数来设置并行执行的线程数。增加线程数可以提高Hive作业的并行度。
  • Reduce调整
--通过调整
set hive.exec.reducers.bytes.per.reducer
set hive.exec.reducers.max
--参数来调整Reduce任务的个数。

--增加
hive.exec.reducers.bytes.per.reducer
--参数的值可以减少每个Reducer处理的数据量,从而增加Reducer的并行度。通过调整
hive.exec.reducers.max
--参数的值可以限制Reduce任务的最大个数。

个人心得

  1. 优化的整体思路
    在执行顺序上,一般先根据需求创建对应个数的容器(通过调整spark.executor.instances参数),
  2. 然后再分配容器内核心数(通过调整spark.executor.cores参数)。
  3. 在Hive作业执行时,会根据设置的并行线程数(通过调整set hive.exec.parallel.thread.number参数)来决定每个Stage内并行执行的任务数量。
  4. 可以根据需要调整Reduce任务的个数(通过调整set hive.exec.reducers.bytes.per.reducerset hive.exec.reducers.max参数)来控制输出结果的并行度
  5. 作业的日志信息:查看作业的日志信息,观察任务的运行时间、资源使用情况和日志中是否有异常情况。
  6. 数据倾斜情况:观察作业的输入数据是否存在倾斜,是否有某些键值对的数据量远远大于其他键值对,导致任务执行时间不均衡。
  7. Shuffle阶段的性能瓶颈:观察作业的执行计划中是否存在Shuffle阶段,查看Shuffle的输入输出数据量、网络传输速度和磁盘IO等指标,判断是否存在Shuffle阶段的性能瓶颈。
  8. 资源利用情况:观察作业执行过程中CPU、内存、磁盘和网络等资源的利用情况,判断是否存在资源瓶颈。综合以上信息,可以根据实际情况判断作业是否需要在容器级别扩容、在Stage内增加并行度或者增加Reduce并行度,以优化作业的性能和资源利用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive并行执行原理涉及到Hive的优化和作业调度机制。在Hive中,可以通过设置参数来启用并行执行。其中,设置hive.optimize.skewjoin为true可以启用倾斜数据的并行处理,而设置hive.skewjoin.key为skew_key_threshold(默认值为100000)可以指定倾斜数据的阈值。\[1\] Hive的核心是Driver,而Driver的核心是SemanticAnalyzer。Hive实际上是一个SQL到Hadoop作业的编译器。在Hadoop上,最常见的作业是MapReduce,但Hive也支持其他作业引擎,如Tez和SparkHive并行执行原理与MapReduce类似,但在执行优化上有所区别。\[3\] 总的来说,Hive通过将SQL语句转换为Hadoop作业来实现并行执行。通过优化和作业调度机制,Hive可以提高查询的执行效率和并行处理能力。\[2\] #### 引用[.reference_title] - *1* *3* [hive实现原理介绍](https://blog.csdn.net/breakout_alex/article/details/106938809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Hive体系结构(二)Hive的执行原理、与关系型数据库的比较](https://blog.csdn.net/Lnho2015/article/details/51417880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值