码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spark优化-开启动态资源分配


    文章目录

    • 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    在这里插入图片描述

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

    然后添加如下内容:

    
    	yarn.nodemanager.aux-services
    	spark_shuffle,mapreduce_shuffle
    
    
    	yarn.nodemanager.aux-services.spark_shuffle.class
    	org.apache.spark.network.yarn.YarnShuffleService
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    第四步:重启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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    上述的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杀死。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    ELK日志分析系统叙述与部署,嘎嘎详细
    【系统分析师之路】第七章 复盘系统设计(面向服务开发方法)
    【MindSpore易点通】如何将PyTorch源码转成MindSpore低阶APIP,并在Ascend芯片上实现单机单卡训练
    【Leetcode】15. 三数之和
    每日优鲜深陷“破产风波”,生鲜电商路在何方?
    开源知识库平台Raneto
    获取文章分类详情
    Vivado使用入门之四:时序约束操作大全
    Windows 11 上使用安卓应用及安装谷歌 Google Play和亚马逊 应用商店
    ECCV2022 | 生成对抗网络GAN论文汇总(图像转换-图像编辑-图像修复-少样本生成-3D等)...
  • 原文地址:https://blog.csdn.net/qq_31557939/article/details/126475556
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号