一、SparkContext概述
SparkDriver用于提交用户应用程序,实际可以看作Spark的客户端。Spark Driver的初始化始终围绕着SparkContext的初始化。而SparkContext的配置参数则是由SparkConf负责,SparkConf就是你的操作面板。
SparkConf的构造很简单,主要通过ConcurrentHashMap来维护各种Spark的配置属性。
1 | /** |
SparkContext的主构造器参数为SparkConf,其实现如下:
1 | /** |
markPartiallyConstructed用来确保实例的唯一性。必须指定spark.master
和spark.app.name
,否则抛出异常。
SparkContext内部组件:
1 | //SparkContext的配置,会先调用config的clone方法,在进行验证配置,是否设置了spark.master和spark.app.name |
1 | allowMulitipleContext : 是否允许多个SparkContext实例,默认为False,可以通过设置Spark.Driver.allowMulitipleContexts来控制 |
1 | try { |
SparkContext的初始化步骤如下:
创建Spark执行环境SparkEnv
创建RDD清理器metadataCleaner创建并初始化SparkUI
Hadoop相关配置及Executor环境变量的设置
创建TaskScheduler(SparkLauncher,LauncherServer,LauncherBackend的通信流程)
- 创建和启动DAGScheduler
- TaskScheduler的启动
- 初始化BlockManager
- 启动测量系统MetricsSystem
- 创建和启动Executor分配管理器ExecutorAllocationManager
- ContextCleaner的创建和启动
- Spark环境更新
- 创建DAGSchedulerSource和BlockManagerSource
- 将SparkContext标记为激活
二、创建Spark执行环境SparkEnv
1 | // 这个函数允许在单元测试中模拟(mock)由SparkEnv创建的组件: |