spark的设计与运行原理

一、Spark简介

  1. spark的特点
    (1) 运行速度快

使用DAG执行引擎以支持循环数据流与内存计算

(2) 容易使用

支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell 进行交互式编程

(3) 通用性

Spark提供了完整而强大的技术栈,包括SQL查询,流式计算,机器学习和图算法组件

(4) 运行模式多样

可以运行独立的集群模型种,可运行于Hadooo中,也运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。

  1. Spark与Hadoop的对比

(1) Spark的计算模型也属于MapReduce,但不局限于Map和Reduce操作,还可以提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活
(2)Spark提供了内存计算,可以将中间结果放到内存中,对于迭代运行效率更高。
(3)Spark基于DAG的任务调度执行机制,要要优于Hadoop MapReduce的迭代执行机制

图1

二、Spark生态系统

Spark生态系统已经成为伯克利数据分析软件栈BDAS(Berkeley Data Analytics Stack)的重要组成部分

图2

Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件。
Spark生态系统组件的应用场景


图3

三、Spark运行框架

  1. 基本概念
    (1) RDD

弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型

(2) DAG

有向无环图,反映RDD之间的依赖关系

(3) Executor

是运行在工作节点的一个进程,负责运行Task

(4) Application

用户编写Spark应用程序

(5) Task

运行在Executor上的工作单元

(6) job

一个job包含多个Rdd及作用于相应RDD上的各种操作

(7) Stage

是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者被称为TaskSet,代表了一组关联的、相互之间没有Shuffle依赖关系任务组成的任务集

三、Spark架构设计

  1. Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进行(Executor)
    资源管理器可以自带或Mesos或YARN

  2. Spark所采用的Executor有两个优点:
    1.利用多线程来执行具体的任务,减少任务的启动开销
    2.Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销


    图4
  3. 一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成,一个Stage由多个没有Shuffle关系的Task组成。
    当执行一个Application时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行结果后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中

图5
  1. Spark运行基本流程

(1) 首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务发分配和监控
(2) 资源管理器为Executor分配资源,并启动Executor进程
(3) SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器Taskscheduler处理;Executor向SparkContext申请Task发给Executor运行,并提供应用程序代码
(4) Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。

图6
  1. Spark运行架构具有一下特点:

(1)每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task
(2) Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可。
(3) Task采用了数据本地性和推测执行等优化机制。

四、RDD概念原理

  1. RDD概念

(1)一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中不同节点上进行并行计算
(2) RDD提供了一组丰富的操作以支持常见的数据运算,分为"Action"和"Transformation"两种类型。

  1. RDD特性
    (1) 高效的容错性

现有容错机制:数据负责或者记录日志。
RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作

(2) 中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了必要的读写磁盘开销

(3) 存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化

  1. RDD之间的依赖关系
    (1) 窄依赖

窄依赖表现为一个父RDD的分区对应一个子RDD的分区或多个父RDD的分区对应一个子RDD的分区

图7

(2) 宽依赖

宽依赖则表现为存在一个父RDD的一个分区对应一个子RDD的多个分区

图8
  1. Stage划分
    (1) 在DAG中进行反向解析,遇到宽依赖就断开
    (2) 遇到窄依赖就把当前的RDD加入到Stage中
    (3) 将窄依赖尽量划分到同一个Stage中,可以实现流水线计算
图9

DAGScheduler的stage划分算法总结:会从触发action操作的那个rdd开始反向解析,首先会为最后一个rdd创建一个stage,反向解析的时候,遇到窄依赖就把当前的rdd加入到Stage,遇到宽依赖就断开,将宽依赖的那个rdd创建一个新的stage,那个rdd就是这个stage最后一个rdd。依此类推,遍历所有RDD为止。

  1. RDD运行过程
    RDD在Spark架构中的运行过程
    (1)创建RDD对象
    (2)SparkContext负责计算RDD之间的依赖关系,构建RDD;
    (3)DAGScheduler负责把DAG图分解成多个Stage,每个Stage,每个Stage中包含多个Task,每个Task会被TaskScheuler分发给各个WorkerNode上的Executor去执行。
图10
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容