Gary

Spark入门教程

无法显示该图片

By Gary


Index:

1.Spark概览

2.最基础的数据类型:RDD & Partition

3.DataFrame & Dataset

4.RDD算子

5.Spark集群架构

6.Spark运行模式

7.Spark运行流程:任务 & 资源调度


1.Spark概览

Spark是美国加州大学伯克利分校的AMP实验室(主要创始人lester和Matei)开发的通用的大数据处理框架。包括:

无法显示该图片

Spark应用程序可以使用R语言、Java、Scala和Python进行编写,极少使用R语言编写Spark程序,Java和Scala语言编写的Spark程序的执行效率是相同的,但Java语言写的代码量多,Scala简洁优雅,但可读性不如Java,Python语言编写的Spark程序的执行效率不如Java和Scala。使用时需注意对应版本:

无法显示该图片


2.最基础的数据类型:RDD & Partition

RDD

RDD是Spark提供的最主要的一个抽象概念(Resilient Distributed Dataset),它是一个element的collection,分区化的位于集群的节点中,支持并行处理

无法显示该图片

Partition

输入可能以多个文件的形式存储在HDFS上,每个File都包含了很多块,称为Block。当Spark读取这些文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,一般是将若干个Block合并成一个输入分片,称为InputSplit,注意InputSplit不能跨越文件。随后将为这些输入分片生成具体的Task,InputSplit与Task是一一对应的关系。随后这些具体的Task每个都会被分配到集群上的某个节点的某个Executor去执行。默认情况下InputSplit与Block是一对一的,而InputSplit又与RDD中的Partition对应

无法显示该图片

Partition的数目:


3.DataFrame & Dataset

无法显示该图片

DataFrame

DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame的思想来源于Python的pandas库,DataFrame在RDD的基础上加了Schema(描述数据的信息,可以认为是元数据,DataFrame曾经就有个名字叫SchemaRDD)。这使得Spark SQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观RDD,由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。

无法显示该图片

无法显示该图片

Dataset

Dataset可以认为是DataFrame的一个特例,主要区别是Dataset每一个record存储的是一个强类型值而不是一个Row。

无法显示该图片

区别

rdd的优点:

rdd的缺点:

dataframe的优点:

dataframe的缺点:

dataset的优点:


4.RDD算子

无法显示该图片

无法显示该图片

RDD是Spark进行并行运算的基本单位,提供了四种算子:

1.创建算子:将原生数据转换成RDD,如parallelize、txtFile等

2.转换算子:最主要的算子,是Spark生成DAG图的对象

3.缓存算子:对于要多次使用的RDD,可以缓冲加快运行速度,对重要数据可以采用多备份缓存

4.行动算子:将运算结果RDD转换成原生数据,如count、reduce、collect、saveAsTextFile等

无法显示该图片

5.Spark集群架构

Spark架构采用了分布式计算中的Master-Slave模型,整个集群分为Master节点和Worker节点,Master节点上常驻Master守护进程,负责管理全部的Worker节点,Worker节点上常驻Worker守护进程,负责与Master节点通信并管理executors

无法显示该图片

无法显示该图片

基本概念:

Job的划分:

无法显示该图片


6.Spark运行模式

提交应用的客户端(有两种提交方式)

Yarn-client mode:优先运行的是Driver,然后在初始化SparkContext的时候,会作为client端向yarn申请ApplicationMaster资源,当ApplicationMaster运行后,它会向yarn注册自己并申请Executor资源,之后由本地Driver与其通信控制任务运行,而ApplicationMaster则时刻监控Driver的运行情况,如果Driver完成或意外退出,ApplicationMaster会释放资源并注销自己。所以在该模式下,如果运行spark-submit的程序退出了,整个任务也就退出了

Yarn-cluster mode:本地进程仅仅只是一个client,它会优先向yarn申请ApplicationMaster资源运行ApplicationMaster,在运行ApplicationMaster的时候通过反射启动Driver(应用代码),在SparkContext初始化成功后,再向yarn注册自己并申请Executor资源,此时Driver与ApplicationMaster运行在同一个container里,是两个不同的线程,当Driver运行完毕,ApplicationMaster会释放资源并注销自己。所以在该模式下,本地进程仅仅是一个client,如果结束了该进程,整个Spark任务也不会退出,因为Driver是在远程运行的


7.Spark运行流程:任务 & 资源调度

任务的调度由Driver完成,资源的调度由Cluster Manager完成。Spark on Yarn模式,Driver会和ApplicationMaster通信,资源的申请由ApplicationMaster来完成,而任务的调度和执行则由Driver完成,Driver会直接跟Executor通信,让其执行具体的任务。

无法显示该图片

无法显示该图片

无法显示该图片

无法显示该图片

无法显示该图片

无法显示该图片

无法显示该图片

无法显示该图片


参考:

1.徐茂盛《Spark Core介绍以及架构》

2.xpleaf《Spark作业运行架构原理解析》

Jump to the top