SparkContext创建过程

SparkContext两种创建过程

一、无Session的SparkContext的创建过程

   val conf = new SparkConf()
   val sc = new SparkContext("local","JSONRead",conf)

new SparkContext()此处调用的是包含三个参数的构造方法,该构造方法通过将所有参数传入SparkConf,最终调用只包含conf的构造器.

def this(master: String, appName: String, conf: SparkConf) =
  this(SparkContext.updatedConf(conf, master, appName))
\** 
	*  SparkContext是spark功能的主入口,代表着集群的联接,可以用它在集群中创建RDDs,累加器和广播变量
  *  每个jvm只能有一个SparkContext,再创建新的SparkContext之前需要先stop()当前活动的SparkContext,不过这种限制可能会在将来被移除
  *  它的构造参数是SparkConf是当前app的配制。这个配置会覆盖默认的配置以及系统属性
  * SparkContext的初始化步骤:
  *    1.创建SparkEnv;
  *    2.创建并且初始化Spark UI;
  *    3.hadoop相关配置以及Executor环境变量的设置;
  *    4.创建任务调度TaskScheduler,创建DAGScheduler;
  *    5.TaskScheduler的启动;
  *    6.初始化管理器BlockManager(BlockManager是存储体系的主要组件之一)
  *    7.启动测量系统MetricsSystem;
  *    8.创建和启动Executor分配管理器ExecutorAllocationManager;
  *    9.创建DAGSchedulerSource和BlockManagerSource;
  *    10.激活SparkContext
 **/
class SparkContext(config: SparkConf) extends Logging {
   }
  1. Uitls.getCallSite()它的作用就是用于打印执行过程中的堆栈信息.

    // The call site where this SparkContext was constructed.
    private val creationSite: CallSite = Utils.getCallSite()
    
  2. SparkContext构造函数的开头调用,以确保没有SparkContext正在运行。如果检测到正在运行的上下文,则抛出异常;如果另一个线程正在构造SparkContext,则记录一个警告。这个警告是必要的,因为当前的锁定方案使我们无法可靠地区分正在构造另一个上下文的情况和另一个构造函数抛出异常的情况

     SparkContext.markPartiallyConstructed(this)
    
  3. 用于将每个file / jar的URL与本地时间戳一起存储

      // Used to store a URL for each static file/jar together with the file's local timestamp
      private[spark] val addedFiles = new ConcurrentHashMap[String, Long]().asScala
      private[spark] val addedJars = new ConcurrentHashMap[String, Long]().asScala
    
  4. 保持跟踪所有持久化的RDDs

    // Keeps track of all persisted RDDs
    private[spark] val persistentRdds = {
         
      val map: ConcurrentMap[Int, RDD[_]] = new MapMaker().weakValues().makeMap[Int, RDD[_]]()
      map.asScala
    }
    

    设置环境给executors使用

    // Environment variables to pass to our executors.
    	private[spark] val executorEnvs = HashMap[String, String]()
    // 	设置spark_User
    // Set SPARK_USER for user who is running SparkContext.
      val sparkUser = Utils.getCurrentUserName()
    
  5. 初始化ThreadLocal及子类InheritableThreadLocal

    // Thread Local variable that can be use
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值