Spark 在不同集群中的运行架构

转载地址:http://www.cnblogs.com/shishanyuan/archive/2015/08/19/4721326.html
Spark 在不同集群中的运行架构
Spark 注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集群运行模式。部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行;当以分布式集群部署的时候,可以根据自己集群的实际情况选择Standalone模式(Spark 自带的模式)、YARN-Client 模式或者YARN-Cluster 模式。Spark 的各种运行模式虽然在启动方式、运行位置、调度策略上各有不同,但它们的目的基本都是一致的,就是在合适的位置安全可靠的根据用户的配置Job 的需要运行和管理Task。
Spark on Standalone 运行过程
Standalone 模式是Spark 实现的资源调度框架,其主要的节点有Client 节点、Master 节点和Worker 节点。其中Driver 既可以运行在Master 节点上中,也可以运行在本地Client 端。当用spark-shell 交互式工具提交Spark 的Job 时,Driver 在Master 节点上运行;当使用spark-submit 工具提交Job 或者在Eclipse 、IDEA 等开发平台上使用” newSparkConf.setManager
(“spark://master:7077”)”方式运行Spark 任务时,Driver 是运行在本地Client 端上的。
其运行过程如下:
1.SparkContext 连接到Master,向Master 注册并申请资源(CPU Core 和Memory);
2.Master 根据SparkContext 的资源申请要求和Worker 心跳周期内报告的信息决定在哪个Worker 上分配资源,然后在该Worker 上获取资源,然后启动StandaloneExecutorBackend;
3.StandaloneExecutorBackend 向SparkContext 注册;
4.SparkContext 将Applicaiton 代码发送给StandaloneExecutorBackend;并且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 注销,释放资源。
在这里插入图片描述
Spark on YARN 运行过程
YARN 是一种统一资源管理机制,在其上面可以运行多套计算框架。目前的大数据技术世界,大多数公司除了使用Spark 来进行数据计算,由于历史原因或者单方面业务处理的性能考虑而使用着其他的计算框架,比如MapReduce、Storm 等计算框架。Spark 基于此种情况开发了Spark on YARN 的运行模式,由于借助了YARN 良好的弹性资源管理机制,不仅部署Application 更加方便,而且用户在YARN 集群中运行的服务和Application 的资源也完全隔离,更具实践应用价值的是YARN 可以通过队列的方式,管理同时运行在集群中的多个服务。Spark on YARN 模式根据Driver 在集群中的位置分为两种模式:一种是YARN-Client 模式,另一种是YARN-Cluster(或称为YARN-Standalone 模式)。
1 YARN 框架流程
任何框架与YARN 的结合,都必须遵循YARN 的开发模式。在分析Spark on YARN 的实现细
节之前,有必要先分析一下YARN 框架的一些基本原理。
Yarn 框架的基本运行流程图为:
在这里插入图片描述
其中,ResourceManager 负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container 中执行,并使用Container 封装的资源。NodeManager 是一个个的计算节点,主要负责启动Application 所需的Container,监控资源( 内存、CPU 、磁盘和网络等) 的使用情况并将之汇报给ResourceManager 。ResourceManager 与NodeManagers 共同组成整个数据计算框架,ApplicationMaster 与具体的Application 相关,主要负责同ResourceManager 协商以获取合适的Container,并跟踪这些Container 的状态和监控其进度。
2 YARN-Client
Yarn-Client 模式中,Driver 在客户端本地运行,这种模式可以使得Spark Application 和客户端进行交互,因为Driver 在客户端,所以可以通过webUI 访问Driver 的状态,默认是http://hadoop1:4040 访问,而YARN 通过http:// hadoop1:8088 访问。YARN-client 的工作流程分为以下几个步骤:
在这里插入图片描述
1.Spark Yarn Client 向YARN 的ResourceManager 申请启动Application Master。同时在SparkContent 初始化中将创建DAGScheduler 和TASKScheduler 等,由于我们选择的是Yarn-Client 模式,程序会选择YarnClientClusterScheduler 和YarnClientSchedulerBackend;
2.ResourceManager 收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container , 要求它在这个Container 中启动应用程序的ApplicationMaster , 与YARN-Cluster 区别的是在该ApplicationMaster 不运行SparkContext,只与SparkContext 进行联系进行资源的分派;
3.Client 中的SparkContext 初始化完毕后, 与ApplicationMaster 建立通讯, 向ResourceManager 注册,根据任务信息向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 申请注销并关闭自己。
3 YARN-Cluster
在YARN-Cluster 模式中,当用户向YARN 中提交一个应用程序后,YARN 将分两个阶段运
行该应用程序:第一个阶段是把Spark 的Driver 作为一个ApplicationMaster 在YARN 集群
中先启动;第二个阶段是由ApplicationMaster 创建应用程序,然后为它向ResourceManager
申请资源,并启动Executor 来运行Task,同时监控它的整个运行过程,直到运行完成。
YARN-cluster 的工作流程分为以下几个步骤:
在这里插入图片描述

  1. Spark Yarn Client 向YARN 中提交应用程序, 包括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 申请注销并关闭自己。
    4 YARN-Client 与YARN-Cluster 区别
    理解YARN-Client 和YARN-Cluster 深层次的区别之前先清楚一个概念:Application Master。在YARN 中,每个Application 实例都有一个ApplicationMaster 进程,它是Application 启动的第一个容器。它负责和ResourceManager 打交道并请求资源, 获取资源之后告诉NodeManager 为其启动Container。从深层次的含义讲YARN-Cluster 和YARN-Client 模式的区别其实就是ApplicationMaster 进程的区别。YARN-Cluster 模式下,Driver 运行在AM(Application Master)中,它负责向YARN 申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster 模式不适合运行交互类型的作业;YARN-Client 模式下,Application Master 仅仅向YARN 请求Executor,Client 会和请求的Container 通信来调度他们工作,也就是说Client 不能离开Container。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值