Spark 注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集 群运行模式。部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行;当以分布式集群部署的时候,可以根据自己集群的实际情况选择 Standalone 模式(Spark 自带的模式)、YARN-Client 模式或者 YARN-Cluster 模式。Spark 的各种运行模式 虽然在启动方式、运行位置、调度策略上各有不同,但它们的目的基本都是一致的,就是在 合适的位置安全可靠的根据用户的配置和 Job 的需要运行和管理 Task。 

1、Spark On StandAlone 运行过程 

Standalone 模式是 Spark 实现的资源调度框架,其主要的节点有 Client 节点、Master 节点和 Worker 节点。其中 Driver 既可以运行在 Master 节点上中,也可以运行在本地 Client 端。当 用 spark-shell 交互式工具提交 Spark 的 Job 时,Driver 在 Master 节点上运行;当使用 spark-submit.sh 工具提交 Application 或者在 Eclipes、IDEA 等开发平台上使用 new SparkConf().setMaster(“spark://master:7077”)方式运行 Spark 任务时,Driver 是运行在本地 Client 端上的。 

运行过程文字说明 

1、我们提交一个任务,任务就叫 Application 
 
2、初始化程序的入口 SparkContext:   2.1 初始化 DAG Scheduler 2.2 初始化 Task Scheduler 
 
3、Task Scheduler 向 master 去进行注册并申请资源(CPU Core 和 Memory) 
 
4、Master 根据 SparkContext 的资源申请要求和 Worker 心跳周期内报告的信息决定在哪个 Worker 上分配资源,然后在该 Worker 上获取资源,然后启动 StandaloneExecutorBackend; 顺便初始化好了一个线程池 
 
5、StandaloneExecutorBackend 向 Driver(SparkContext)注册,这样 Driver 就知道哪些 Executor 为他进行服务了。到这个时候其实我们的初始化过程基本完成了,我们开始执行 transformation 的代码,但是代码并不会真正的运行,直到我们遇到一个 action 操作。生成 一个 job 任务,进行 stage 的划分 
 
6、SparkContext 将 Applicaiton 代码发送给 StandaloneExecutorBackend;并且 SparkContext 解析 Applicaiton 代码,构建 DAG 图,并提交给 DAG Scheduler 分解成 Stage(当碰到 Action 操作时,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shuffle 之前产生) 
 
7、将 Stage(或者称为 TaskSet)提交给 Task Scheduler。Task Scheduler 负责将 Task 分配到相 应的 Worker,最后提交给 StandaloneExecutorBackend 执行 
 
8、对 task 进行序列化,并根据 task 的分配算法,分配 task 
 
9、对接收过来的 task 进行反序列化,把 task 封装成一个线程 

10、开始执行 Task,并向 SparkContext 报告,直至 Task 完成 
 
11、资源注销 

Spark----Spark 在不同集群中的架构

2、Spark On YARN 运行过程 

YARN 是一种统一资源管理机制,在其上面可以运行多套计算框架。目前的大数据技术世界, 大多数公司除了使用 Spark 来进行数据计算,由于历史原因或者单方面业务处理的性能考虑 而使用着其他的计算框架,比如 MapReduce、Storm 等计算框架。Spark 基于此种情况开发 了 Spark on YARN 的运行模式,由于借助了 YARN 良好的弹性资源管理机制,不仅部署 Application更加方便,而且用户在YARN集群中运行的服务和Application的资源也完全隔离, 更具实践应用价值的是 YARN 可以通过队列的方式,管理同时运行在集群中的多个服务。 
 
Spark on YARN 模式根据 Driver 在集群中的位置分为两种模式:

一种是 YARN-Client 模式 

Spark----Spark 在不同集群中的架构

一种是 YARN-Cluster(或称为 YARN-Standalone 模式),不过不能启动到 spark-shell,只能在 spark-submit 提交任务的时候才能使用 

Spark----Spark 在不同集群中的架构

2.1、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 申请注销并关闭自己。

Spark----Spark 在不同集群中的架构

2.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 申请注销并关闭自己。 

Spark----Spark 在不同集群中的架构

2.4、YARN-Client 和 YARN-Cluster 区别 

理解 YARN-Client 和 YARN-Cluster 深层次的区别之前先清楚一个概念:ApplicationMaster。在 YARN 中,每个 Application 实例都有一个 ApplicationMaster 进程,它是 Application 启动的第 一个容器。它负责和 ResourceManager 打交道并请求资源,获取资源之后告诉 NodeManager 为其启动 Container。从深层次的含义讲 YARN-Cluster 和 YARN-Client 模式的区别其实就是 ApplicationMaster 进程的区别。 

1、YARN-Cluster 模式下,Driver 运行在 AM(Application Master)中,它负责向 YARN 申请资源, 并监督作业的运行状况。当用户提交了作业之后,就可以关掉 Client,作业会继续在 YARN 上运行,因而 YARN-Cluster 模式不适合运行交互类型的作业; 

2、YARN-Client 模式下,ApplicationMaster 仅仅向 YARN 请求 Executor,Client 会和请求的 Container 通信来调度他们工作,也就是说 Client 不能离开。 

Spark----Spark 在不同集群中的架构

Spark----Spark 在不同集群中的架构

Spark----Spark 在不同集群中的架构

Spark----Spark 在不同集群中的架构

 


 

相关文章:

  • 2022-01-17
  • 2021-09-20
  • 2021-05-29
  • 2022-12-23
  • 2021-05-04
  • 2021-08-11
  • 2021-06-19
  • 2021-04-27
猜你喜欢
  • 2021-07-12
  • 2021-06-28
  • 2022-01-08
  • 2022-12-23
  • 2021-08-12
  • 2021-06-21
相关资源
相似解决方案