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
欢迎 👍点赞✍评论⭐收藏,欢迎指正

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

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

相关文章

Mysql运维篇(六) 部署MHA--一主二从部署

MAH架构图 一、上传MySQL软件 1、同步MySQL软件 [rootmysql01 ~]# ls -lrt total 626112 -rw-r--r--. 1 root root 641127384 Jan 30 15:13 mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -rw-------. 1 root root 1697 Feb 3 12:09 anaconda-ks.cfg -rw-r--r--. 1 root…

[SpringDataMongodb开发游戏服务器实战]

背景: xdb其实足够完美了,现在回想一下,觉得有点复杂,我们不应该绑定语言,最好有自己的架构思路。 七号堡垒作为成功的商业项目,告诉我:其实数据是多读少写的,有修改的时候直接改库也…

推荐一个 Obsidian 的 ChatGPT 插件

源码地址:https://github.com/nhaouari/obsidian-textgenerator-plugin Text Generator 是目前我使用过的最好的 Obsidian 中的 ChatGPT 功能插件。它旨在智能生成内容,以便轻松记笔记。它不仅可以在 Obsidian 中直接使用 ChatGPT,还提供了优…

Python staticmethod函数

Python是一种功能强大且灵活的编程语言,具有许多特性和功能,其中之一就是staticmethod函数。staticmethod函数是Python中用于定义静态方法的一种特殊装饰器。在本文中,将深入探讨staticmethod函数的用法、优势以及与其他方法类型的比较。 什…

【力扣 - 将有序数组转化为二叉搜索树】

题目描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 题解 前言 二叉搜索树的中序遍历是升序序列&a…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…

Arduino中安装ESP32网络抽风无法下载 暴力解决办法 python

不知道什么仙人设计的arduino连接网络部分,死活下不下来。(真的沙口,第一次看到这么抽风的下载口) 操作 给爷惹火了我踏马解析json选zip直接全部下下来 把这个大家的开发板管理地址下下来跟后面python放在同一目录下&#xff0c…

FDTD算法总结

计算电磁学(Computational Electromagnetics, CEM)是通过数值计算来研究电磁场的交叉学科。 数值求解电磁学问题的方法可以分成频域(Frequency Doamin, FD)、时域(Time Domain, TD)等两类。 频域法基于时谐微分,通过对多个采样值的傅里叶逆变换得到所需的脉冲响应…

构建高效教学平台系统:关键要素与最佳实践

随着在线教育的迅速发展,教学平台系统成为了教育行业不可或缺的一部分。本文将总结构建高效教学平台系统的关键要素,并介绍最佳实践,以帮助教育机构和企业打造具有竞争力的教学平台系统。 引言: 随着信息技术的不断进步和普及&…

神经网络系列---分类度量

文章目录 分类度量混淆矩阵(Confusion Matrix):二分类问题二分类代码多分类问题多分类宏平均法:多分类代码多分类微平均法: 准确率(Accuracy):精确率(Precision)&#xf…

K8s安全一

Kubernetes是一个开源的,用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署,规划,更新,维护的一种机制。其核心的特点就是能够自主的管理容器来保证云平台中的…

值得推荐收藏的5款顶级免费数据恢复软件!

今天分享5个超级简单又适合电脑小白的恢复删除的文件的恢复方法! 在我们的日常生活中,偶尔会因为误删除或者清空回收站等原因导致数据丢失。对于电脑小白来说,这或许是一个非常棘手的问题。但是,不用太担心,今天我为大…

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C那些事儿 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

模型上下文长度达到10000000,又一批创业者完蛋了?

没有疑问,Gemini 1.5 Pro的隆重推出被Sora抢了风头。 社交平台X上OpenAI介绍Sora的第一条动态,现在已经被浏览了超过9000万次,而关于Gemini 1.5 Pro热度最高的一条,来自谷歌首席科学家Jeff Dean,区区123万人。 或许J…

【设计模式】策略模式及函数式编程的替代

本文介绍策略模式以及使用函数式编程替代简单的策略模式。 策略模式 在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略,并将每个算法封装在独立…

Jenkins解决Host key verification failed (2)

Jenkins解决Host key verification failed 分析原因情况 一、用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免…

基于SpringBoot的航班进出港管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

【Java程序设计】【C00319】基于Springboot的志愿服务管理系统(有论文)

基于Springboot的志愿服务管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的志愿服务管理系统设计与实现,本系统有管理员以及用户二种角色权限 管理员:首页、个人中心、管理员管理、…

【MATLAB源码-第146期】基于matlab的信源编码仿真GUI,对比霍夫曼编码,算术编码和LZ编码。

操作环境: MATLAB 2022a 1、算法描述 霍夫曼编码、算术编码和LZ编码是三种广泛应用于数据压缩领域的编码技术。它们各自拥有独特的设计哲学、实现方式和适用场景,因此在压缩效率、编解码速度和内存使用等方面表现出不同的特点。接下来详细描述这三种编…

Base64 编码 lua

Base64 编码 -- Base64 字符表 local base64_chars { A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…