【spark】spark内核调度(重点理解)

news2024/9/22 3:40:00

目录

  • spark内核调度
    • DAG
    • DAG的宽窄依赖和阶段划分
    • 内存迭代计算
    • 面试题
      • Spark是怎样做内存计算的?DAG的作用是什么?Stage阶段划分的作用?
      • Spark为什么比MapReduce快
    • spark并行度
      • 如何设置并行度:spark.default.parallelism
      • 集群中如何规划并行度
    • spark的任务调度
    • Spark运行中的概念名词大全

spark内核调度

DAG

Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算
在这里插入图片描述

  • DAG:有向无环图(有方向但是没有形成闭环的一个执行流程图)
    有向:有方向
    无环:没有闭环

  • Job和Action的关系
    在这里插入图片描述

Action:返回值不是RDD的算子
Job:一个应用程序内的子任务
一个Action会产生一个Job,每一个Job有自己对应的DAG图
1个ACTION = 1个DAG = 1个JOB
层级关系:
一个Application中,可以有多个JOB,每一个JOB内含有一个DAG,同时每一个JOB都是由一个Action产生的。

  • DAG和分区:有关系

DAG的宽窄依赖和阶段划分

在SparkRDD前后之间的关系,分为

  • 窄依赖:父RDD的一个分区,全部将数据发给子RDD的一个分区

在这里插入图片描述

  • 宽依赖:父RDD的一个分区,将数据发给子RDD的多个分区
    在这里插入图片描述
  • 阶段划分:对于Spark来说,会根据DAG按照宽依赖,划分不同的DAG阶段
    划分依据:从后向前,遇到宽依赖,就划分出一个阶段。称之stage
    在这里插入图片描述
    如图,可以看到,在DAG中,基于宽依赖,将DAG划分成2个stage
    在stage内部一定是:窄依赖

内存迭代计算

在这里插入图片描述
基于带有内存的DAG,以及阶段划分。可以从图中可能出 逻辑上最优的task分配。一个task是一个线程来具体执行的。

task1中 rdd1、rdd2、rdd3的迭代计算,都是由一个task(线程完成),这一阶段的这一条线,是纯内存计算

task1 task2 task3,就形成了三个并行的 内存计算管道

面试题

Spark是怎样做内存计算的?DAG的作用是什么?Stage阶段划分的作用?

1、Spark任务会产生DAG图
2、DAG图会基于分区和宽窄依赖关系划分阶段
3、一个阶段的内部是窄依赖,窄依赖内,如果形成前后1:1分区对应关系,就可以产生许多内存迭代计算的管道
4、这些内存迭代计算的管道,就是一个个具体的执行Task
5、一个Task就是一个具体的线程,任务跑在一个线程内,就是走内存计算了

Spark为什么比MapReduce快

在这里插入图片描述

spark并行度

spark的并行:在同一时间内,有多少个task在同时运行
并行度:并行能力的设置
有6个task并行的前提下,rdd的分区就被规划成6个分区了
先有并行度,才会有的分区

如何设置并行度:spark.default.parallelism

可以在代码中和配置文件中以及提交程序的客户端参数中设置
优先级从高到低:
1、代码中
2、客户端提交参数中
3、配置文件中
4、默认

全局并行度是推荐设置,不要针对RDD改分区,可能会影响内存迭代管道的构建,或者会产生额外的shuffle

集群中如何规划并行度

结论:设置为CPU总核数的2~10倍
CPU的一个核心同一时间只能干一件事情
所以,在100个核心的情况下,设置100个并行度,就能让CPU 100%出力
这种设置下,如果task的压力不均衡,某个task先执行完了,就会导致CPU核心空闲
所以,我们将Task并行分配的数量变多,比如800个并行,同一时间只有100个在运行,700个在等待
但是可以确保,某个task运行完了,后续有task补上,不让cpu闲下来,最大程度利用集群资源

规划并行度,只看集群CPU核数

spark的任务调度

spark的任务调度由Drive进行调度,这个工作包含:
1、逻辑DAG产生
2、分区DAG产生
3、Task划分
4、将Task分配给Executor并监控其工作
在这里插入图片描述

  • Driver端被构建出来
  • 构建SparkContext(执行环境入口对象)
  • 基于DAG Scheduler(DAG调度器)构建逻辑Task分配
  • 基于TaskScheduler(Task调度器)将逻辑Task分配到各个Executor上干活,并监控他们
  • Worker(Executor),被TaskScheduler管理监控,听从他们的指令干活,并定期汇报进度。

Driver内两个组件:
DAGScheduler(DAG调度器)
工作内容:将逻辑的DAG图进行处理,最终得到逻辑上的Task划分
TaskScheduler(Task调度器)
工作内容:基于DAG Scheduler的产生,来规划这些逻辑的task,应该在哪些物理的Excutor上运行,以及监控管理他们的运行

Spark运行中的概念名词大全

1、一个spark环境可以运行多个Application
2、一个代码运行起来,会成为一个Application
3、Application内部可以有多个Job
4、每个Job由一个Action产生,并且每个Job有自己的DAG执行图
5、一个Job的DAG图 会基于宽窄依赖划分成不同的阶段
6、不同阶段内基于分区数量,形成多个并行的内存迭代管道
7、没一个内存迭代管道形成一个Task(DAG调度器划分将Job内划分出具体task任务,一个Job被划分出来的task在逻辑上称之为这个Job的taskset)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1325462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P1 H264码流结构分析 (上)

目录 前言 01 什么是码流结构 02 H264帧类型的区别 03 片slice 前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525…

官方指定Jmeter配置JVM堆内存方式

1.概述 在使用Jmeter做性能测试过程中,可能会应为默认设置的堆内存值较小出现堆内存溢出问题,此时解决的方式有两种,分布式测试和调大堆内存。下面介绍官方推荐调整堆内存方法。 2.调整Jmeter堆内存 2.1.介绍官方推荐堆内存调整方法(jmete…

IDEA Community html文件里的script标签没有syntax highlighting的解决方案

在网上找到的解决方法有的是针对Ultimate版本才可以下载的plugin,对我所用的Community版本无法生效,找了一圈最后在stackoverflow上找到一个有效的方案,给需要的小伙伴分享一下:IntelliJ Community Edition: Javascript syntax hi…

Jenkins 执行远程脚本的插件—SSH2 Easy

SSH2 Easy 是什么? SSH2 Easy 是一个 Jenkins 插件,它用于在 Jenkins 构建过程中通过 SSH2 协议与远程服务器进行交互。通过该插件,用户可以在 Jenkins 的构建过程中执行远程命令、上传或下载文件、管理远程服务器等操作。 以下是 SSH2 Eas…

7-4 JAVA-水仙花数(Java for PTA)

水仙花数是指一个N位正整数(7≥N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153135333。 要求编写程序,计算所有N位水仙花数。 输入格式: 输入一个正整数N(3≤N≤7)。 输出格式: …

java并发编程四 Monitor 概念,api介绍与线程状态转换

Monitor 概念 Java 对象头 以 32 位虚拟机为例子: 普通对象 数组对象 其中 Mark Word 结构为 64 位虚拟机 Mark Word 小故事 故事角色 老王 - JVM小南 - 线程小女 - 线程房间 - 对象房间门上 - 防盗锁 - Monitor房间门上 - 小南书包 - 轻量级锁房间门上 -…

Elasticsearch常见面试题

文章目录 1.简单介绍下ES?2.简单介绍当前可以下载的ES稳定版本?3.安装ES前需要安装哪种软件?4.请介绍启动ES服务的步骤?5.ES中的倒排索引是什么?6. ES是如何实现master选举的?7. 如何解决ES集群的脑裂问题8…

本地文件内容搜索神器AnyTXT Searcher如何搭建与远程访问

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况,异地办公或者不在公司,想找…

ubuntu qt 源码编译

官方源码下载地址 : 源码地址 选择要下载的版本 dmg结尾的是MacOS系统里使用的Qt库,qt-everywhere-opensource-src-4.7.0是Qt源码包,有zip和tar.gz两个压缩格式的,两个内容是一样的,只是zip一般在Windows下比较流行,…

【100个Cocos实例】快要圣诞节了,给大家支个招!

引言 Mask遮罩组件的一些简单实例 在游戏开发中常常需要在UI界面上展示玩家的头像或者Logo,通常都会是正方形。 偶尔也会有一些奇形怪状的需求,例如五边形、六边形、心形等等。 本文将介绍一下在Cocos游戏开发中Mask遮罩组件的一些简单实例&#xff…

九州未来向开放原子开源基金会捐赠OpenV2X,共建繁荣开源生态

12月16日,以“一切为了开发者”为主题的开放原子开发者大会在无锡成功举办。会上,九州未来将OpenV2X车路协同开源项目正式捐赠给开放原子开源基金会,并签署项目捐赠协议,通过开源共创的方式,携手开源伙伴共同打造车路协…

[微服务 ]微服务集成中的3个常见缺陷,以及如何避免它们

微服务风靡一时。他们有一个有趣的价值主张,即在与多个软件开发团队共同开发的同时,将软件快速推向市场。因此,微服务是在扩展您的开发力量的同时保持高敏捷性和快速的开发速度。 简而言之,您将系统分解为微服务。分解并不是什么新…

RLAIF方法与传说中的函数‘Q‘,揭露OpenAI那不为人知的Qstar计划

早晨刚起来,看群里新哥转了这个帖子: 帖子不长,但是基本是爆炸类的新闻了!这个应该也就是Sam之前被董事会诟病的所谓隐瞒了的真相! 在讲解这个帖子之前,先要普及2个概念: 1- RLAIF: 不是TGIF,虽然今天确实是周五 RLAIF是Google今年9月新出来的论文,论文…

智能优化算法应用:基于堆优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于堆优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于堆优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.堆优化算法4.实验参数设定5.算法结果6.参考文…

tcpdump抓包技巧

1. 常见的抓包工具 1.1 tcpdump 是Linux下常用的抓包工具,它是一个命令行工具,可以抓取和Wireshark类似的数据,而且保存的数据包,可以放到Wireshark中分析。如果你的Linux服务器需要抓包分析问题,它是一个非常好的选择…

算法基础之约数之和

约数之和 核心思想&#xff1a; #include<iostream>#include<algorithm>#include<vector>#include<unordered_map>using namespace std;typedef long long LL;const int N 110 , mod 1e97;int main(){int n;cin>>n;unordered_map<int,int&…

使用opencv实现图像中几何图形检测

1 几何图形检测介绍 1.1 轮廓(contours) 什么是轮廓&#xff0c;简单说轮廓就是一些列点相连组成形状、它们拥有同样的颜色、轮廓发现在图像的对象分析、对象检测等方面是非常有用的工具&#xff0c;在OpenCV 中使用轮廓发现相关函数时候要求输入图像是二值图像&#xff0c;这…

Python学习笔记(六):函数的多返回值、函数的多种参数使用形式、匿名函数、文件的读取操作、文件的写入 、文件的追加

目录 一、函数的多返回值 二、函数的多种参数使用形式 2.1位置参数 2.2关键字参数 2.3缺省参数 2.4不定长参数 三、匿名函数 3.1 函数作为参数传递 3.2 函数的定义 3.3 匿名函数定义语法&#xff1a; 四、文件的读取操作 4.1 open&#xff08;&#xff09;打开函数…

【WPF.NET开发】样式和模板

本文内容 示例样式ControlTemplateDataTemplate触发器视觉状态共享资源和主题 Windows Presentation Foundation (WPF) 样式设置和模板化是指一套功能&#xff0c;这套功能使开发者和设计者能够为其产品创建极具视觉表现力的效果和一致的外观。 自定义应用的外观时&#xff0…

【精选】Lombok概述及常用注解使用方法

Lombok概述 Lombok项目是一个java库&#xff0c;它可以自动插入到编辑器和构建工具中&#xff0c;增强java的性能。不需要再写getter、setter或equals方法&#xff0c;只要有一个注解&#xff0c;就有一个功能齐全的构建器、自动记录变量等等。 以前的Java项目中&#xff0c;充…