文章目录

  • Spark-开启动态资源分配
    • 1:为什么要开启动态资源分配
    • 2 如何在cloudera(CDH)平台开启动态资源分配
      • 第⼀步:确认spark-defaults.conf中添加了如下配置:
      • 第⼆步:进⼊yarn的配置⻚⾯,然后搜索yarn-site.xml
      • 第三步:找到yarn-site.xml 的 NodeManager ⾼级配置代码段(安全阀)
      • 第四步:重启yarn
    • 3. 动态资源分配的原理
      • 3.1 Executor⽣命周期

Spark-开启动态资源分配

1:为什么要开启动态资源分配

⽤户提交Spark应⽤到Yarn上时,可以通过spark-submit的num-executors参数显示地指定executor个数,随后, ApplicationMaster会为这些executor申请资源,每个executor作为⼀个Container在Yarn上运⾏。 Spark调度器会把Task按照合适的策略分配到executor上执⾏。所有任务执⾏完后,executor被杀死,应⽤结束。在job运⾏的过程中,⽆论executor是否领取到任务,都会⼀直占有着资源不释放。很显然,这在任务量⼩且显示指定⼤量executor的情况下会很容易造成资源浪费。

2 如何在cloudera(CDH)平台开启动态资源分配

第⼀步:确认spark-defaults.conf中添加了如下配置:

spark.shuffle.service.enabled true //启⽤External shuffle Service服务
spark.shuffle.service.port 7337 //Shuffle Service服务端⼝,必须和yarn-site中的⼀致
spark.dynamicAllocation.enabled true //开启动态资源分配
spark.dynamicAllocation.minExecutors 1 //每个Application最⼩分配的executor数
spark.dynamicAllocation.maxExecutors 30 //每个Application最⼤并发分配的executor数
spark.dynamicAllocation.schedulerBacklogTimeout 1s
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 5s

第⼆步:进⼊yarn的配置⻚⾯,然后搜索yarn-site.xml

第三步:找到yarn-site.xml 的 NodeManager ⾼级配置代码段(安全阀)

然后添加如下内容:

<property><name>yarn.nodemanager.aux-services</name><value>spark_shuffle,mapreduce_shuffle</value>
</property>
<property><name>yarn.nodemanager.aux-services.spark_shuffle.class</name><value>org.apache.spark.network.yarn.YarnShuffleService</value>
</property>

第四步:重启yarn

3. 动态资源分配的原理

3.1 Executor⽣命周期

⾸先,先简单分析下Spark静态资源分配中Executor的⽣命周期,以spark-shell中的wordcount为例,执⾏命令如下:

# 以yarn模式执⾏,并指定executor个数为1
$ spark-shell --master=yarn --num-executors=1
spark-shell \
--master yarn-client \
--executor-memory 1G \
--num-executors 10# 提交Job1 wordcount
scala> sc.textFile("file:///etc/hosts").flatMap(line => line.split("
")).map(word => (word,1)).reduceByKey(_ + _).count()# 提交Job2 wordcount
scala> sc.textFile("file:///etc/profile").flatMap(line => line.split("
")).map(word => (word,1)).reduceByKey(_ + _).count()# Ctrl+C Kill JVM

上述的Spark应⽤中,以yarn模式启动spark-shell,并顺序执⾏两次wordcount,最后Ctrl+C退出spark-shell。此例中Executor的⽣命周期如下图:

从上图可以看出, Executor在整个应⽤执⾏过程中,其状态⼀直处于Busy(执⾏Task)或Idle(空等)。处于Idle状态的Executor造成资源浪费这个问题已经在上⾯提到。下⾯重点看下开启Spark动态资源分配功能,Executor如何运作。

下⾯分析下上图中各个步骤:
spark-shell Start:启动spark-shell应⽤,并通过--num-executor指定了1个执⾏器。
Executor1 Start:启动执⾏器Executor1。注意: Executor启动前存在⼀个AM向
ResourceManager申请资源的过程,所以启动时机略微滞后与Driver。
Job1 Start:提交第⼀个wordcount作业,此时, Executor1处于Busy状态。
Job1 End:作业1结束, Executor1⼜处于Idle状态。
Executor1 timeout: Executor1空闲⼀段时间后,超时被Kill。
Job2 Submit:提交第⼆个wordcount,此时,没有Active的Executor可⽤。 Job2处于Pending状态。
Executor2 Start:检测到有Pending的任务,此时Spark会启动Executor2。
Job2 Start:此时,已经有Active的执⾏器, Job2会被分配到Executor2上执⾏。
Job2 End: Job2结束。
Executor2 End: Ctrl+C 杀死Driver, Executor2也会被RM杀死。


Spark优化-开启动态资源分配相关推荐

  1. 智慧出行/spark Streaming-Dstream流优化:1.消费并行度,2.序列化,3.限流,压背,冷启4.cpu空转时间,5.不要在代码中判断这个表是否存在,6.推测执行7.开启动态资源分配

    1.设置合理的消费并行度 最优的方案是:kafka分区数:broker *3/6/9 kafka分区能不能增加,能不能减少? kafka分区数是可以增加的,但是不能减少 2.序列化 java的序列化, ...

  2. Spark on yarn 动态资源配置

    一.YARN的配置  首先需要对YARN进行配置,使其支持Spark的Shuffle Service. 修改每台集群上的yarn-site.xml: - 修改 <property> < ...

  3. Spark的动态资源分配ExecutorAllocationManager

    1.美图 本次调试查看源代码采用 spark学习-57-Spark下Scala版HBase下的根据权重获取最真实数据http://blog.csdn.net/qq_21383435/article/d ...

  4. Hive On Spark优化

    1.Hive官方建议的Hive On Spark优化 mapreduce.input.fileinputformat.split.maxsize=750000000hive.vectorized.ex ...

  5. pypark hive 开启动态分区_Hive分区与分桶

    分区.分桶的作用: 我们知道在传统的DBMs系统中,一般都具有表分区的功能,通过表分区能够在特定的区域检索数据,减少扫描成本,在一定程度上提高了查询效率,当然我们还可以通过进一步在分区上建立索引,进一 ...

  6. Spark优化一则 - 减少Shuffle

    看了Spark Summit 2014的A Deeper Understanding of Spark Internals,视频(要科学上网)详细讲解了Spark的工作原理,Slides的45页给原始 ...

  7. CCL |模型结构优化前沿动态综述

    文章发布于"东大自然语言处理实验室"(微信号:gh_c20f65ec11c1) 神经网络方法在自然语言处理相关任务中被广泛应用,新的模型结构和方法层出不穷.东北大学计算机学院自然语 ...

  8. 读文章笔记(二):模型结构优化前沿动态综述

    读文章笔记(二):模型结构优化前沿动态综述 公众号东大自然语言处理实验室文章链接: link. NLP领域神经网络结构的发展历程: 相关模型总结分析,NLP领域模型结构的整体趋势 神经网络模型结构优化 ...

  9. spark笔记spark优化

    基本概念(Basic Concepts) RDD - resillient distributed dataset 弹性分布式数据集 Operation - 作用于RDD的各种操作分为transfor ...

最新文章

  1. Windows 到 Linux 之旅: 第 8 部分. 备份与恢复
  2. ML之NB:利用朴素贝叶斯NB算法(TfidfVectorizer+不去除停用词)对20类新闻文本数据集进行分类预测、评估
  3. pycharm shadows name 'xxxx' from outer scope 警告
  4. Ubuntu 12.10 安装 JDK1.7.0_15
  5. k8s的ingress使用
  6. MySQL基础操作(一)
  7. Python笔记-PyCharm远程连接到Linux进行代码同步并运行
  8. 干货 | 带你解析计算机视觉热门技术—目标检测与追踪
  9. cad细等线体不显示_CAD技法大全,如何在CAD中解决好部分图元无法正常显示的问题 ?...
  10. iOS开发-获取View截图图像
  11. TurboMail邮件系统提醒广大用户小心DXXD勒索邮件
  12. linux内核循环,循环缓冲区(参考linux内核Kfifo)
  13. Java中的Native方法实现(C++)
  14. android mapabc 地图 无法 拖动、缩放问题
  15. AES16位密钥加密解密
  16. 【爬坑记录】记录搭建fabric 遇到的问题-network e2ecli_default not found
  17. 基于QT,cyapi的CYUSB3014,USB3.0上位机编写
  18. Python的一个小程序题
  19. luat c语言开发例程,Luat实例教程:tcp透传
  20. 如何获取 ChatGPT OpenAI API Key

热门文章

  1. 感触极深的一篇文章(迷失方向的你不妨看看)
  2. OSDU(Open Group Open Subsurface Data Universe)数据平台研究笔记
  3. 如何安装OCSNG及GLPI
  4. 太和二中计算机考试,太和二中网上阅卷系统|翰林金榜太和二中查分系统 网页版_最火软件站...
  5. 学习笔记 查分约束系统
  6. redis哨兵搭建(windows)
  7. 教程 | 用安卓手机搭建 web 服务器(二)—— Nginx 安装配置
  8. trunc_normal = lambda stddev: tf.truncated_normal_initializer(0.0, stddev)解析
  9. 私域论坛圈子社区小程序开发
  10. 关于Google账号被封、被下架、提审被拒等原因分析及建议