SparkContext初始化

来源:互联网 发布:药品查询软件 编辑:程序博客网 时间:2024/06/05 11:07
一、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)、启动TaskScheduler时,实际上调用量backend的start方法。


转自:http://blog.csdn.net/xw_classmate/article/details/53408245


原创粉丝点击