Spark面试知识点

一.Spark架构

1.Spark架构中的组件

(1)Client:提交应用的客户端
(2)Driver:执行Application中的main函数并创建SparkContext
(3)ClusterManager:在YARN模式中为资源管理器。在Standalone模式中为Master(主节点),控制整个集群。
(4)worker:从节点,负责控制计算节点。启动Executor或Driver,在YARN模式中为NodeManager
(5)Executor:在计算节点上执行任务的组件
(6)SparkContext:应用的上下文,控制应用的生命周期
(7)RDD:弹性分布式数据集,spark的基本计算单元,一组RDD可形成有向无环图。
(8)DAG Scheduler:根据应用构建基于stage的DAG,并将Stage提交给Task Scheduler
(9)Task ScheduIer:将Task分发给Executor执行
(10)SparkEnv:线程级别的上下文,存储运行时重要组件的应用,具体如下:
* SparkConf:存储配置信息。
* BroadcastManager:负责广播变量的控制及元信息的存储
* BlockManager:负责Block的管理、创建和查找
* MetricsSystem:监控运行时的性能指标。
* MapOutputTracker:负责shuffle元信息的存储

2.spark架构揭示了spark的具体流程如下:

(1)用户在Client提交了应用
(2)Master找到Worker,并启动Driver
(3)Driver向资源管理器(YARN模式)或者Master(standalone模式)申请资源,并将应用转化为RDD Graph
(4)DAG Scheduler将RDD Graph转化为Stage的有向无环图提交给Task Scheduler
(5)Task ScheduIer提交任务给Executor执行

二.RDD

1.Spark弹性数据集RDD有两种创建方式:

(1)从文件系统输入(如HDFS)
(2)从已存在的RDD转换得到新的RDD

2.RDD的两种操作算子

(1)Transformation(变换)
* Transformation类型的算子不是立刻执行,而是延迟执行。也就是说从一个RDD变换为另一个RDD的操作需要等到Action操作触发时,才会真正执行。
(2)Action(行动)
* Action类型的算子会触发spark提交作业,并将数据输出到spark系统。

3.RDD依赖

(1)窄依赖:
如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为窄依赖(narrowdependency);
(2)宽依赖:
若多个Child RDD分区都可以依赖,则称之为宽依赖(widedependency)。

4.RDD特性总结

(1)RDD是不变的数据结构存储
(2)RDD将数据存储在内存中,从而提供了低延迟性
(3)RDD是支持跨集群的分布式数据结构
(4)RDD可以根据记录的Key对结构分区
(5)RDD提供了粗粒度的操作,并且都支持分区

5.算子分类

根据所处理的数据类型及处理阶段的不同,算子大致可以分为如下三类:
(1)处理value数据类型的Transformation算子;这种变换并不触发提交作业,处理的数据项是value型的数据
(2)处理Key-Value数据类型的Transfromation算子;这种变换并不触发提交作业,处理的数据项是Key-Value型的数据对。
(3)Action算子:这类算子触发SparkContext提交作业

三.Spark机制原理

1.Spark运行模式

(1)Spark运行模式分为:Local,Standalone,Yarn,Mesos
(2)根据Spark Application的Driver Program是否在集群中运行,Spark应用的运行方式又可以分为Cluster模式和Client模式

2.Spark应用的基本概念

(1)SparkContext:spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node上的Executor
(2)DriverProgram:运行Application的main()函数并创建SparkContext
(3)RDD:RDD是Spark的核心数据结构,可以通过一系列算子进行操作。当RDD遇到Action算子时,将之前的所有算子形成一个有向无环图(DAG)。再在Spark中转化为Job,提交到集群执行。一个App中可以包含多个Job。
(4)Worker Node:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程
(5)Executor:为Application运行在Worker Node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务。

3.Spark应用(Application)执行过程中各个组件的概念:

(1)Task(任务):RDD中的一个分区对应一个Task,Task是单个分区上最小的处理流程单元。
(2)TaskSet(任务集):一组关联的,但相互之间没有Shuffle依赖关系的Task集合。
(3)Stage(调度阶段):一个TaskSet对应的调度阶段。每个Job会根据RDD的宽依赖关系被切分很多stage,每个stage都包含一个TaskSet。
(4)Job(作业):由Action算子触发生成的由一个或多个stage组成的计算作业
(5)Application:用户编写的Spark的应用程序,由一个或多个Job组成。提交到Spark之后,Spark为Application分配资源,将程序转换并执行。
(6)DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler。
(7)TaskScheduler:将Taskset提交给Worker Node集群运行并返回结果。
Spark基本概念之间的关系

4.Spark应用执行机制概要

Spark执行流程

四.Spark内核

1.Spark Core内模块概述

(1)Api:Java、Python及R语言API的实现
(2)BroadCast:包含广播变量的实现
(3)Deploy:spark部署与启动运行的实现
(4)Executor:worker节点负责计算部分的实现
(5)Metrics:运行时状态监控的实现
(6)Network:集群通信实现
(7)Partial:近似评估代码。
(8)Serializer:序列化模块
(9)Storage:存储模块
(10)UI:监控界面的代码逻辑实现。
Spark代码布局

2.Spark Core外模块概述

(1)Begal:Pregel是Google的图计算框架,Begal是基于Spark的轻量级Pregel实现。
(2)MLlib:机器学习算法库。
(3)SQL:SQL on Spark,提供大数据上的查询功能。
(4)GraphX:图计算模块的实现
(5)Streaming:流处理框架Spark Streaming的实现
(6)YARN:Spark on YARN的部分实现

五.Spark SQL