一、Spark的相关概念
1、RDD
RDD(Resilient Distributed Datasets) ,弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限(即只读)的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开销很低。对开发者而言,RDD可以看作是Spark的一个对象,它本身运行于内存中,如读文件是一个RDD,对文件计算是一个RDD,结果集也是一个RDD ,不同的分片、 数据之间的依赖 、key-value类型的map数据都可以看做RDD。
2、DAG
DAG(Directed Acyclic Graph),意思是有向无环图,所谓有向无环图是指任意一条边有方向,且不存在环路的图。
把数据放入Spark的内存,然后生成一个RDD,不同RDD之间可以构成多个DAG.
3、Executor
Executor是一个进程,是运行在相关的工作节点上,派生出许多线程,由线程再去执行具体的任务
4、Application
Application也叫Spark应用程序,它会被分解成一个个任务,任务是运行在Executor的进程上的工作单元,Executor派生出许多线程,不同线程去执行不同让任务
5、作业(Job)
一个应用程序执行时会生成若干作业,每个作业会被切成很多的任务子集,每个任务子集就是一个阶段
6、阶段(Stage)
阶段是作业调度的基本单位,一个作业按照算法分成不同阶段,一个阶段就是若干任务的集合,然后把任务分发到不同节点(机器)去执行。
二、Spark架构设计
1、Spark运行架构
2、Spark的概念之间的关系
一个应用程序执行时会生成若干作业,一个作业被切分成不同阶段,一个阶段就是若干任务的集合,然后把任务分发到不同节点(机器、Worker Node)去执行。
返回结果(返回给Driver或HDFS或Hbase)
3、Spark基本运行流程
步骤:
1.应用程序提交到Driver(指挥所),Driver会产生一个SparkContext(指挥官)
2.SparkContext负责作业的调度,作业分解成不同阶段,再将不同阶段的若干任务的执行结果进行汇总
3.最后再返回给用户
4、SparkContext的作用
将DAG图提交DAG Scheduler进行解析,它负责把整个DAG图切成若干不同的阶段。
每个阶段包含若干任务 。