Spark中的基本概念

2023-11-16

1、基本概念

1.1 RDD:弹性分布式数据集

RDD(resillient distributed dataset): 弹性分布式数据集。

通过 Spark 的转换算子可以将 RDD 封装成一系列具有血缘关系的RDD,也就是 DAG。只有通过 Spark 的行动算子才会将 RDD 及其 DAG 提交到 DAGScheduler。RDD 的祖先一定是一个跟数据源相关的 RDD,负责从数据源迭代读取数据。
特点:只读的、从子代可以追溯到父代、存储的不是数据,而是对分区数据的读取策略

1.2 DAG:有向无环图

DAG(Directed Acycle Graph): 有向无环图。

Spark 使用 DAG 来反映各 RDD 之间的依赖或血缘关系,当RDD遇到Action算子,将之前的所有算子形成一个有向无环图(DAG)。再在Spark中转化为Job,提交到集群进行执行。一个App中可以包含多Job。

  • DAG描述多个RDD的转换过程,任务执行时,可以按照DAG的描述,执行真正的计算(数据被操作的一个过程)
  • DAG是有边界的:开始(通过SparkContext创建的RDD),结束(触发Action,调用run Job就是一个完整的DAG)
  • 一个RDD只是描述了数据计算过程中的一个环节,而DAG由一到多个RDD组成,描述了数据计算过程中的所有环节(过程)
  • 一个Spark Application中是有多少个DAG:一到多个(取决于触发了多少次Action)

1.3 Partition:数据分区

Partition: 数据分区,即一个 RDD 的数据可以划分为多少个分区。Spark 根据 Partition 的数量来确定 Task 的数量。

1.4 NarrowDependency: 窄依赖

NarrowDependency: 窄依赖,即子 RDD 依赖于父 RDD 中固定的 Partition。NarrowDependency分为 OneToOneDependency 和 RangeDependency 两种。

1.5 ShuffleDependency: 宽依赖

ShuffleDependency: Shuffle 依赖,也称为宽依赖,即子 RDD 对父 RDD 中的所有 Patition 都可能产生依赖。子 RDD 对父 RDD 各个 Partition 的依赖将取决于分区计算器(Partitioner)的算法。

2、Spark基本组件

2.1 Application

Application:编写的Spark的应用程序

2.2 Driver

Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContext

2.3 Executor

Executor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上。在Spark on Yarn模式下,其进程名称为 CoarseGrainedExecutor Backend,一个CoarseGrainedExecutor Backend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task,这样,每个CoarseGrainedExecutorBackend能并行运行Task的数据就取决于分配给它的CPU的个数。

2.4 Worker

Worker:集群中可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点。

2.5 Job

Job: 用户提交的作业。当 RDD 及其 DAG 被提交给 DAGScheduler 调度后,DAGScheduler 会将所有 RDD 中的转换及动作视为一个 Job。一个 Job 有一个到多个 Task 组成。

2.6 Stage

Stage: Job 的执行阶段。DAGScheduler 按照ShuffleDependency 作为 Stage 的划分节点对 RDD的 DAG 进行 Stage 划分(上游的 Stage 将为 ShuffleMapStage)。因此一个 Job 可能被划分为一到多个 Stage。Stage 分为 ShuffleMapStage 和 ResultStage 两种。

每个Job会根据RDD的宽依赖关系被切分很多Stage,每个Stage中包含一组相同的Task,这一组Task也叫TaskSet。

2.7 Task

Task: 在Executor进程中体执行任务的工作单元具。一个 Job 在每个 Stage 内都会按照 RDD 的 Partition 数量,创建多个 Task。Task 分为 ShuffleMapTask 和 ResultTask 两种。ShuffleMapStage中的 Task 为 ShuffleMapTask,而 ResultStage 中的 Task 为 ResultTask。ShuffleMapTask 和 ReduceTask 类似于 Hadoop 中的 Map 任务和 Reduce 任务。
一个分区对应一个Task,Task执行RDD中对应Stage中所包含的算子。Task被封装好后放入Executor的线程池中执行。Executor会在线程池中取得一个线程,分配给一个任务,之后任务执行完成,线程池回收线程。

2.8 DAGScheduler

DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler,其划分Stage的依据是RDD之间的依赖关系

2.9 TaskScheduler

TaskScheduler:将TaskSet提交给Worker(集群)运行,每个Executor运行什么Task就是在此处分配的。

2.10 其他组件

  • ClusterManager:在standlone模式中即为Master(主节点),控制整个集群.监控Worker.在Yarn模式中为资源管理器
  • SparkContext: 整个应用的上下文,监控应用的生命周期
  • SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。SparkEnv内创建并包含如下一些重要组件的引用。
  • MapOutPutTracker:负责Shuffle元信息的存储。
  • BroadcastManager:负责广播变量的控制与元信息的存储。
  • BlockManager:负责存储管理、创建和查找块。
  • MetricsSystem:监控运行时性能指标信息。
  • SparkConf:负责存储配置信息。

2.11 Spark的整体流程

client提交应用,Master找到一个Worker启动Driver,Driver向Master或者向资源管理器申请资源,之后将应用转化为RDD Graph,再由DAGScheduler将RDD Graph转化为Stage的有向无环图提交给TaskScheduler,由TaskScheduler提交任务给Executor执行。在任务执行的过程中,其他组件协同工作,确保整个应用顺利执行。

一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark中的基本概念 的相关文章

  • Scala 中的 Apply 和 lambda

    我有下面的代码 scala gt val builder new StringBuilder foo bar baz builder StringBuilder foo bar baz scala gt 0 until 5 foreach
  • Scala:将整个列表的 Either 与每个元素的 Either 组合

    我有一个 Either 列表 它代表错误 type ErrorType List String type FailFast A Either ErrorType A import cats syntax either val l List
  • 如何向数据框spark添加标题和列?

    我有一个数据框 我想在其中添加标题和第一列 手动 这是数据框 import org apache spark sql SparkSession val spark SparkSession builder master local appN
  • 如何在Scala中表达这个类型?存在类型类(即隐式)限制吗?

    我正在使用 Play 框架的 JSON 库 它使用类型类来实现Json toJson功能 http www playframework org documentation api 2 0 4 scala index html play ap
  • 如何从java程序的main方法调用Scala程序的main方法?

    假设我在 Java 项目中有一个 Scala 类和一个 Java 类 scala 类如下所示 class Sam def main args Array String Unit println Hello 如何从同一项目中存在的 java
  • 如何使用 FS2 中的分类器函数对对象进行分组?

    我有一个无序的流measurements 我想将其分组为固定大小的批次 以便以后可以有效地保留它们 val measurements for id lt Seq foo bar baz value lt 1 to 5 yield id va
  • Build.scala中%和%%符号含义

    我是新来玩的 Framework 2 1 java版本 并且没有scala经验 我不明白什么是以及什么是 and 在 Build scala 中表示 我用谷歌搜索了它们但找不到它们的含义 在我的 Build scala 文件中 我有 org
  • Scala 匿名函数中的 return 语句

    为什么显式 return 语句 使用return关键字 在匿名函数中从封闭的命名函数返回 而不仅仅是从匿名函数本身返回 例如 以下程序会导致类型错误 def foo String x Integer gt return x foo 我知道建
  • 如何在 Spark 数据帧 groupBy 中执行 count(*)

    我的目的是做相当于基本sql的事情 select shipgrp shipstatus count cnt from shipstatus group by shipgrp shipstatus 我见过的 Spark 数据帧的示例包括其他列
  • Jack(Java Android 编译器套件)将如何影响 Scala 开发人员

    现在随着公告Jack https source android com source jack html谷歌阐明了 Java 与 Android 相关的可预见的未来 但这对 Scala 和其他基于 JVM 的语言开发人员有何影响 尤其 Sc
  • xsbt 插件 1.0.0-M7 和 scalatra

    我尝试在我的 scalatra 项目中将 xsbt 插件升级到 1 0 0 M7 但 scalatra 似乎与此版本不兼容 当我尝试重新加载项目时 出现以下错误 我尝试过 scalatra 2 3 0 版本 问候 德斯 java lang
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • Map 和 Set 的实际类(不是抽象类,也不是特征类)是什么?

    在 Scala 中 映射和集合文字可以通过以下方式创建 val m Map 1 gt a 以及引用的类型m字面意思都是Map Int String 然而 scala文档表明Map实际上是一个特征 具有需要实现才能实例化的抽象成员 scala
  • 如何从DataFrame中获取最后一行?

    我有一个DataFrame 该DataFrame有两列 value 和 timestamp timestmp 是有序的 我想获取DataFrame的最后一行 我该怎么办 这是我的输入 value timestamp 1 1 4 2 3 3
  • 一般处理枚举的 Scala 类

    我想创建一个通用类来保存枚举的值 并且还允许访问枚举的可能值 以属性编辑器为例 您需要知道属性的当前值 并且还需要能够知道该属性的其他合法值 并且枚举的类型不应该提前知道 您应该能够使用任何类型的枚举 我的第一个想法是这样的 class E
  • 使用 lift-json 反序列化具有 Map[String,Any] 属性的案例类

    几天来我一直在努力解决一些通过 lift json 应该很简单的事情 将映射序列化为 JSON 我知道 我知道 根对象还不能是 List 或 Map 但我愿意暂时包装在一个案例类中 但我仍然无法让它工作 感谢一些堆栈溢出帮助 我已经可以进行
  • Spark 和 Scala 中的文本操作

    这是我的数据 review text The product picture and part number match but they together do not math the description review text A
  • 使一个 sbt 配置依赖于另一个配置

    sbt 文档显示了如何仅在项目之间声明依赖关系的示例 但我确信有方法可以声明一个配置依赖于另一个配置 就像测试配置使用编译配置中的类路径一样 如何声明我自己的配置 以便它依赖于编译配置生成的类路径 我更仔细地研究了建议的解决方案 然后又出现
  • 在“GROUP BY”子句中重用选择表达式的结果?

    在 MySQL 中 我可以有这样的查询 select cast from unixtime t time Y m d H 00 as datetime as timeHour from some table t group by timeH
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回

随机推荐

  • mysql语法之update

    Update 语句 1 作用 Update 语句用于修改表中的数据 语法 UPDATE 表名称 SET 列名称 新值 WHERE 列名称 某值 1 建表语句 create table table1 idd varchar 10 val va
  • Python自学第十一天——Bug

    作为新手自学Python的第十一天 技术低微 希望可以通过这种方式督促自己学习 个人学习环境 python3 9 PyCharm 2021 3 2 Community Edition 本文仅做Bug基本知识梳理和简单解决方法简述 具体Bug
  • 解释二叉树深度和高度

    今天小伙伴在群里问到 面试官问这个问题 我第一印象 这不是一回事吗 去查了查 竟然还真有区别 所以在此记录一下 高度和深度是相反的表示 深度是从上到下数的 而高度是从下往上数 我们先来看看高度和深度的定义 某节点的深度是指从根节点到该节点的
  • vmware中虚拟机网络使用NAT模式,使外部主机可以连接

    将虚拟机网络类型配置成 注意 如果不知道什么原因无法访问网络 关闭所有虚拟机 点击还原默认设置 重置网络 vmware点击 编辑 gt 虚拟网络编辑器 点击NAT设置可以查看NAT网络的网关 点击DHCP设置 应该不需要 因为我用的是静态I
  • 【独家源码】ssm科普网站14o1y计算机毕业设计问题的解决方案与方法

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 系统的选题背景和意义 选题背景 科学普及是推动科学知识传播和科学素养提升的重要途径 随着互联网的快速发展 科普网站成为了人们获取科学知识和信息
  • Mat使用笔记

    一 基本操作 1 1 创建 cv Mat初识和它的六种创建方法 cv Mat matDes nHEIGHT nWID CV 8UC1 cv Scalar 0 创建 row 高 col 宽 cv Mat matDes cv Mat zeros
  • 【pytorch优化器】Adam优化算法详解

    转载自 https blog csdn net weixin 39228381 article details 108548413 仅作学习记录 文章目录 一 说明 二 Adam原理 1 梯度滑动平均 2 偏差纠正 3 Adam计算过程 三
  • 【OpenGL进阶】01.使用Shader绘制三角形

    在前一个阶段的文章中 主要是使用OpenGL的固定管线来实现了一系列的操作 内容并不复杂 十分好理解 接下来的进阶系列中 我们将使用shader代码来实现一些效果 首先通过shader来实现一个三角形的绘制 首先来看main cs 创建窗口
  • 老域名扫描软件-老域名采集挖掘工具

    老域名挖掘软件 老域名挖掘软件是一种可以帮助用户发现已过期或未续费的老域名的工具 以下是该软件主要特点 大数据分析 该软件通过大数据分析技术 深度挖掘互联网上的闲置老域名 发现可用的未续费或已过期域名 从而为用户提供更多的域名选择 全网搜索
  • Android studio 3.2 升级详解及Gradle配置

    一直在使用Android studio 2 3 1版本 因为工作开发使用的都是这个版本 所以在经历了N次提示更新后 依旧还是没有升级 直到今天终于忍不住了 因为Android Studio 3 2版本在这个月发布了 增加了很多新特性 具体参
  • halcon 测量

    dev set draw margin dev set line width 3 创建包含了检测的边缘ROI区域 注意所画的矩形区域的长轴要与检测边界垂直 Row 599 5 Column 1073 5 Phi rad 87 0643 Le
  • oracle number17,2018-10-17 oracle 常用语法函数总结

    1 Oracle正则匹配使用 PS 这条SQL可以通过正则匹对查询一下 表A的字段a是否有非数字的数据 有时候数据表的一些字段是varchar类型的 如果sql里用to number的话 就肯定会报无效数字的错误 select from 表
  • VS2008下的配置opencv

    openCV 2 2以及2 2以下版本 不自带编译好的dll动态库和lib静态库文件 其中的bin和lib都是未经编译的 还不能直接使用的 因此需要进行下载CMake来对于Opencv源代码进行重新编译 才能得到最终的dll和lib库文件
  • 本人亲自整理的极客时间设计模式之美下部的硬核笔记(残缺版)最近加班太多,搞不了太多,只能尽量了xd们

    设计模式之美 下 https www yuque com zcming123 uygxde cbwnad 这位猿 三连 再走吧 以下内容是为了让搜索引擎 检测到这篇文章 要阅读体验 请点击上面的连接 点击我 去我的语雀看 对了 我看到语雀那
  • Spring Boot 基础知识

    概述 什么是 Spring Boot Spring Boot 是 Spring 开源组织下的子项目 是 Spring 组件一站式解决方案 主要是简化了使用 Spring 的难度 简省了繁重的配置 提供了各种启动器 开发者能快速上手 Spri
  • STM32F103系列定时器通道对应IO汇总

    1 通用定时器 TIM2 Default Remap CH1 ETR PA0 PA15 CH2 PA1 PB3 CH3 PA2 PB10 CH4 PA3 PB11 TIM3 Default Remap CH1 PA6 PB4 PC6 CH2
  • 在Windows服务器上搭建Nuget私人服务器(超~详细)

    在Windows服务器上搭建Nuget私人服务器 一 使用VS2017 VS2019新建空白解决方案 操作如图 步骤一 这里以VS2019为例 打开VS2019 选择 创建新项目 选项 步骤二 选择 空白解决方案 点击 下一步 步骤三 填写
  • React中setState()更新状态的两种写法及相关问题

    1 setState updater callback 函数式的setState updater是一个返回stateChange对象的函数 如下代码所示 它接收的state和props都保证为最新 updater的返回值会与state进行浅
  • 关于Socket编程中的inet_ntop、inet_pton和inet_ntoa、inet_addr

    VS2013中调试Socket代码时 遇到了点小问题 问题代码为 cpp view plain copy inet ntoa addrClient sin addr 生成错误消息为 plain view plain copy error C
  • Spark中的基本概念

    Spark中的基本概念 1 基本概念 1 1 RDD 弹性分布式数据集 1 2 DAG 有向无环图 1 3 Partition 数据分区 1 4 NarrowDependency 窄依赖 1 5 ShuffleDependency 宽依赖