• Spark学习(三) -- SparkContext初始化


    标签(空格分隔): Spark


    本篇博客以WordCount为例说明Spark Job的提交和运行,包括Spark Application初始化、DAG依赖性分析、任务的调度和派发、中间计算结果的存储和读取。

    SparkContext的初始化综述

    SparkContext是进行Spark应用开大的主要接口,是Spark上层应用与底层实现的中转站。

    • SparkEnv
    • DAGScheduler
    • TaskScheduler
    • SchedulerBackend
    • WebUI

    SparkContext的构造函数中最重要的入参是SparkConf.

    1. 根据初始化入参生成SparkConf,再根据SparkConf来创建SparkEnv;

      //生成SparkEnv
      private[spark] val env = SparkEnv.create(conf, "", conf.get("spark.driver.host", conf.get("spark.driver.port").toInt, isDriver = true, isLocal = isLocal)
      SparkEnv.set(env)

    2. 创建TaskScheduler,根据Spark的运行模式来选择相应的SchedulerBackend,同时启动TaskScheduler;

      //生成TaskScheduler
      private[spark] var taskScheduler = SparkContext.createTaskScheduler(this, master, appName)
      taskScheduler.start()

    3. 为上面创建的TaskScheduler实例为入参创建DAGScheduler并启动运行。

      //生成DAGScheduler
      @volatile private[spark] var dagScheduler = new DAGScheduler(taskScheduler)
      dagScheduler.start()

    Spark Repl综述

    Scala已经拥有Repl,为什么在Spark中还要自己重写一套Repl呢?Scala原声的Repl,是使用Object来封装输入的代码,而在反序列化过程中,对象的构造函数会被再次调用,产生了副作用,我们希望生成Class而不是Object。(Scala中没有静态方法和静态字段,在Scala中可以用Object实现,对象的构造函数在第一次被使用的时候回调用,如果一个对象从未被使用,那么他的构造器也不会被执行,而且Object的构造函数必须是无参的)

    1、scala没有静态方法或者静态字段
    2、伴生对象充当于静态方法的类,所以伴生对象中全是静态的
    3、Scala中的变量有两种var和val(val类似于Java中final,值不可改变)

    Scala Repl执行过程

    什么是Repl (Read-Eval-Print Loop)?

    刚开始学编程的时候,是不是对搭建环境感觉非常棘手?比如从零开始搭建个 PHP Web 开发环境,要下载 Apache 服务器、PHP,然后安装、配置……经过这么一大堆的无关工作,你可能只是想验证一下教程上的 echo "Hello World"; 能不能工作。
    这种时候,如果能有个网站可以在线执行代码:我们只要打开浏览器,进入网页,敲入要执行的代码,点击执行按钮就看到执行结果。那是一件多畅快的事情!
    对于这种交互式的开发环境我们叫做 REPL(Read-Eval-Print Loop)

    Scala是需要编译执行的,而Repl给我们的错觉是Scala解释执行的。在Repl中输入的语句是如何被真正执行的呢?

    1)在Repl中输入的每一行语句,都会被封装成一个Object,这以工作主要由Interpreter完成;
    2) 对该Object进行编译;
    3) 由ClassLoader加载编译后的Java二进制文件;
    4) 执行引擎负责真正执行加载入内存的二进制。

  • 相关阅读:
    「题解」300iq Contest 2 B Bitwise Xor
    「题解」agc031_e Snuke the Phantom Thief
    「题解」agc031_c Differ by 1 Bit
    「题解」NWRRC2017 Joker
    「题解」NWRRC2017 Grand Test
    「题解」USACO15FEB Fencing the Herd G
    zsh: command not found:xxx 解决方法
    curl
    redis搭建
    http 缓存分为客户端缓存/服务端缓存/数据库缓存
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/6245640.html
Copyright © 2020-2023  润新知