标签(空格分隔): Spark编程
本篇博客以WordCount为例说明Spark Job的提交和运行,包括Spark Application初始化、DAG依赖性分析、任务的调度和派发、中间计算结果的存储和读取。浏览器
SparkContext是进行Spark应用开大的主要接口,是Spark上层应用与底层实现的中转站。服务器
SparkContext的构造函数中最重要的入参是SparkConf.app
根据初始化入参生成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)oop
建立TaskScheduler,根据Spark的运行模式来选择相应的SchedulerBackend,同时启动TaskScheduler;网站
//生成TaskScheduler
private[spark] var taskScheduler = SparkContext.createTaskScheduler(this, master, appName)
taskScheduler.start()this
为上面建立的TaskScheduler实例为入参建立DAGScheduler并启动运行。spa
//生成DAGScheduler
@volatile private[spark] var dagScheduler = new DAGScheduler(taskScheduler)
dagScheduler.start()scala
Scala已经拥有Repl,为何在Spark中还要本身重写一套Repl呢?Scala原声的Repl,是使用Object来封装输入的代码,而在反序列化过程当中,对象的构造函数会被再次调用,产生了反作用,咱们但愿生成Class而不是Object。(Scala中没有静态方法和静态字段,在Scala中能够用Object实现,对象的构造函数在第一次被使用的时候回调用,若是一个对象从未被使用,那么他的构造器也不会被执行,并且Object的构造函数必须是无参的)
一、scala没有静态方法或者静态字段
二、伴生对象充当于静态方法的类,因此伴生对象中全是静态的
三、Scala中的变量有两种var和val(val相似于Java中final,值不可改变)
什么是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) 执行引擎负责真正执行加载入内存的二进制。