深入理解 Spark(一)spark 运行模式简介与启动流程源码分析

这篇具有很好参考价值的文章主要介绍了深入理解 Spark(一)spark 运行模式简介与启动流程源码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

spark 的运行模式

standalone 模式

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式
以 standalone-client 为例,运行过程如下:
深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

  1. SparkContext 连接到 Master,向 Master 注册并申请资源(CPU Core 和 Memory);
  2. Master 根据 SparkContext 的资源申请要求和 Worker 心跳周期内报告的信息决定在哪个 Worker 上分配资源,然后在该 Worker 上获取资源,然后启动 StandaloneExecutorBackend;
  3. StandaloneExecutorBackend 向 SparkContext 注册;
  4. SparkContext 解析 Applicaiton 代码,构建 DAG 图,并提交给 DAG Scheduler 分解成 Stage(当碰到 Action 操作时,就会催生 Job;每个 Job 中含有 1 个或多个 Stage,Stage 一般在获取外部数据和 shuffle 之前产生),然后以 Stage(或者称为 TaskSet)提交给 Task Scheduler,Task Scheduler 负责将 Task 分配到相应的 Worker,交给 StandaloneExecutorBackend 执行;
  5. StandaloneExecutorBackend 会建立 Executor 线程池,开始执行 Task,并向 SparkContext 报告,直至 Task 完成;
  6. 所有 Task 完成后,SparkContext 向 Master 注销,释放资源。

yarn 模式

yarn-client 模式

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

  1. Spark Yarn Client 向 YARN 的 ResourceManager 申请启动 ApplicationMaster。同时在 SparkContent 初始化中将创建 DAGScheduler 和 TaskScheduler 等。由于我们选择的是 Yarn-Client 模式,程序会选择 YarnClientClusterScheduler 和 YarnClientSchedulerBackend。
  2. ResourceManager 收到请求后,在集群中选择一个 NodeManager,为该应用程序分配第一个 Container,要求它在这个 Container 中启动应用程序的 ApplicationMaster。与 YARN-Cluster 的区别在在于该 ApplicationMaster 不运行 SparkContext,只与 SparkContext 进行联系进行资源的分派。
  3. Client 中的 SparkContext 初始化完毕后,与 ApplicationMaster 建立通讯,向 ResourceManager 注册,根据任务信息通过 ApplicationMaster 向 ResourceManager 申请资源(Container)。
  4. 一旦 ApplicationMaster 申请到资源(也就是 Container)后,便与对应的 NodeManager 通信,要求它在获得的 Container 中启动 CoarseGrainedExecutorBackend。CoarseGrainedExecutorBackend 启动后会向Client 中的 SparkContext 反向注册并申请 Task。
  5. client 中的 SparkContext 分配 Task 给 CoarseGrainedExecutorBackend 执行,CoarseGrainedExecutorBackend 运行 Task 并向 Driver 汇报运行的状态和进度,以让 Client 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
  6. 应用程序运行完成后,Client 的 SparkContext 向 ResourceManager 申请注销并关闭自己。

yarn-cluster 模式

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

  1. Spark Yarn Client 向 YARN RM 提交应用程序,包括 ApplicationMaster 程序、启动 ApplicationMaster 的命令、需要在 Executor 中运行的程序等。
  2. ResourceManager 收到请求后,在集群中选择一个 NodeManager,为该应用程序分配第一个 Container,要求它在这个 Container 中启动应用程序的 ApplicationMaster,其中 ApplicationMaster 进行 SparkContext 等的初始化。
  3. ApplicationMaster 向 ResourceManager 注册,这样用户可以直接通过 ResourceManage 查看应用程序的运行状态,然后它将采用轮询的方式通过 RPC 协议为各个任务申请资源,并监控它们的运行状态直到运行结束。
  4. 一旦 ApplicationMaster 申请到资源(也就是 Container)后,便与对应的 NodeManager 通信,要求它在获得的 Container 中启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 启动后会向 ApplicationMaster 中的 SparkContext 注册并申请 Task。这一点和 Standalone 模式一样,只不过 SparkContext 在 Spark Application 中初始化时,使用 CoarseGrainedSchedulerBackend 配合 YarnClusterScheduler 进行任务的调度,其中 YarnClusterScheduler 只是对 TaskSchedulerImpl 的一个简单包装,增加了对 Executor 的等待逻辑等。
  5. ApplicationMaster 中的 SparkContext 分配 Task 给 CoarseGrainedExecutorBackend 执行,CoarseGrainedExecutorBackend 运行 Task 并向 ApplicationMaster 汇报运行的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
  6. 应用程序运行完成后,ApplicationMaster 向 ResourceManager 申请注销并关闭自己。

Spark Client 和 Spark Cluster 的区别

  1. 理解 YARN-Client 和 YARN-Cluster 深层次的区别之前先清楚一个概念:ApplicationMaster。在 YARN 中,每个 Application 实例都有一个 ApplicationMaster 进程,它是 Application 启动的第一个容器。它负责和 ResourceManager 打交道并请求资源,获取资源之后告诉 NodeManager 为其启动 Container。从深层次的含义讲 YARN-Cluster 和 YARN-Client 模式的区别其实就是 ApplicationMaster 进程的区别。
  2. YARN-Cluster 模式下,Driver 运行在 AM(Application Master) 中,它负责向 YARN 申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉 Client,作业会继续在 YARN 上运行,因而 YARN-Cluster 模式不适合运行交互类型的作业。
  3. YARN-Client 模式下,Application Master 仅仅向 YARN 请求 Executor,Client 会和请求的 Container 通信来调度他们工作,也就是说 Client 不能退出。

spark 当中 RDD 的运行流程

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

spark standalone 集群通信框架

体系架构

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

启动过程

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

基于 netty 的 spark RPC 类继承结构

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

  1. 核心的 RpcEnv 是一个特质(trait),它主要提供了停止,注册,获取 endpoint 等方法的定义,而 NettyRpcEnv 提供了该特质的一个具体实现。
  2. 通过工厂 RpcEnvFactory 来产生一个 RpcEnv,而 NettyRpcEnvFactory 用来生成 NettyRpcEnv 的一个对象。
  3. 当我们调用 RpcEnv 中的 setupEndpoint 来注册一个 endpoint 到 rpcEnv 的时候,在 NettyRpcEnv 内部会将该 endpoint 的名称与其本身的映射关系,rpcEndpoint 与rpcEndpointRef 之间映射关系保存在 dispatcher 对应的成员变量中。
1. TransportContext 内部包含:TransportConf 和 RpcHandler
2. TransportConf 在创建 TransportClientFactory 和 TransportServer 都是必须的
3. RpcHandler 只用于创建 TransportServer
4. TransportClientFactory 是 Spark RPC 的客户端工厂类实现
5. TransportServer 是 Spark RPC 的服务端实现。创建的时候,需要 TransportContext 中的 TransportConf 和 RpcHandler。在 init 初始化的时候,由 TransportServerBootStrap 引导启动。
6. TransportClient 是 Spark RPC 的客户端实现。由 TransportClientFactory 创建,TransportClientFactory 在实例化的时候需要 TransportConf。TransportClient 创建好了之后,需要通过 TransportClientBootstrap 引导启动,创建好的 TransportClient 都会被维护在 TransportClientFactory 的 ClientPool 中。
7. ClientPool 是 TransportClientFactory 的内部组件,维护 TransportClient clientPool 池。TransportClientFactory 最重要的两个东西:
    1、提供了一个创建 RPC Client 的方法
    2、提供了一个管理 RPC Client 的组件
8. TransportServerBootStrap 是 Spark RPC 服务端 引导程序
9. TransportClientBootstrap 是 Spark RPC 客户端 引导程序
10. MessageEncoder 和 MessageDecoder 编解码器,存在于 TransportContext 的内部。可以集成多种不同的序列化机制。

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

spark standalone 集群启动脚本分析

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式

spark standalone 集群启动过程分析

深入理解 Spark(一)spark 运行模式简介与启动流程源码分析,大数据,spark,大数据,分布式文章来源地址https://www.toymoban.com/news/detail-785642.html

到了这里,关于深入理解 Spark(一)spark 运行模式简介与启动流程源码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解Spark编程中的map方法

    先上结论:不拘泥于形式,给一个东西,一顿操作,返回一个东西。且对每一条数据都相同的处理,处理完会生成新的东西,不改变之前你传进来的东西。        这个东西你可以理解为任何形式的数据,如map里的,对象,各种形式文件等等。  当深入理解 map 方法时,我们

    2024年01月24日
    浏览(38)
  • Spark运行模式介绍

    本质:启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*] 其中 N代表可以使用N个线程 ,每个线程拥有一个cpu core。如果不指定N, 则默认是1个线程(该线程有1个core)。 通常Cpu有几个Core,就指定

    2023年04月26日
    浏览(29)
  • Spark基础【五种运行模式】

    Spark作为一个数据处理框架和计算引擎,被设计在所有常见的集群环境中运行, 在国内工作中主流的环境为Yarn,不过逐渐容器式环境也慢慢流行起来。 容器式环境:发现集群规模不足够,会自动化生成所需要的环境,不需要多余集群机器时,也会自动删除 Spark运行环境 = Jav

    2024年02月01日
    浏览(25)
  • 【详解】Spark数据倾斜问题由基础到深入详解-完美理解-费元星

    数据倾斜定义:顾名思义,就是大量相似或相同数据聚集在一个块的节点里,导致计算和资源分配不均导致的计算缓慢(长尾)问题。 数据倾斜原因: count(distinct field) group by  NULL 空值 Shuffle (概率最高、发生最普遍的数据倾斜问题,本文重点讲述这个) ##########################

    2024年02月20日
    浏览(41)
  • Spark On Yarn的两种运行模式

    Spark On YARN是有两种运行模式:Cluster模式、Client模式 Cluster模式:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内。 Client模式即:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中。 Client模式详细流程 YARN Client模式下,Driver在任务提交的本地机器上运

    2024年02月02日
    浏览(50)
  • 【SparkSQL】SparkSQL的运行流程 & Spark On Hive & 分布式SQL执行引擎

    【大家好,我是爱干饭的猿,本文重点介绍、SparkSQL的运行流程、 SparkSQL的自动优化、Catalyst优化器、SparkSQL的执行流程、Spark On Hive原理配置、分布式SQL执行引擎概念、代码JDBC连接。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇

    2024年02月04日
    浏览(48)
  • [AIGC ~大数据] 深入理解Hadoop、HDFS、Hive和Spark:Java大师的大数据研究之旅

    作为一位Java大师,我始终追求着技术的边界,最近我将目光聚焦在大数据领域。在这个充满机遇和挑战的领域中,我深入研究了Hadoop、HDFS、Hive和Spark等关键技术。本篇博客将从\\\"是什么\\\"、\\\"为什么\\\"和\\\"怎么办\\\"三个角度,系统地介绍这些技术。 Hadoop Hadoop是一个开源的分布式计算

    2024年02月03日
    浏览(39)
  • 【Qt运行流程详解】从启动到事件循环的深入解读

    在探索 Qt 框架的神秘踪迹之前,让我们先来简要了解一下 Qt 以及为何深入其底层运行机制对于开发者至关重要。正如哲学家亚里士多德曾言:“知识的根源在于对事物的好奇。” 对于任何一名软件开发者而言,对所使用技术的好奇心及深入理解,是驱动其创新和提升技能的

    2024年01月23日
    浏览(40)
  • Spark系列(一)spark简介及安装配置

    目录 1. spark简介: 2. spark特点: 2.1 Speed:速度快 2.2 Easy of Use:易用性 2.3 Generality:通用性 2.4 Runs Everywhere:到处运行 3. Spark的应用场景 4. 环境要求及准备工作 5. spark搭建模式: 5.1 local模式在解压缩安装后 5.2 Standalone模式搭建(基于hdfs文件存储) 5.1.1 首先配置spark环境变量:

    2023年04月09日
    浏览(38)
  • 【spark】spark内核调度(重点理解)

    Spark的核心是根据RDD来实现的,Spark Scheduler则为Spark核心实现的重要一环,其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包