SparkContext概述

sparkContext是所有的spark应用程序的发动机引擎,就是说你想要运行spark程序就必须创建一个,不然就没的玩了。sparkContext负责初始化很多东西,当其初始化完毕以后,才能像spark集群提交任务,这个地方还有另一个管理配置的类sparkConf,它主要负责配置,检查,修改等工作,这会在后期源码阅读的时候你会经常看到的一个参数conf,说的就是它。

1.代码小实例

object sparktest_hivesql {
def main(args: Array[String]): Unit = {
val sc = new SparkContext(new SparkConf().setAppName("sparktest_sql"))
val hiveContext = new HiveContext(sc)
import hiveContext.implicits._
hiveContext.sql("use data_sence")
val testData = hiveContext.sql("select * from ods_position_day limit 10")
testData.collect().foreach(x=>println("****:"+x))
sc.stop()
}
}

功能很多简单,即使通过spark和hive 的配置连接,让spark可以读hive 库里面的数据,这个地方就读取一个表里面的数据,打印出来。主要是为了做一个sparkconf和sparkContext的引子。

2.sparkConf

1.参数配置处理

就是一些spark配置信息的处理,主要是一个:private val settings = new ConcurrentHashMap[String, String]()
sparkconf() 只接受一个boolean的参数:

当为true时,系统将加载外部设置。

当为false时,跳过加载外部设置,无论系统属性是什么,都要得到相同的配置.
对一些参数做出map处理,将用户自己添加和系统提供的进行整合,全是围绕这个方法进行处理的。

这个地方用到了一个scala的单例模式,返回的是this,这样你就用在生成sparkConf().setMaster().setAppName()的情况了。

2.对一些过时的参数进行验证。

3.sparkContext描述

先来个简单的关系图了解一下基本关系:

1.spark程序在运行的时候分为Driver(任务解析,分配)和Executor(job具体执行者)两部分。

2.spark编程是基于SparkContext的,具体说来包含两部分。

  1.spark编程的核心基础RDD,是由SparkContext来创建的。

  2.spark程序的调度优化也是基于SparkContext。

3.spark程序的注册是通过SparkContext实例化时候生产的对象来完成的。其实是通过SchedulerBankend来注册程序。

4.spark程序运行时通过Master获取具体的计算资源,计算资源获取也是通过SparkContext产生的对象来申请。实际是SchedulerBackend来获取计算资源的。

5.SparkContext结束的时候spark也结束了。

4.spark初始化步骤

SparkContext的主构造器参数为SparkConf:这个地方简单的说一下,一直强调sparkContext只能有一个,但是其实是可以多个的。

allowMultipleContexts :多个contexts的标签,当为true的时候 有多个sparkcontext的时候 会抛出异常。

SparkContext.markPartiallyConstructed(this, allowMultipleContexts) 为了多个sparkContexts。

SparkContext的初始化步骤如下:

1) 创建Spark执行环境SparkEnv;

2) 创建RDD清理器metadataCleaner;

3) 创建并初始化Spark UI;

4) Hadoop相关配置及Executor环境变量的设置;

5) 创建任务调度TaskScheduler;

6) 创建和启动DAGScheduler;

7) TaskScheduler的启动;

8) 初始化块管理器BlockManager;

9) 启动测量系统MetricsSystem;

10) 创建和启动Executor分配管理器ExecutorAllocationManager;

11) ContextCleaner的创建和启动;

12) Spark环境更新;

13) 创建DAGSchedulerSource和BlockManagerSource;

14) 将SparkContext标记为激活。

spark[源码]-sparkContext概述的更多相关文章

  1. spark[源码]-sparkContext详解[一]

    spark简述 sparkContext在Spark应用程序的执行过程中起着主导作用,它负责与程序和spark集群进行交互,包括申请集群资源.创建RDD.accumulators及广播变量等.spar ...

  2. Spark源码剖析 - SparkContext的初始化(二)_创建执行环境SparkEnv

    2. 创建执行环境SparkEnv SparkEnv是Spark的执行环境对象,其中包括众多与Executor执行相关的对象.由于在local模式下Driver会创建Executor,local-cl ...

  3. Spark源码剖析 - SparkContext的初始化(三)_创建并初始化Spark UI

    3. 创建并初始化Spark UI 任何系统都需要提供监控功能,用浏览器能访问具有样式及布局并提供丰富监控数据的页面无疑是一种简单.高效的方式.SparkUI就是这样的服务. 在大型分布式系统中,采用 ...

  4. Spark源码分析 – SparkContext

    Spark源码分析之-scheduler模块 这位写的非常好, 让我对Spark的源码分析, 变的轻松了许多 这里自己再梳理一遍 先看一个简单的spark操作, val sc = new SparkC ...

  5. spark源码阅读--SparkContext启动过程

    ##SparkContext启动过程 基于spark 2.1.0  scala 2.11.8 spark源码的体系结构实在是很庞大,从使用spark-submit脚本提交任务,到向yarn申请容器,启 ...

  6. Apache Spark源码剖析

    Apache Spark源码剖析(全面系统介绍Spark源码,提供分析源码的实用技巧和合理的阅读顺序,充分了解Spark的设计思想和运行机理) 许鹏 著   ISBN 978-7-121-25420- ...

  7. emacs+ensime+sbt打造spark源码阅读环境

    欢迎转载,转载请注明出处,徽沪一郎. 概述 Scala越来越流行, Spark也愈来愈红火, 对spark的代码进行走读也成了一个很普遍的行为.不巧的是,当前java社区中很流行的ide如eclips ...

  8. 《Apache Spark源码剖析》

    Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了 ...

  9. Spark源码分析之八:Task运行(二)

    在<Spark源码分析之七:Task运行(一)>一文中,我们详细叙述了Task运行的整体流程,最终Task被传输到Executor上,启动一个对应的TaskRunner线程,并且在线程池中 ...

随机推荐

  1. PowerShell如何使用自定义公共函数

    http://blog.csdn.net/flyliuweisky547/article/details/18565705

  2. linux 命令集合收集(ubuntu)

    1.查看ubuntu版本号:cat /etc/issue  或者sudo lsb_release -a 2.查看内核版本信息:uname -a ,显示为4.4.0 x86_64版本内核

  3. Linux命令之乐--curl

    参数: -I   获取头部信息 -s/--silent      Silent mode. Don't output anything 沉默模式 --connect-timeout <secon ...

  4. C语言数组元素的查询

    在实际开发中,经常需要查询数组中的元素.例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家长想知道他的孩子是否进入了实验班,只要提供孩子的编号就可以,如 ...

  5. IOS 7 自定义的UIAlertView不能在iOS7上正常显示

    本文转载至 http://blog.csdn.net/hanbing861210/article/details/13614405 众所周知,当伟大的iOS7系统发布后,表扬的一堆.谩骂的也一片,而对 ...

  6. jquery与javescript的区别(一)

    一.找元素: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&g ...

  7. 【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory

    [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 结论是: 当前有个bug: 默认是通过 hw.ramSize=1024 ...

  8. jquery对象转dom对象

    jq取兄弟级的上移个元素 jquery对象: var a = $(this).prev("a"); console.log(a); 输出: 转dom对象: var a = $(th ...

  9. 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流

    [BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...

  10. ios 如何改变UISegmentedControl文本的字体大小?

    UIFont *Boldfont = [UIFont boldSystemFontOfSize:16.0f]; NSDictionary *attributes = [NSDictionary dic ...