一、必须知道
SparkContext
sparkContext在Spark应用程序的执行过程中起着主导作用,它负责与程序和spark集群进行交互,包括申请集群资源、创建RDD、accumulators及广播变量等。sparkContext与集群资源管理器、work节点交互图如下:
sparkContext构建的顶级三大核心:DAGScheduler,TaskScheduler,SchedulerBackend.
TaskScheduler:是一个接口,是低层调度器,根据具体的ClusterManager的不同会有不同的实现。Standalone模式下具体实现的是TaskSchedulerlmpl。
SchedulerBackend:是一个接口,根据具体的ClusterManger的不同会有不同的实现,Standalone模式下具体的实现是SparkDeloySchedulerBackend。
RDD
worker里有很多Excutor,真正完成计算的是Excutor,Excutor计算都是在内存进行计算,
Excutor里面有partitioner,partitioner里面的数据如果内存足够大的话放到内存中,它是一点一点读的
RDD是分布式数据集,所说RDD就是这个,
RDD有5个特点:
1.a list of partiotioner有很多个partiotioner(这里有3个partiotioner),可以明确的说,
一个分区在一台机器上,一个分区其实就是放在一台机器的内存上,
一台机器上可以有多个分区。
2.a function for partiotioner一个函数作用在一个分区上。
比如说一个分区有1,2,3 在rdd1.map(_*10),把RDD里面的每一个元素取出来乘以10,每个分片都应用这个map的函数
3.RDD之间有一系列的依赖
rdd1.map(_*10).flatMap(..).map(..).reduceByKey(...)
构建成为DAG,这个DAG会构造成很多个阶段,这些阶段叫做stage,RDDstage之间会有依赖关系,后面根据前面的依赖关系来构建,如果前面的数据丢了,它会记住前面的依赖,从前面进行重新恢复。每一个算子都会产生新的RDD.
textFile 与flatMap会产生两个RDD.
4.分区器hash & Integer.Max % partiotioner 决定数据到哪个分区里面,可选,这个RDD是key-value 的时候才能有
5.最佳位置。数据在哪台机器上,任务就启在哪个机器上,数据在本地上,不用走网络。不过数据进行最后汇总的时候就要走网络。(hdfs file的block块)