通过对spark core的核心概念学习,可以更好的了解spark的运行机制和生命周期
基本概念:
Application:
spark应用程序,一个应用程序由一个driver进程和一些executor进程组成。
Application jar:
包含我们自己编写的spark应用程序的jar包,我们编写的程序打成的jar包不应该包含Hadoop和Spark的类库,这些jar包在运行时会被自动添加。
Driver program:
它是进程级别的,driver会运行应用程序的main() 方法,并创建一个SparkContext。
Cluster manager:
用于获取集群资源的外部服务,若为standalone则为master,yarn模式则为resourcemanager。
Deploy mode:
分为两种,一种是cluster模式,该模式下应用程序的driver进程会运行在集群内部;另一种是client模式,此模式下driver进程会运行在集群外。
Worker node:
工作节点,若为standalone模式,则工作节点为worker,若为yarn模式,则工作节点为nodemanager。
Executor:
在工作节点上为应用程序启动的进程,一个executor可以运行多个task,并且把数据缓存在内存或这磁盘中,每一个应用程序有多个executor。
Job:
并行的包含多个task的计算任务,它在遇到action时被触发,也就是说,一个application可能会有多个job任务。
Stage:
每一个作业都会被拆分成包含一部分task的集合,这样的集合被称为stage,遇到shuffle时会产生。
Spark运行过程概述
Spark程序,主要由Driver端的SparkContext对象进行协调。具体来说,SparkContext可以连接到多种类型的集群管理器上,由这些集群管理器在应用程序之间分配资源。一旦连接上,Spark就会获得executors,这些executors运行计算和缓存数据。
关于此架构有几点说明:
1、每一个spark应用程序都有自己的executors进程,这些executors在整个应用程序的生命周期内都是存活的,并以多线程的方式运行task。每一个application都会把各自的executors隔离起来,这样做利于在调度端和执行程序端相互隔离应用程序。但缺点是不同的spark应用程序之间不能共享数据。
2、Spark对于运行的集群管理者是不认知的(无论是master还是resourcemanager),一旦拿到executor进程后,就可以进行交互了,一种模式的代码可以同时支持其他模式下运行。
3、Driver program必须监听和接受从其他executors传来的连接和存活时间等信息,因此,我们的driver program必须能和工作节点连接通。
4、Driver program是在集群中调度tasks的,driver要尽可能的靠近工作节点,最好是在同一个网段。
关于Spark On Yarn的一点见解:
采用yarn模式有许多好处,首先不需要搭建spark集群,只需找一到两台机器部署spark当作客户端即可。因此修改了配置参数只需修改一两台的即可,不用维护整个spark集群。
这里说明一下为什么是一到两台?
yarn-client模式提交作业的话,作业的Driver端是运行在客户端的,且driver启动需要core和memory资源,提交作业过多,会导致spark所在机器资源不足,无法继续提交。