当前位置: 首页 > news >正文

Spark大数据分析与实战笔记(第三章 Spark RDD 弹性分布式数据集-05)

文章目录

  • 每日一句正能量
  • 第3章 Spark RDD弹性分布式数据集
  • 章节概要
    • 3.7 Spark的任务调度
      • 3.7.1 DAG的概念
      • 3.7.2 RDD在Spark中的运行流程
  • 总结

每日一句正能量

成功的速度一定要超过父母老去的速度,努力吧。做事不必与俗同,亦不与俗异;做事不必令人喜,亦不令人憎。若我白发苍苍,容颜迟暮,你会不会,依旧如此,牵我双手,倾世温柔。

第3章 Spark RDD弹性分布式数据集

章节概要

传统的MapReduce虽然具有自动容错、平衡负载和可拓展性的优点,但是其最大缺点是采用非循环式的数据流模型,使得在迭代计算式要进行大量的磁盘IO操作。Spark中的RDD可以很好的解决这一缺点。

RDD是Spark提供的最重要的抽象概念,我们可以将RDD理解为一个分布式存储在集群中的大型数据集合,不同RDD之间可以通过转换操作形成依赖关系实现管道化,从而避免了中间结果的I/O操作,提高数据处理的速度和性能。接下来,本章将针对RDD进行详细讲解。

3.7 Spark的任务调度

3.7.1 DAG的概念

DAG (Directed Acyclic Graph)叫做有向无环图,Spark中的RDD通过一系列的转换算子操作和行动算子操作形成了一个DAG。DAG是一种非常重要的图论数据结构。如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图就是有向无环图。
在这里插入图片描述
从图以看出,4->6->1->2是一条路径,4->6->5也是一条路径,并且图中不存在从顶点经过若干条边后能回到该点。在Spark中,有向无环图的连贯关系被用来表达RDD之间的依赖关系。

根据RDD之间依赖关系的不同可以将DAG划分成不同的Stage(调度阶段)。对于窄依赖来说,RDD分区的转换处理是在一个线程里完成,所以窄依赖会被Spark划分到同一个Stage中;而对于宽依赖来说,由于有Shuffle的存在,所以只能在父RDD处理完成后,下一个Stage才能开始接下来的计算,因此宽依赖是划分Stage的依据,当RDD进行转换操作,遇到宽依赖类型的转换操作时,就划为一个Stage。Stage的具体划分如下图所示。
在这里插入图片描述

  • A、C、E是三个RDD的实例
  • 当A做groupByKey转换操作生成B时,由于groupByKey转换操作属于宽依赖类型,所以就把A划分为一个Stage,如Stage1;
  • 当C做map转换操作生成D, D与E做union转换操作生成F。由于map和union转换操作都属于窄依赖类型,因此不进行Stage的划分,而是将C、D、E、F加入到同一个Stage中;
  • 当F与B进行join转换操作时,由于这时的join操作是非协同划分,所以属于宽依赖,因此会划分为一个Stage,如Stage2;
  • 剩下的B和G被划分为一个Stage,如Stage3。

3.7.2 RDD在Spark中的运行流程

Spark的任务调度流程,即RDD在Spark中的运行流程分为RDD Objects、DAGScheduler、TaskScheduler以及Worker四个部分。
在这里插入图片描述

  1. RDD Objects:当RDD对象创建后,SparkContext会根据RDD对象构建DAG有向无环图,然后将Task提交给DAGScheduler。
  2. DAGScheduler:将作业的DAG划分成不同Stage,每个Stage都是TaskSet任务集合,并以TaskSet为单位提交给TaskScheduler。
  3. TaskScheduler:通过TaskSetManager管理Task,并通过集群中的资源管理器把Task发给集群中Worker的Executor。
  4. Worker:Spark集群中的Worker接收到Task后,把Task运行在Executor进程中,一个进程中可以有多个线程在工作,从而可以处理多个数据分区。

总结

Spark的任务调度是指Spark集群中的任务如何被调度和执行。Spark的任务调度主要基于两个概念:DAG和RDD。

DAG是有向无环图(Directed Acyclic Graph)的简称,用来描述Spark作业中的任务依赖关系。在Spark中,作业被划分为多个阶段(Stage),每个阶段包含一组可以并行执行的任务。阶段之间的依赖关系由DAG表示。DAG的每个节点代表一个RDD(Resilient Distributed Dataset),而边代表RDD之间的依赖关系。通过DAG可以确定任务的执行顺序,并进行优化以提高作业的执行效率。

RDD是Spark中的核心数据结构,代表了分布式的弹性数据集。RDD可以被看作是不可变的分布式对象,可以并行处理,而且具有容错和恢复能力。Spark中的数据处理操作(如转换和动作)都是通过对RDD进行操作来实现的。RDD的运行流程如下:

  1. 创建RDD:通过从外部数据源(如HDFS、本地文件)读取或对已有RDD进行转换来创建RDD。

  2. RDD转换:通过应用转换操作(如map、filter、reduceByKey)对已有的RDD进行转换,生成新的RDD。转换操作是惰性执行的,即不会立即执行,而是记录下转换操作的具体步骤。

  3. RDD依赖关系:每个RDD都会记录其血缘关系,即依赖哪些父RDD。这些依赖关系构成了一个有向无环图,即DAG。

  4. 任务划分:根据DAG将作业划分为多个阶段(Stage),每个阶段包含一组可以并行执行的任务。

  5. 任务调度:根据阶段之间的依赖关系,将任务按照优化策略进行调度,以便尽可能并行执行。

  6. 任务执行:在每个节点上执行任务,将RDD的转换操作应用到数据分区上,并生成新的RDD。

  7. 结果返回:执行完所有任务后,将最终结果返回给驱动程序或存储到外部数据源。

Spark的任务调度是基于DAG和RDD的。通过DAG可以确定任务的执行顺序,并进行优化以提高作业的执行效率。而RDD作为核心数据结构,用于表示分布式的弹性数据集,通过RDD的转换操作来构建DAG和执行任务。Spark的任务调度流程包括RDD的创建、转换、依赖关系构建、任务划分、调度、执行和结果返回。

转载自:https://blog.csdn.net/u014727709/article/details/136268261
欢迎 👍点赞✍评论⭐收藏,欢迎指正

相关文章:

  • 取送货问题(Pickup and Delivery Problem)
  • 【Linux】screen
  • Django多个app配置多个域名访问
  • Linux之前后端项目部署与发布
  • 数据增加
  • 无需邀请码,Xinstall实现精准分享归因
  • 【QT+QGIS跨平台编译】之五十三:【QGIS_CORE跨平台编译】—【qgssqlstatementparser.cpp生成】
  • 单细胞Seurat - 降维与细胞标记(4)
  • Java集合相关面试题(2024大厂高频面试题系列)
  • Dataframe学习笔记:记录一下工作上使用的几种示例
  • kafka学习笔记四(面试题)
  • QML中动态表格修改数据
  • SpringSecurity入门demo(四)权限校验
  • SpringMVC 学习(七)之报文信息转换器 HttpMessageConverter
  • python difflib --- 计算差异的辅助工具
  • [nginx文档翻译系列] 控制nginx
  • Invalidate和postInvalidate的区别
  • Java深入 - 深入理解Java集合
  • Linux下的乱码问题
  • Magento 1.x 中文订单打印乱码
  • MySQL主从复制读写分离及奇怪的问题
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • node 版本过低
  • vuex 笔记整理
  • 对象引论
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开源地图数据可视化库——mapnik
  • 码农张的Bug人生 - 见面之礼
  • 什么软件可以剪辑音乐?
  • 使用Swoole加速Laravel(正式环境中)
  • 项目管理碎碎念系列之一:干系人管理
  • 用简单代码看卷积组块发展
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 我们雇佣了一只大猴子...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​ubuntu下安装kvm虚拟机
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #android不同版本废弃api,新api。
  • (1)虚拟机的安装与使用,linux系统安装
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)Java 简介
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (NSDate) 时间 (time )比较
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)Knockout 创建自定义绑定
  • (转)3D模板阴影原理
  • (转)setTimeout 和 setInterval 的区别
  • (转载)深入super,看Python如何解决钻石继承难题
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Net - 类的介绍