爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      Hive on Spark调优

      首页 知识中心 其他 文章详情页

      Hive on Spark调优

      2023-06-14 09:13:14 阅读次数:443

      Executor,Hive,spark

      之前在​​Hive on Spark​​跑​​TPCx-BB​​测试时,100g的数据量要跑十几个小时,一看CPU和内存的监控,发现 ​​POWER_TEST​​阶段(依次执行30个查询)CPU只用了百分之十几,也就是没有把整个集群的性能利用起来,导致跑得很慢。因此,如何调整参数,使整个集群发挥最大性能显得尤为重要。

      Spark作业运行原理

      Hive on Spark调优spark-base-mech.jpg

      详细原理见上图。我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程本身会根据我们设置的参数,占有一定数量的内存和CPU core。而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Standalone集群,也可以是其他的资源管理集群,美团•大众点评使用的是YARN作为资源管理集群)申请运行Spark作业需要使用的资源,这里的资源指的就是Executor进程。YARN集群管理器会根据我们为Spark作业设置的资源参数,在各个工作节点上,启动一定数量的Executor进程,每个Executor进程都占有一定数量的内存和CPU core。

      Spark是根据shuffle类算子来进行stage的划分。如果我们的代码中执行了某个shuffle类算子(比如reduceByKey、join等),那么就会在该算子处,划分出一个stage界限来。可以大致理解为,shuffle算子执行之前的代码会被划分为一个stage,shuffle算子执行以及之后的代码会被划分为下一个stage。因此一个stage刚开始执行的时候,它的每个task可能都会从上一个stage的task所在的节点,去通过网络传输拉取需要自己处理的所有key,然后对拉取到的所有相同的key使用我们自己编写的算子函数执行聚合操作(比如reduceByKey()算子接收的函数)。这个过程就是shuffle。

      task的执行速度是跟每个Executor进程的CPU core数量有直接关系的。一个CPU core同一时间只能执行一个线程。而每个Executor进程上分配到的多个task,都是以每个task一条线程的方式,多线程并发运行的。如果CPU core数量比较充足,而且分配到的task数量比较合理,那么通常来说,可以比较快速和高效地执行完这些task线程。

      以上就是Spark作业的基本运行原理的说明,大家可以结合上图来理解。理解作业基本原理,是我们进行资源参数调优的基本前提。

      参数调优

      了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了。所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使用的效率,从而提升Spark作业的执行性能。以下参数就是Spark中主要的资源参数,每个参数都对应着作业运行原理中的某个部分。

      num-executors/spark.executor.instances

      • 参数说明:该参数用于设置Spark作业总共要用多少个Executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在集群的各个工作节点上,启动相应数量的Executor进程。这个参数非常之重要,如果不设置的话,默认只会给你启动少量的Executor进程,此时你的Spark作业的运行速度是非常慢的。
      • 参数调优建议:每个Spark作业的运行一般设置50~100个左右的Executor进程比较合适,设置太少或太多的Executor进程都不好。设置的太少,无法充分利用集群资源;设置的太多的话,大部分队列可能无法给予充分的资源。

      executor-memory/spark.executor.memory

      • 参数说明:该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关联。
      • 参数调优建议:每个Executor进程的内存设置4G~8G较为合适。但是这只是一个参考值,具体的设置还是得根据不同部门的资源队列来定。可以看看自己团队的资源队列的最大内存限制是多少,num-executors乘以executor-memory,是不能超过队列的最大内存量的。此外,如果你是跟团队里其他人共享这个资源队列,那么申请的内存量最好不要超过资源队列最大总内存的1/3~1/2,避免你自己的Spark作业占用了队列所有的资源,导致别的同学的作业无法运行。

      executor-cores/spark.executor.cores

      • 参数说明:该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。
      • 参数调优建议:Executor的CPU core数量设置为2~4个较为合适。同样得根据不同部门的资源队列来定,可以看看自己的资源队列的最大CPU core限制是多少,再依据设置的Executor数量,来决定每个Executor进程可以分配到几个CPU core。同样建议,如果是跟他人共享这个队列,那么num-executors * executor-cores不要超过队列总CPU core的1/3~1/2左右比较合适,也是避免影响其他同学的作业运行。

      driver-memory

      • 参数调优建议:Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。

      spark.default.parallelism

      • 参数说明:该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。
      • 参数调优建议:Spark作业的默认task数量为500~1000个较为合适。很多同学常犯的一个错误就是不去设置这个参数,那么此时就会导致Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。通常来说,Spark默认设置的数量是偏少的(比如就几十个task),如果task数量偏少的话,就会导致你前面设置好的Executor的参数都前功尽弃。试想一下,无论你的Executor进程有多少个,内存和CPU有多大,但是task只有1个或者10个,那么90%的Executor进程可能根本就没有task执行,也就是白白浪费了资源!因此Spark官网建议的设置原则是,设置该参数为num-executors * executor-cores的2~3倍较为合适,比如Executor的总CPU core数量为300个,那么设置1000个task是可以的,此时可以充分地利用Spark集群的资源。

      spark.storage.memoryFraction

      • 参数说明:该参数用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6。也就是说,默认Executor 60%的内存,可以用来保存持久化的RDD数据。根据你选择的不同的持久化策略,如果内存不够时,可能数据就不会持久化,或者数据会写入磁盘。
      • 参数调优建议:如果Spark作业中,有较多的RDD持久化操作,该参数的值可以适当提高一些,保证持久化的数据能够容纳在内存中。避免内存不够缓存所有的数据,导致数据只能写入磁盘中,降低了性能。但是如果Spark作业中的shuffle类操作比较多,而持久化操作比较少,那么这个参数的值适当降低一些比较合适。此外,如果发现作业由于频繁的gc导致运行缓慢(通过spark web ui可以观察到作业的gc耗时),意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。

      spark.shuffle.memoryFraction

      • 参数说明:该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2。也就是说,Executor默认只有20%的内存用来进行该操作。shuffle操作在进行聚合时,如果发现使用的内存超出了这个20%的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能。
      • 参数调优建议:如果Spark作业中的RDD持久化操作较少,shuffle操作较多时,建议降低持久化操作的内存占比,提高shuffle操作的内存占比比例,避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上,降低了性能。此外,如果发现作业由于频繁的gc导致运行缓慢,意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。

      调优过程

      数据量:10g

      Hive on Spark调优屏幕快照 2016-09-29 上午10.39.00.png

      可以看出:

      • 随着每个executor占用的CPU core数增加,q04查询的时间显著下降,q03也下降,但幅度没那么大。

      本次调优只设置了​​spark.executor.memory​​和​​spark.executor.cores​​两个参数,没有涉及到​​spark.executor.instances​​参数,而默认的​​spark.executor.instances​​为2,也就是每个作业只用到2个executor,因此还没将性能发挥到最佳。

      接下来采用100g的数据量,并且增加​​spark.executor.instances​​参数的设置。

      数据量:100g

      Hive on Spark调优屏幕快照 2016-09-29 上午10.51.55.png

      可以看出:

      • 调优前后查询时间有了很大的飞跃;
      • 增加spark.executor.instances设置项指定每个作业占用的executor个数后性能又有很大提升(通过监控我们发现此时CPU利用率平均有好几十,甚至可以高到百分之九十几);
      • 至此,我们终于将整个集群性能充分发挥出来,达到目的。

      最后一列配置项是根据美团技术团队博客的建议设置的,可以看出性能相比我们之前自己的设置还是有一定提升的,至少该博客里建议的设置是比较通用的,因此之后我们都采取最后一列的设置来跑​​TPCx-BB​​测试。

      最后来张大图展示调优前和调优后跑100g数据的对比:

      Hive on Spark调优调优前后100g.jpg.png

      可以看出:

      • 绝大多数查询调优前后查询时间有了极大的飞跃;
      • 但是像q01/q04/q14…这几个查询,可能因为查询涉及到的表比较小,调优前时间就很短,因此调优后也看不出很多差别,如果想看到大的差别,可能需要提高数据量,比如1T,3T;
      • q10和q18调优前后时间都较长,而且调优后性能没有提升,需要再深入探索下是什么原因。

      最后,用调优后的集群,分别跑10g、30g、100g的数据,结果如下:

      Hive on Spark调优10g、30g、100g.jpg.png

      可以看出:

      • 随着数据量增大,很多查询时间并没有明显增加,可能是因为集群性能太强,而且数据量还不够大,可以增大数据量继续观察
      • 对于q10、q18和q30,随着数据量增大,时间明显增大,需再深入分析
        hive on spark参数配置样例
        set hive.execution.engine=spark;
        set spark.executor.memory=4g;
        set spark.executor.cores=2;
        set spark.executor.instances=40;
        set spark.serializer=org.apache.spark.serializer.KryoSerializer;
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/wang/4373223,作者:江南独孤客,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:在前后端分离中由于跨域导致的springmvc中的controller类中的session值不一致或者为null的情况分析处理

      下一篇:SAP Kyma上kyma-system命名空间下的pod列表

      相关文章

      2025-04-18 07:10:53

      Hive-DML详解(超详细)

      在Hive中,可以使用INSERT INTO语句将数据插入到表中。

      2025-04-18 07:10:53
      Hive , table , 分区 , 删除 , 插入 , 数据 , 查询
      2025-04-18 07:10:53

      Hive-DDL详解(超详细)

      创建数据库是在Hive中组织和管理表的第一步。

      2025-04-18 07:10:53
      DDL , Hive , 创建 , 删除 , 指定 , 数据库
      2025-04-18 07:10:44

      Hive-数据模型详解(超详细)

      Hive是基于Hadoop的数据仓库工具,它提供了类似于SQL的查询语言(称为HQL)来处理大规模结构化和半结构化数据。在使用Hive之前,我们需要了解其基本的数据模型。

      2025-04-18 07:10:44
      Hive , 分区 , 创建 , 数据 , 数据库 , 查询
      2025-04-18 07:10:44

      Hive-基础介绍

      Hive是基于Hadoop的数据仓库基础设施,它提供了一种类似于SQL的查询语言称为HiveQL(Hive Query Language)。

      2025-04-18 07:10:44
      Hive , table , 函数 , 数据 , 示例 , 表中
      2025-04-18 07:10:44

      Hive-分区与分桶详解(超详细)

      在Hive中,分区是将表的数据按照某个列的值进行划分和存储的一种方式。通过分区,可以将数据按照特定的维度进行组织,提高查询效率和数据管理的灵活性。

      2025-04-18 07:10:44
      Hive , 分区 , 分区表 , 数据 , 查询 , 示例
      2025-04-14 09:24:23

      Spark Streaming中checkpoint内幕实现彻底解密(源代码提问:checkpoint源代码修改,适用场景:spark的版本升级,数据恢复。。)

      Spark Streaming中checkpoint内幕实现彻底解密(源代码提问:checkpoint源代码修改,适用场景:spark的版本升级,数据恢复。。)

      2025-04-14 09:24:23
      spark , 容错 , 源代码
      2025-03-31 08:49:38

      scala面向接口编程彻底实战和spark源码鉴赏

      scala面向接口编程彻底实战和spark源码鉴赏

      2025-03-31 08:49:38
      scala , spark , 接口 , 源码
      2025-03-11 09:34:07

      【Hive 运维】JDBC使用Hive UDF:Hive UDF打通hiveserver2

      【Hive 运维】JDBC使用Hive UDF:Hive UDF打通hiveserver2

      2025-03-11 09:34:07
      hive , Hive , jar
      2025-03-11 09:34:07

      【Hive】学习路线:架构、运维、Hsql实战、源码分析

      【Hive】学习路线:架构、运维、Hsql实战、源码分析

      2025-03-11 09:34:07
      hive , Hive , 存储 , 数据 , 源码
      2025-03-05 09:22:35

      漫谈大数据 - Spark SQL详解,参数调优

      spark SQL是spark的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。

      2025-03-05 09:22:35
      DataFrame , DataSet , Hive , Spark , SQL , 优化
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5234179

      查看更多

      最新文章

      Hive内部函数简介及查询语法

      2024-10-22 07:48:01

      Sqoop从Hive导出表到Mysql报错处理

      2024-09-25 10:14:48

      apache kyuubi + dremio 集成试用

      2024-09-25 10:13:57

      安装pyspark kernel

      2024-06-13 08:12:14

      Executor 拦截器高级教程 - QueryInterceptor 规范

      2024-03-18 08:30:36

      如何将ORC格式且使用了DATE类型的Hive表转为Parquet表

      2023-08-09 07:17:26

      查看更多

      热门文章

      将SQL文件导入Hive

      2023-04-21 03:11:35

      原因: java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/FlatMapFunction

      2023-04-13 09:31:18

      Spark Core:Scala单词计数

      2023-06-20 09:13:20

      hive on spark参数调整

      2023-06-14 09:12:57

      hive 小文件过多解决方案

      2023-07-17 06:50:53

      Hive系列之开窗函数

      2023-06-25 07:17:27

      查看更多

      热门标签

      linux java python javascript 数组 前端 docker Linux vue 函数 shell git 节点 容器 示例
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      apache kyuubi + dremio 集成试用

      Hive总结篇及Hive的优化

      Hive系列之开窗函数

      将SQL文件导入Hive

      Executor 拦截器高级教程 - QueryInterceptor 规范

      Sqoop从Hive导出表到Mysql报错处理

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号