spark核心术语和运行流程

Application:

Application是创建了SparkContext实例对象的Spark用户,包含了Driver程序

SparkContext

SparkContext是Spark的入口,负责连接Spark集群,创建RDD,累积量和广播量等。从本质上来说,SparkContext是Spark的对外接口,负责提供Spark的各种功能。

class SparkContext的定义:

    class SparkContext(
        val master: String,
        val appName: String,
        val sparkHome: String = null,
        val jars: Seq[String] = Nil,
        val environment: Map[String, String] = Map(),
        val preferredNodeLocationData: scala.collection.Map[String, scala.collection.Set[SplitInfo] = scala.collection.immutable.Map())
      extends Logging {
    }

Spark-shell是一个应用程序,因为spark-shell在启动的时候创建了SparkContext对象,其名称为sc:

Job:

和Spark的action相对应,每一个action例如count、savaAsTextFile等都会对应一个Job实例,该Job实例包含多任务的并行计算。

Driver Program:

运行main函数并且新建SparkContext实例的程序。

Cluster Manager

集群资源管理的外部服务,在Spark上现在主要有Standalone、Yarn、Mesos等三种集群资源管理器,Spark自带的Standalone模式能够满足绝大部分纯粹的Spark计算环境中对集群资源管理的需求,基本上只有在集群中运行多套计算框架的时候才建议考虑Yarn和Mesos。

Worker Node:

集群中可以运行应用程序代码的工作节点,相当于Hadoop的slave节点。

Executor:

在一个Worker Node上为应用启动的工作进程,在进程中负责任务的运行,并且负责将数据存放在内存或磁盘上,必须注意的是,每个应用在一个Worker Node上只会有一个Executor,在Executor内部通过多线程的方式并发处理应用的任务。

Task:

被Driver送到executor上的工作单元,通常情况下一个task会处理一个split的数据,每个split一般就是一个Block块的大小:(一个task一个分区?)

Stage:

一个Job会被拆分成很多组任务(Task),每一组任务被成为Stage,这个MapReduce的map和reduce任务很像,划分Stage的依据在于:Stage开始一般是由于读取外部数据或者Shuffle数据、一个Stage的结束一般是由于发生Shuffle(例如reduceByKey操作)或者整个Job结束时例如要把数据放到hdfs等存储系统上:

编程模型(Programming Model)

RDD是只读的数据分区集合,注意是数据集。

作用于RDD上的Operation分为transformantion和action。 经Transformation处理之后,数据集中的内容会发生更改,由数据集A转换成为数据集B;而经Action处理之后,数据集中的内容会被归约为一个具体的数值。

只有当RDD上有action时,该RDD及其父RDD上的所有operation才会被提交到cluster中真正的被执行。

从代码到动态运行,涉及到的组件如下图所示。

运行态(Runtime view)

不管什么样的静态模型,其在动态运行的时候无外乎由进程,线程组成。

用Spark的术语来说,static view称为dataset view,而dynamic view称为parition view. 关系如图所示

在Spark中的task可以对应于线程,worker是一个个的进程,worker由driver来进行管理。

那么问题来了,这一个个的task是如何从RDD演变过来的呢?下节将详细回答这个问题。

部署(Deployment view)

  1. 当有Action作用于某RDD时,该action会作为一个job被提交。

  2. 在提交的过程中,DAGScheduler模块介入运算,计算RDD之间的依赖关系。RDD之间的依赖关系就形成了DAG。

  3. 每一个JOB被分为多个stage,划分stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个stage,避免多个stage之间的消息传递开销。

  4. 当stage被提交之后,由taskscheduler来根据stage来计算所需要的task,并将task提交到对应的worker.

Spark支持以下几种部署模式:
1)standalone 2)Mesos 3) yarn.
这些部署模式将作为taskscheduler的初始化入参。

参考:
http://book.51cto.com/art/201409/453026.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值