Spark代码执行流程
1.Spark算子的分类
1.Transformation类算子——懒执行
2.Action类算子——触发懒执行算子执行
3.持久化算子
2.Spark代码的流程
1.创建SparkConf()
val conf = new SparkConf().setMaster().setAppName()........
2.创建SparkContext()
val sc = new SparkContext(conf)
3.创建RDD
val rdd =new sc.textFile("hello.txt")
4.对RDD使用Transformation类算子进行数据转换
例如:map/flatmap/reducebykey
5.对RDD使用Action类算子进行触发执行
例如:foreach/take
6.sc.stop()
3. 术语解释
1.概念解释
1.Master(standalone):资源管理的主节点(进程)
2.Cluster Manager:在集群上获取资源的外部服务
3.Worker Node(standalone):资源管理的从节点(进程)或者说管理本机资源的进程
4.Application:基于Spark的用户程序,包含了Driver程序和运行在集群的Executor程序
5.Driver program:用来连接工作进程(Worker)程序
6.Executor:是在一个Worker进程管理的节点上为Application启动一个进程,该进程负责运行任务,并且负责将数据在内存或磁盘上。每个应用程序都有各自独立的executors
7.Task:被送到某个executor上的工作单元
8.Job:包含很多任务(Task )的并行计算,可以看作和action对应
9.Stage:一个job会被拆分很多组任务,每组任务被称为Stage(就像Mapreduce分为map task 和reduce task一样)
2. 他们之间的关系
1.资源层面
资源管理的主节点Master,从节点Worker,可以启动Executor(里面有线程池)
Master——》worker——》Executor——》ThreadPool
2. 任务层面
一个spark应用程序叫Application,由job组成,job由stage组成,stage由task组成
Application——》job——》Stage——》task(task任务发动到线程池里面)
4.宽依赖和窄依赖
1.宽依赖
父RDD与子RDD partition之间的关系是一对多的关系,会产生shuffle
2.窄依赖
父RDD与子RDD partition之间的关系是一对一的关系,不会产生shuffle