1. Spark执行数据计算的整个流程
首先通过Spark客户端提交任务到Spark集群,然后Spark任务在执行的时候会读取数据源HDFS中的数据,将数据加载到内存中,转化为RDD,然后针对RDD调用一些高阶函数对数据进行处理,中间可以调用多个高阶函数,最终把计算出来的结果数据写到HDFS中。
2. 什么是RDD
RDD通常通过Hadoop上的文件,即HDFS文件进行创建,也可以通过程序中的集合来创建
RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集
RDD的特点:
- 弹性:RDD数据默认情况下存放在内存中,但是在内存资源不足时,Spark也会自动将RDD数据写入磁盘
- 分布式:RDD在抽象上来说是一种元素数据的集合,它是被分区的,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作
- 容错性:RDD最重要的特性就是提供了容错性,可以自动从节点失败中恢复过来如果某个节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition的数据。
3. Standalone模式下的Spark架构
在Standalone模式下,在Spark集群中主要包含以下进程。
- Master: 在集群主节点中启动的进程,主要负责集群资源的管理和分配、集群的监控等。
- Worker:在集群从节点中启动的进程,主要负责启动Executor执行具体的数据处理和计算任务。
- Executor:此进程由Worker负责启动,主要用于执行数据处理 和计算任务。
- Driver:一个特殊的Executor进程,主要负责运行Spark程序的main()函数、创建Spark的上下文(SparkContext),生成并发送Task到Executor中等。
- Task:一个线程,又Executor负责启动,它是真正负责干活的。
工作原理:如果所示
(1)在Spark客户节点上启动Driver进程,创建SparkContext,开始执行spark代码。
(2)Driver进程启动后做一些初始化操作,它会找到集群的Master节点,对Spark任务进程注册。
(3)Master节点收到Spark任务的注册申请后,会发送请求给Worker节点,进行资源的调度和分配。
(4)Worker节点在收到Master节点的请求后,会为Spark任务启动Executor进程,会启动一个或多个Executor。具体启动多少,由任务的参数配置决定的
(5)Executor在启动之后,会向Driver进行反注册,这样Driver就知道哪些Executor在为它服务了。
(6)Driver会根据在spark任务中对RDD定义的操作,提交一堆的Task到Executor上执行。Task中执行的其实就是flatMap、map这些高阶函数。
4. ON YARN模式下的Spark架构
ON YARN 模式下的Spark架构,可以细分为:
YARN-Client模式下的 Spark ON YARN 架构
YARN-Cluster模式下的Spark ON YARN 架构
YARN-Client模式下的 Spark ON YARN 架构如图所示:
(1)Spark客户端节点向YARN中提交Spark任务:首先向YARN的ResourceManager申请启动AppMaster(Application Master),然后在Driver进程中创建SparkContext
(2)ResourceManager在收到请求后,会在集群中选择一个NodeManager为应用程序分配第一个Container,并且在这个Container中启动应用程序的AppMaster。YARN-Client模式中的AppMaster只会联系SparkContext进行资源的分配。
(3)AppMaster向ResourceManager进行注册,根据任务信息向ResourceManager申请资源(Container)
(4)AppMaster在申请到资源(Container)后。会与对应的NodeManager进行通信,创建Container,启动Executor。
(5)在Driver进程中的SparkContext会分配Task给Executor去执行,Executor运行Task并向Driver汇报执行的状态和进度,从而可以在任务失败的时候重新启动任务。
(6)在Spark运行任务完成后,SparkContext向ResourceManager申请注销并关闭自己。
注意:在YARN-Client模式和YARN-Cluster模式下,Spark ON YARN 架构的区别是:Driver进程运行的位置不同