码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spark并行度和任务调度


    文章目录

      • 并行度
        • 如何设置并行度
        • 如何规划我们自己群集环境的并行度?
      • Spark的任务调度

    并行度

    • Spark之间的并行就是在同一时间内,有多少个Task在同时运行。并行度也就是并行能力的设置,假设并行度设置为6,就是6个task在并行跑,有个6个task的前提下,RDD的分区就被规划为6个分区。

    如何设置并行度

    • 规划并行度优先级:代码→客户端提交参数→配置文件→默认设置(默认为1,具体会根据文件的分片数来跑)。

    • 配置文件中设置

    # conf/spark-defaults.conf中设置
    spark.default.parallelism 100
    
    • 1
    • 2
    # 客户端提交参数
    spark-submit --conf "spark.default.parallelism=100"
    
    • 1
    • 2
    # 在代码中设置
    conf = SparkConf()
    conf.set("spark.default.parallelism", "100")
    
    • 1
    • 2
    • 3
    • Tips:全局并行度是推荐设置,不要针对RDD改分区,可能会影响内存迭代管道的构建或者会产生额外的Shuffle。reparation、coalesce、reparationBy等算子避免使用。

    如何规划我们自己群集环境的并行度?

    • 一般来说我们设置为群集CPU核心的2-10倍(确保最小为2倍,最大一般来说为10倍适度超出也没什么问题)。
    • 为什么最少要设置成2倍呢?
      • CPU的一个核心同一时间只能干一件事,所以在100个核心的前提下,设置100个并行,就能保证cpu资源100%的利用,但是如果task压力不均衡,某个task先执行完了,就会导致某个CPU核心空闲。如果设置了800个并行,100个在运行,700个在等待,而某个task运行完之后,后续的task继续运行,不会造成CPU空闲,从而最大程度的利用群集的资源。

    Spark的任务调度

    • Driver也就是我们通常理解的包工头。它的主要工作就是:

      • 1 逻辑DAG的构建
      • 2 分区DAG的构建
      • 3 Task划分
      • 4 将Task分配给Executor(民工)并监控其工作
    • Spark调度流程图:
      在这里插入图片描述

    1. Driver被构建出来。
    2. 构建SparkContext(执行环境入口对象)。
    3. 基于DAG Scheduler(DAG 调度器)构建逻辑Task的分配。
    4. 基于Task Scheduler(Task 调度器)将逻辑Task分配到各个Executor上干活,并监控它们。
    5. Worker(Executor)被监控,听它们的指令干活,并且定期汇报执行进度。
    • Driver内的的两个调度组件:
      • DAG 调度器
        工作内容:将逻辑DAG图进行处理,最终得到逻辑上的Task划分。
      • Task 调度器
        基于DAG Scheduler的产出,来规划这些逻辑的Task,应该在哪个物理Executor上面去运行,并且监控它们。
  • 相关阅读:
    docker.service配置docker镜像加速
    软考 系统架构设计师 简明教程 | 案例分析解题技巧
    2023 ICPC 网络赛Ⅱ DIM 现场 code | JorbanS
    C++总结(8):STL容器适配器之stack、queue、priority_queue详解
    LeetCode刷题(12)
    安卓手机如何使用第三方主题,制作专属自己喜好的主题
    使用antd-pro脚手架搭建react ts项目
    Django REST framework 简介
    [机缘参悟-67]:深度思考-万物的基础架构:物质组成、运行规律、化合规律
    简单介绍一下c++正则表达式
  • 原文地址:https://blog.csdn.net/sinat_31854967/article/details/128004266
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号