1.Master(standalone):资源管理的主节点(进程)管理Worker
2.Cluster Manager:在集群上获取资源的外部服务(例如:standalone Mesos Yarn)
3.Worker Node(standalone):1.管理本地的core和memory资源2.启动Executor
4.Application:基于Spark的用户程序,说白了就是写的每一段代码。
5.Job:包含很多任务(Task)的并行计算,可以看作和action算子对应。
6.Stage:一个job会被拆 分成很多组任务,每一组任务被称为Stage,拆分的标准就是RDD的依赖关系。
7.Task:thread处理任务的单元。就是被拆分出的每一个任务,他是被送到某个Executor上的工作单元。
8.Driver:驱动进程.分发task2.回收task处理结果
在资源层面(从上往下)
Master:主节点
worker:由master管理
Executor:(进程)在worker上启动
Threadpool:(线程池)每一个Executor中都有,在里面可以运行Task
从任务层面(从上往下)
Application:基于Spark的用户程序,说白了就是写的每一段代码
Job:每一个Application里由很多Job,Job的个数由Application决定
Stage:根据RDD的依赖关系切割成每一个Stage
Task:(线程)Stage切割成一组Task。一组Task组成Stage
每一个Task发动到Threadpool中执行,这样任务层面和资源层面就结合起来了。
Pipeline计算模式
这个Stage的并行度是3。Stage的并行度是由最后一个RDD的Partition个数决定的。Partition个数是由数据量的大小决定的。
RDD1到RDD3都是窄依赖,没有发生shuffle因此是一个Stage。
每一个RDD的Partititon执行算子
每一个task的计算逻辑是所有的Partition的计算逻辑以递归函数的展开式的形式整和起来的
task0:fun3(fun2(textfile(block1)))
task1:fun3(fun2(textfile(block2)))
task2:fun3(fun2(textfile(block3)))
RDD是不存储数据的,它只是一个抽象的概念,RDD只是存储了计算逻辑
因此
task0最好发送到对应b1所在的节点
task1最好发送到对应b2所在的节点
task2最好发送到对应b3所在的节点