首先明确一点:学计算框架主要就是学2部分:1.资源调度 2.任务调度
写一个spark程序包含加载配置文件,创建上下文,创建RDD , 调用RDD的算子,用户在算子中自定义的函数
map端:狭窄的理解是MapReduce中的map端,本质就是将数据变成你想要的形式,例如:按照空格切分,乘2等等操作。
shuffle : 分为shuffle write(临时存到本地磁盘)和shuffle read(从磁盘拉数据,同一个分区的拉到一个partition上)阶段,本质就是数据的规整,例如同一个分区的拉到一块。
reduce端:狭窄的理解是MapReduce中的reduce端,本质就是数据的聚合
宽泛的理解2个stage之间,前面的可以说是map端,后面的stage可以理解为reduce端,中间正好需要shuffle过程,且shuffle过程需要再shuffle write阶段将数据暂时存到本地磁盘上。
spark专业术语:
任务相关的专业术语:
1.application:用户写的应用程序(包含2部分:Driver Program(运行应用的main()方法,创建spark上下文 )和Executor Program(用户在算子中自定义的函数))
2.job:一个action类算子触发执行的操作,有多少个action类算子就有多少个job,一个应用程序可以有多个job.
3.stage(阶段):一组任务(task)就是一个stage,例如MapReduce中一组的map task(一个切片对应一个map task),一个job中可以有有多个stage(根据宽依赖为分界线来划分的)
.4.task(任务:底层就是一个thread(线程)):在集群运行时最小的执行单元
集群相关的专业术语:
Master:资源管理的主节点
Worker:资源管理的从节点
Executor:执行任务的进程,运行在worker节点上,负责运行task,负责将数据存储到内存或磁盘,每个application有多个独立的Executors
ThreadPool:线程池,存在与Executor进程中,task在线程池中运行
RDD的依赖关系
RDD有5大特性:
1.一个RDD有多个partition组成。
2.每个算子实质上作用于每个partition上。
3.每个RDD依赖其父RDD.
4.可选项 :分区器是作用于KV格式的RDD上
5.可选项:RDD会提供一系列的最佳的计算位置
父RDD不知道其子RDD,但是子RDD知道的的所有父RDD
1.窄依赖:父RDD与子RDD,partition的关系是一对一,这种情况并没有shuffle过程
例如:map(x=>x.split(" "))
2.宽依