一、SparkConf概述
1. SparkContext需要传入SparkConf来进行初始化,用于维护Spark的配置属性;
2. SparkConf内部使用ConcurrentHashMap来维护所有的配置;
3. SparkConf提供的setter方法返回的是this,所有它允许使用链式来设置属性。
二、SparkContext的初始化
1. 复制SparkConf配置信息,然后校验或者添加新的配置信息;
(1)、SparkContext的住构造器参数为SparkConf;
(1)、必须指定spark.master和spark.app.name,否则抛出异常。
2. 创建SparkEnv;
(1)、SparkEnv包含了一个Spark应用的运行环境对象;
(2)、环境对象包括:serializer, Akka actor system, block manager, map output tracker等等。
3. 创建MetadataCleaner;
(1)、MetadataCleaner是用来定时的清理metadata的,metadata有6种类型,封装在了MetadataCleanerType类中。
4. 创建SparkStatusTracker
(1)、SparkStatusTracker是低级别的状态报告API,用于监控job和stage。
5. 初始化Spark UI;
(1)、SparkUI为Spark监控Web平台提供了Spark环境、任务的整个生命周期的监控。
6. HadoopConfiguration;
(1)、Spark默认使用HDFS作为分布式文件系统,所以需要获取Hadoop相关的配置信息;
1)将Amazon S3文件系统的AccessKeyId和SecretAccessKey加载到hadoop的Configuration;
2)将SparkConf中所有以spark.hadoop.开头的属性复制到Hadoop的Configuration;
3)将SparkConf的spark.buffer.size属性复制为Hadoop的Configuration的io.file.buffer.size属性。
7. ExecutorEnvs;
(1)、ExecutorEnvs包含的环境变量会在注册应用时发送给Master,Master给Worker发送调度后,
Worker最终使用executorEnvs提供的信息启动Executor。
8. 注册HeartbeatReceiver;
9. 创建任务调度器TaskScheduler;
(1)、 创建TaskSchedulerImpl;
1)从SparkConf中读取配置信息,包括每个任务分配的CPU数;
2)创建TaskResultGetter,通过线程池对Worker上的Executor发送的Task的执行结果进行处理。
(2)、 TaskSchedulerImpl的初始化;
1) 使TaskSchedulerImpl持有LocalBackend的引用;
2)创建Pool,Pool中缓存了调度队列,调度算法以及TaskSetManager集合等信息;
3)创建FIFOSchedulableBuilder,FIFOSchedulableBuilder用来操作Pool中的调度队列。
10. 创建DAGScheduler;
(1)、DAGScheduler的主要作用是在TaskSchedulerImpl正式提交任务之前做一些准备工作,
包括:创建Job,将DAG中的RDD划分到不同的Stage,提交Stage等等。
11. 启动TaskScheduler;
1. SparkContext需要传入SparkConf来进行初始化,用于维护Spark的配置属性;
2. SparkConf内部使用ConcurrentHashMap来维护所有的配置;
3. SparkConf提供的setter方法返回的是this,所有它允许使用链式来设置属性。
二、SparkContext的初始化
1. 复制SparkConf配置信息,然后校验或者添加新的配置信息;
(1)、SparkContext的住构造器参数为SparkConf;
(1)、必须指定spark.master和spark.app.name,否则抛出异常。
2. 创建SparkEnv;
(1)、SparkEnv包含了一个Spark应用的运行环境对象;
(2)、环境对象包括:serializer, Akka actor system, block manager, map output tracker等等。
3. 创建MetadataCleaner;
(1)、MetadataCleaner是用来定时的清理metadata的,metadata有6种类型,封装在了MetadataCleanerType类中。
4. 创建SparkStatusTracker
(1)、SparkStatusTracker是低级别的状态报告API,用于监控job和stage。
5. 初始化Spark UI;
(1)、SparkUI为Spark监控Web平台提供了Spark环境、任务的整个生命周期的监控。
6. HadoopConfiguration;
(1)、Spark默认使用HDFS作为分布式文件系统,所以需要获取Hadoop相关的配置信息;
1)将Amazon S3文件系统的AccessKeyId和SecretAccessKey加载到hadoop的Configuration;
2)将SparkConf中所有以spark.hadoop.开头的属性复制到Hadoop的Configuration;
3)将SparkConf的spark.buffer.size属性复制为Hadoop的Configuration的io.file.buffer.size属性。
7. ExecutorEnvs;
(1)、ExecutorEnvs包含的环境变量会在注册应用时发送给Master,Master给Worker发送调度后,
Worker最终使用executorEnvs提供的信息启动Executor。
8. 注册HeartbeatReceiver;
9. 创建任务调度器TaskScheduler;
(1)、 创建TaskSchedulerImpl;
1)从SparkConf中读取配置信息,包括每个任务分配的CPU数;
2)创建TaskResultGetter,通过线程池对Worker上的Executor发送的Task的执行结果进行处理。
(2)、 TaskSchedulerImpl的初始化;
1) 使TaskSchedulerImpl持有LocalBackend的引用;
2)创建Pool,Pool中缓存了调度队列,调度算法以及TaskSetManager集合等信息;
3)创建FIFOSchedulableBuilder,FIFOSchedulableBuilder用来操作Pool中的调度队列。
10. 创建DAGScheduler;
(1)、DAGScheduler的主要作用是在TaskSchedulerImpl正式提交任务之前做一些准备工作,
包括:创建Job,将DAG中的RDD划分到不同的Stage,提交Stage等等。
11. 启动TaskScheduler;
(1)、启动TaskScheduler时,实际上调用量backend的start方法。
转自:http://blog.csdn.net/xw_classmate/article/details/53408245