`
m635674608
  • 浏览: 5042466 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spark1.0.0 运行架构基本概念

 
阅读更多
Spark Application的运行架构由两部分组成:driver program(SparkContext)和executor。Spark Application一般都是在集群中运行,比如Spark Standalone、YARN、mesos,这些集群给Spark Applicaiton提供了计算资源和这些资源管理,这些资源既可以给executor运行,也可以给driver program 运行。根据Spark Application的driver program是否在资源集群中运行,Spark Application的运行方式又可以分为Cluster模式和Client模式。Spark1.0.0提供了一个Spark Appliaction的部署工具bin/spark-sumbit,具体用法参见Spark1.0.0 应用程序部署工具spark-submit。下面介绍一下Spark1.0.0 运行架构中的基本概念、Standalone中运行过程、YARN中运行过程。
 

1:基本术语

  • Application: 基于Spark的用户程序,包含了一个driver program 和 集群中多个的executor
  • Driver Program :运行Application的main()函数并且创建SparkContext,通常用SparkContext代表Driver Program
  • Executor: 是为某Application运行在worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都有各自独立的executors。
  • Cluster Manager: 在集群上获取资源的外部服务(例如:Standalone、Mesos、Yarn)
  • Worker Node: 集群中任何可以运行Application代码的节点
  • Task: 被送到某个executor上的工作单元
  • Job: 包含多个Task组成的并行计算,往往由Spark action催生,该术语可以经常在日志中看到。
  • Stage: 每个Job会被拆分很多组task,每组任务被称为Stage,也可称TaskSet,该术语可以经常在日志中看到。
  • RDD:Spark的基本计算单元,可以通过一系列算子进行操作(主要有Transformation和Action操作),详情见RDD 细解Spark1.0.0 编程模型
  • DAG Scheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler,详见DAG Scheduler 细解
  • TaskScheduler:将Taskset提交给worker(集群)运行并回报结果,详见TaskScheduler 细解
关于Application中的几个概念可如下图所示:
 
2:Spark运行架构
Spark运行架构参见下面示意图:
  • 构建Spark Application的运行环境(启动SparkContext)
  • SparkContext向资源管理器(可以是Standalone、Mesos、Yarn)申请运行Executor资源,并启动StandaloneExecutorBackend,executor向SparkContext申请Task。
  • SparkContext将应用程序代码发放给executor
  • SparkContext构建成DAG图、将DAG图分解成Stage、将Taskset发送给Task Scheduler、最后由Task Scheduler将Task发放给Executor运行。
  • Task在Executor上运行,运行完毕释放所有资源。
  下面简单的描述一下Spark on Standalone和Spark on YARN的运行过程,以后的篇幅中再具体描述。
 
3:Spark on Standalone运行过程(client模式)
  • SparkContext连接到Master,向Master注册并申请资源(CPU Core 和Memory)
  • Master根据SparkContext的资源申请要求和worker心跳周期内报告的信息决定在哪个worker上分配资源,然后在该worker上获取资源,然后启动StandaloneExecutorBackend。
  • StandaloneExecutorBackend向SparkContext注册
  • SparkContext将Applicaiton代码发送给StandaloneExecutorBackend;并且SparkContext解析Applicaiton代码,构建DAG图,并提交给DAG Scheduler分解成Stage(当碰到Action操作时,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shu f f le之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的worker,最后提交给StandaloneExecutorBackend执行;
  • StandaloneExecutorBackend会建立executor 线程池,开始执行Task,并向SparkContext报告,直至Task完成。
  • 所有Task完成后,SparkContext向Master注销,释放资源。
  • 关于Spark on Standalone的更详细信息参见Spark1.0.0 on Standalone 运行架构实例解析
   
4:Spark on YARN 运行过程(cluster模式)
  • 用户通过bin/spark-submit( Spark1.0.0 应用程序部署工具spark-submit)或 bin/spark-class 向YARN提交Application
  • RM为Application分配第一个container,并在指定节点的container上启动SparkContext。
  • SparkContext向RM申请资源以运行Executor
  • RM分配Container给SparkContext,SparkContext和相关的NM通讯,在获得的Container上启动StandaloneExecutorBackend,StandaloneExecutorBackend启动后,开始向SparkContext注册并申请Task
  • SparkContext分配Task给StandaloneExecutorBackend执行
  • StandaloneExecutorBackend执行Task并向SparkContext汇报运行状况
  • Task运行完毕,SparkContext归还资源给NM,并注销退出。
  • 关于Spark on Standalone的更详细信息参见Spark1.0.0 on YARN 运行架构实例解析
  
5:Spark运行架构的特点
  • 每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行tasks。这种Application隔离机制有其优势的,无论是从调度角度看(每个Driver调度它自己的任务),还是从运行角度看(来自不同Application的Task运行在不同的JVM中)。当然,这也意味着Spark Application不能跨应用程序共享数据,除非将数据写入到外部存储系统。
  • Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了。
  • 提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换;如果想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。
  • Task采用了数据本地性和推测执行的优化机制。详见TaskScheduler 细解

http://blog.csdn.net/book_mmicky/article/details/25714419

分享到:
评论

相关推荐

    spark1.0.0源码

    Spark 1.0.0是Apache Spark的第一个稳定版本,它在大数据处理领域具有重要的里程碑意义。这个版本引入了许多关键特性和改进,使得Spark在速度、易用性和可伸缩性方面都有显著提升。以下是关于Spark 1.0.0源码的一些...

    Spark 1.0.0 API (java)

    虽然Spark 1.0.0的核心是RDD,但已经引入了DataFrame的概念,提供了更高级的SQL查询功能。DataFrame是基于RDD的抽象,提供了类似SQL的API来操作结构化数据。 ```java JavaSparkContext jsc = new JavaSparkContext...

    Spark 1.0.0 API(Scala)

    **Spark 1.0.0 API(Scala)详解** Spark是一个快速、通用且可扩展的大数据处理框架,它提供了一套强大的API,使得开发者能够高效地处理大规模数据。在Spark 1.0.0版本中,它引入了对Scala语言的深度支持,使得开发...

    sdk-bsp-stm32f407-spark-1.0.0.zip

    星火1号离线SDK:sdk-bsp-stm32f407-spark-1.0.0.zip

    飞腾+麒麟sp1-openssl1.0.0资源包

    综合以上信息,我们可以得出,这个资源包是为在飞腾处理器上运行麒麟V10sp1系统的用户准备的,目的是提供OpenSSL 1.0.0的库文件以及MariaDB运行所需的依赖,以确保安全的网络通信和数据库服务。用户在安装和配置这类...

    Obsidian 1.0.0版本下载

    Obsidian 1.0.0版本下载

    lwip1.0.0 协议栈

    ### lwip1.0.0架构 lwip1.0.0采用了分层的体系结构,主要包括以下几个部分: 1. **应用接口(API)层**:提供给应用程序调用的接口,如socket函数,用于创建、绑定、监听、连接、发送和接收数据。 2. **网络接口...

    libhadoop.so.1.0.0 64位官方完整版 附带32位libhadoop.so.1.0.0文件

    首先,让我们了解libhadoop.so.1.0.0的基本概念。这是一个共享库文件,通常在Linux环境下使用,它包含了C/C++编译的代码,使得Java程序可以调用底层操作系统的一些功能,如文件系统操作、网络通信等。Hadoop作为一个...

    wireshark-1.0.0源码

    wireshark-1.0.0源码 wireshark-1.0.0源码

    libssl.so.1.0.0

    libssl.so.1.0.0

    torch-1.0.0

    Tensors是构建神经网络的基本元素,可以在CPU和GPU上无缝运行。此版本对Tensor的API进行了改进,使其更符合Python用户的习惯,同时增加了更多的操作符,如索引、切片和广播机制,使得数据处理更加灵活高效。 此外,...

    libcrypto.so.1.0.0

    libcrypto.so.1.0.0

    aurelia-loader-1.0.0-rc.1.0.0.zip

    标题 "aurelia-loader-1.0.0-rc.1.0.0.zip" 提供的信息表明,这个压缩包包含的是 Aurelia 框架的一个加载器版本,具体是 1.0.0 发行候选版(Release Candidate)1.0.0。Aurelia 是一个现代化的JavaScript前端框架,...

    jsVideoPlugin-1.0.0.min

    jsVideoPlugin-1.0.0.min 必备的三件套之一

    starrocks-spark-connector

    Spark Starrocks 批量写入,完美适配spark3.12

    密码生成器 GetPassword v1.0.0

    密码生成器 GetPassword v1.0.0 主要功能 v1.0.0: ... ... ... ...1、绿色版本,无需任何安装直接使用,不写...2、本程序采用vb.net 2005开发,使用之前请确认您的计算机是否安装有.NET Framework 2.0以上的版本,否则无法运行。

    rocketmq-console-ng-1.0.0.zip

    总结来说,"rocketmq-console-ng-1.0.0.zip"是一个包含RocketMQ Console管理控制台的压缩包,主要文件"rocketmq-console-ng-1.0.0.jar"是一个Java可执行文件,用于运行RocketMQ的图形化管理界面。使用这个控制台,...

Global site tag (gtag.js) - Google Analytics