Spark相关概念及工作流

Spark整体架构:

Spark在分布式环境中的架构

在分布式环境下,Spark集群采用的是主从结构。在一个Spark程序中,有一个节点负责中央协调,调度各个分布式工作节点,这个中央协调节点被称为驱动器(Driver)节点,与之对应的工作节点被称为执行器( executor)节点。驱动器节点可以和大量执行器节点进行通信,它们也都作为独立的java程序运行。驱动器节点和和所有的执行器节点一起被称为一个Spark应用(application)。Spark应用通过一个集群管理器的外部服务再集群的机器上启动(如:Hadoop Yarn)

驱动器节点

Spark驱动器是执行程序中main()方法的进程。它执行用户编写的用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作的代码。

驱动器程序在Spark应用中有以下两个职责

  • 把用户程序转为任务:
    Spark驱动器程序负责把用户程序转换成多个物理执行的单元(task)。从上层看,所有的Spark程序都遵循同样的结构:程序从输入数据创建一系列RDD,再使用转化操作派生出新的RDD,最后使用行动操作收集或存储结果RDD中的数据。Spark程序其实是隐式的创建出了一个由操作组成的逻辑上的有向无环图(DAG)。当驱动器程序运行时,它会把这个逻辑图转为物理执行计划。
  • 为执行器节点调度任务:
    有了物理执行计划后,Spark驱动器程序必须在各执行器进程协调任务的调度。执行器进程启动后会向驱动器进程注册自己。因此驱动器进程始终对应用中的所有执行器节点有完整的记录。每个执行器节点代表一个能够处理任务和存储RDD数据的进程。

Spark驱动器程序会根据当前的执行器节点集合,尝试把所有任务基于数据所在位置分配给合适的执行器程序。当任务执行时,执行器进程会把缓存数据存储起来,而驱动器进程同样跟踪这些缓存数据的位置,并且利用这些位置信息来调度以后的任务,以尽量减少数据的网络传输。

执行器节点

Spark 执行器节点是一种工作进程,负责在 Spark 作业中运行任务,任务间相互独立。

Spark 应用启动时, 执行器节点就被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有执行器节点发生了异常或崩溃, Spark 应用也可以继续执行。执行器进程有两大作用: 第一,它们负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;第二,它们通过自身的块管理器( Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。 RDD 是直接缓存在执行器进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容