Spark学习3.0

news2024/11/25 15:51:51

目录

10.3.4 Spark运行原理

 1.设计背景

 2.RDD概念

 3.RDD特性

 4.RDD之间的依赖关系

 窄依赖和宽依赖

5.Stage的划分

 Stage的类型包括两种:ShuffleMapStage和ResultStage

 6.RDD运行过程


10.3.4 Spark运行原理

 1.设计背景

许多 迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具 共同之处是,不同计算阶段之间会重用中间 结果
目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销

RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储,大大降低了数据复制、磁盘IO和序列化开销

 2.RDD概念

一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算

RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集创建RDD,或者通过在其他RDD上执行确定的转换操作(如mapjoingroup by)而创建得到新的RDD

RDD 提供了一组丰富的操作以支持常见的数据运算,分为 “动作”( Action “转换”( Transformation 两种类型
RDD 提供的 转换 接口都非常简单,都是类似 map filter groupBy join 等粗粒度的数据转换操作,而不是针对某个数据项的细粒度修改 (不适合网页爬虫)
表面上 RDD 的功能很受限、不够强大 实际上 RDD 已经被实践证明可以高效地表达许多框架的编程模型 比如 MapReduce SQL Pregel
Spark Scala 语言实现了 RDD API ,程序员可以通过调用 API 实现对 RDD 的各种操作
RDD 典型的执行过程如下:
RDD 读入外部数据源进行创建
RDD 经过一系列的转换( Transformation )操作,每一次都会产生不同的 RDD ,供给下一个转换操作使用
最后一个 RDD 经过“动作”操作进行转换,并输出到外部数据源

RDD采用了惰性调用:RDD的执行过程中,真正的计算发生在RDD的“行动”操作,对于行动之前的所有“转换”操作Spark只是会记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,即相互依赖关系,而不会触发真正的计算。

上述这一系列处理称为一个“血缘关系(Lineage)”,即DAG拓扑排序的结果。采用惰性调用,通过血缘关系连接起来的一系列RDD操作就可以实现管道化(pipeline),避免了多次转换操作之间数据同步的等待,而且不用担心有过多的中间数据,因为这些具有血缘关系的操作都管道化了,一个操作得到的结果不需要保存为中间数据,而是直接管道式地流入到下一个操作进行处理。

同时,这种通过血缘关系把一系列操作进行管道化连接的设计方式,也使得管道中每次操作的计算变得相对简单,保证了每个操作在处理逻辑上的单一性;相反,在MapReduce的设计中,为了尽可能地减少MapReduce过程,在单个MapReduce中会写入过多复杂的逻辑。

一个Spark的“Hello World”程序:以一个“Hello World”入门级Spark程序来解释RDD执行过程,这个程序的功能是读取一个HDFS文件,计算出包含字符串“Hello World”的行数。

创建这个 Spark 程序的执行上下文,即创建 SparkContext 对象
从外部数据源(即 HDFS 文件)中读取数据创建 fileRDD 对象;
构建 fileRDD filterRDD 之间的依赖关系,形成 DAG 图,这时候并没有发生真正的计算,只是记录转换的轨迹
执行到第 5 行代码时, count() 是一个行动类型的操作,触发真正的计算,开始实际执行从 fileRDD filterRDD 的转换操作,并把结果持久化到内存中,最后计算出 filterRDD 中包含的元素个数。

3.RDD特性

Spark采用RDD以后能够实现高效计算的原因主要在于:

1高效的容错性

现有容错机制:数据复制或者记录日志

RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作

2中间结果持久化到内存数据在内存中的多个RDD操作之间进行传递避免了不必要的读写磁盘开销

(3)存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化

 4.RDD之间的依赖关系

RDD不同操作,会使得RDD分区之间产生不同的依赖关系,DAG调度器根据RDD之间的依赖关系,把DAG划分为若干个阶段,依赖关系分为窄依赖和宽依赖,二者主要区别:是否包含Shuffle操作。

窄依赖和宽依赖

窄依赖表现为一个父 RDD 的分区对应于一个子 RDD 的分区或多个父 RDD 的分区对应于一个子 RDD 的分区
宽依赖则表现为存在一个父 RDD 的一个分区对应一个子 RDD 的多个分区

5.Stage的划分

Spark通过分析各个RDD的依赖关系生成了DAG,再通过分析各个RDD中的分区之间的依赖关系来决定如何划分Stage,具体划分方法是:

DAG中进行反向解析,遇到宽依赖就断开
遇到窄依赖就把当前的RDD加入到Stage
将窄依赖尽量划分在同一个Stage中,可以实现流水线计算

 Stage的类型包括两种:ShuffleMapStageResultStage

  Stage 的类型包括两种: ShuffleMapStage ResultStage ,具体如下:
  1 ShuffleMapStage :不是最终的 Stage ,在它之后还有其他 Stage ,所以,它的输出一定需要经过 Shuffle 过程,并作为后续 Stage 的输入;这种 Stage 是以 Shuffle 为输出边界,其输入边界可以是从外部获取数据,也可以是另一个 ShuffleMapStage 的输出,其输出可以是另一个 Stage 的开始;在一个 Job 里可能有该类型的 Stage ,也可能没有该类型 Stage

2ResultStage:最终的Stage,没有输出,而是直接产生结果或存储。这种Stage是直接输出结果,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出。在一个Job里必定有该类型Stage

因此,一个Job含有一个或多个Stage其中至少含有一个ResultStage

 6.RDD运行过程

通过上述对RDD概念、依赖关系和Stage划分的介绍,结合之前介绍的Spark运行基本流程,再总结一下RDDSpark架构中的运行过程:

1)创建RDD对象;

2SparkContext负责计算RDD之间的依赖关系,构建DAG

3DAGScheduler负责把DAG图分解成多个Stage,每个Stage中包含了多个Task,每个Task会被TaskScheduler分发给各个WorkerNode上的Executor去执行。

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

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

相关文章

Hadoop-03-Hadoop集群 免密登录 超详细 3节点公网云 分发脚本 踩坑笔记 SSH免密 服务互通 集群搭建 开启ROOT

章节内容 上一节完成: HDFS集群XML的配置MapReduce集群XML的配置Yarn集群XML的配置统一权限DNS统一配置 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次&…

【python系统学习笔记day1】软件安装与使用

一、正确学习方法 坚持! 第一阶段:按照老师的步骤做,不要跳步 第二阶段:做出个人创新与尝试 第三阶段:建立自己的体系 二、环境的安装 第一步:任意浏览器网址栏输入 python.org 第二步:点…

一文弄懂逻辑回归算法

1. 引言 今天我们将深入探讨另一种基本的机器学习算法:逻辑回归。在前两篇文章中,我们使用线性回归和梯度下降法帮助我们的朋友马克确定了他 2400 平方英尺房子的理想售价。 最近马克再次向我们求助。他住在一个高档社区,他认为低于一定面积…

探索人工智能和LLM对未来就业的影响

近年来,人工智能(AI)迅猛发展,引发了人们的兴奋,同时也引发了人们对就业未来的担忧。大型语言模型(LLM)就是最新的例子。这些强大的人工智能子集经过大量文本数据的训练,以理解和生成…

excel操作笔记

CTRLE ,快速填充 shiftctrl下箭头,选中一个单元个,按快捷键,可以选中所有列 ALT,选中需要求和的部分,按住ALT,就可以快速求和,列和行多选一列显示求和结果 引用,快捷键…

中药材图像识别:中医与深度学习的融合(目标检测)

亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 一、引…

STM32F1+HAL库+FreeTOTS学习2——STM32移植FreeRTOS

STM32F1HAL库FreeTOTS学习2——STM32移植FreeRTOS 获取FreeRTOS源码创建工程窥探源码移植 上期我们认识了FreeRTOS,对FreeRTOS有了个初步的认识,这一期我们来上手移植FreeRTOS到STM32上。 获取FreeRTOS源码 进入官网:https://www.freertos.o…

7.优化算法之分治-快排归并

0.分治 分而治之 1.颜色分类 75. 颜色分类 - 力扣(LeetCode) 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数…

weiyang**3.控制台01

1. 搭建单群组FISCO BCOS联盟链 使用开发部署工具 build_chain.sh脚本在本地搭建一条4 节点的FISCO BCOS链,以Ubuntu 22.04 64bit系统为例操作。 1.1 安装依赖 sudo apt install -y openssl curl 1.2 创建操作目录, 下载安装脚本 ## 创建操作目录 cd ~ &&a…

java基于ssm+jsp 个人交友网站

1前台首页功能模块 个人交友网站,在系统首页可以查看首页、交友信息、线下活动、系统公告、论坛信息、我的、跳转到后台、客服等内容,如图1所示。 图1系统功能界面图 用户注册,在用户注册页面可以填写用户账号、密码、用户姓名、年龄等信息进…

[JS]BOM操作

介绍 BOM(Browser Object Model)是浏览器对象模型 window对象是一个全局对象, 也是JS中的顶级对象通过var定义在全局作用域中的变量和函数都会变成window对象的属性和方法window对象下的属性和方法调用时一般省略window 间歇函数 定时器 定时器是间歇函数的一种, 可以每个每…

java基于ssm+jsp 高校信息资源共享平台

1前台首页功能模块 高校信息资源共享平台,在系统首页可以查看首页、课程信息、教学资源、新闻资讯、我的、跳转到后台等内容,如图1所示。 图1前台首页功能界面图 学生信息登录、学生信息注册,在注册页面可以填写账号、姓名、手机、邮箱、身…

C#基于SkiaSharp实现印章管理(3)

本系列第一篇文章中创建的基本框架限定了印章形状为矩形,但常用的印章有方形、圆形等多种形状,本文调整程序以支持定义并显示矩形、圆角矩形、圆形、椭圆等4种形式的印章背景形状。   定义印章背景形状枚举类型,矩形、圆形、椭圆相关的尺寸…

【人工智能】—葡萄牙酒店预订信息多维度分析|预测是否取消预定算法模型大乱斗

引言 在当今数字化时代,数据驱动的决策在各个行业中变得越来越重要。酒店业,作为旅游和休闲服务的核心部分,正面临前所未有的机遇和挑战。随着在线预订平台的兴起,客户行为数据的积累为酒店提供了洞察消费者需求和优化运营策略的…

存储管理(三):分区表

什么是分区表 假设存在表t: CREATETABLE t (ftimedatetime NOT NULL,c int(11) DEFAULT NULL,KEY (ftime) )ENGINEInnoDB DEFAULT CHARSETlatin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (2017) ENGINE InnoDB,PARTITION p_2018 VA…

【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:ModuleNotFoundError: No module named ‘sklearn‘ 一、分析问题背景 在进行机器学习项目时,Scikit-Learn(简称sklearn)是一…

MySQL的limit关键字和聚合函数讲解

目录 一、MySQL数据库介绍二、MySQL聚合函数三、MySQL数据排序分组四、MySQL的limit关键字 一、MySQL数据库介绍 MySQL是一种广泛使用的开源关系型数据库管理系统,由瑞典MySQL AB公司开发,后被Sun Microsystems收购,最终成为Oracle公司的一部…

Consul入门笔记

简介 Consul,HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更一站式,内置服务注册与发现框架、分布一致性协议实现、健康检查、K/V存储、多数据中心方案&…

地图初始化-多视图几何基础

在ORB-SLAM2中初始化和使用的传感器类型有关,其中单目相机模式初始化相对复杂,需要运行一段时间才能成功初始化。而双目相机、 RGB-D相机模式下比较简单,一般从第一帧开始就可以完成初始化。 为什么不同传感器类型初始化差别这么大呢&#x…

springboot宠物医院管理系统-计算机毕业设计源码07221

目 录 1 绪论 1.1 选题背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 宠物医院管理系统系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…