博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark学习(三) -- SparkContext初始化
阅读量:4626 次
发布时间:2019-06-09

本文共 1728 字,大约阅读时间需要 5 分钟。

标签(空格分隔): 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) 执行引擎负责真正执行加载入内存的二进制。

转载于:https://www.cnblogs.com/little-YTMM/p/6245640.html

你可能感兴趣的文章
json_encode 中文处理
查看>>
jquery局部区域打印功能实现
查看>>
Centos7 中使用Supervisor守护进程
查看>>
第五周作业
查看>>
awk中关于BEGIN,END的使用问题
查看>>
[Vue warn]: Failed to mount component: template or render function not defined. 错误解决方法
查看>>
禁用root登录以及使用sudo分配权限
查看>>
mysql-The program could not be launched,Error Number 2解决办法
查看>>
字节缓冲流 BufferedOutputStream BufferedInputStream
查看>>
身份证正则表达式
查看>>
JS代码放在head和body中的区别分析
查看>>
C++string,char* 字符数组,int类型之间的转换
查看>>
sql 条件处理
查看>>
C语言 · 动态数组的使用
查看>>
win7提交代码到github
查看>>
flask上下文管理
查看>>
windows 上rails3.2 + ruby1.9环境搭建
查看>>
Eclipse如何修改dynamic web module version
查看>>
关于我学习Python语言后的感悟
查看>>
正太分布
查看>>