Spark核心谈

在大数据领域,Spark平台因计算模型涵盖MapReduce,Streaming,SQL,Machine Learning,Graph等,为大数据计算提供一栈式解决方案,以及出众的性能表现;迅速在学术界和工业界风靡。这些特性主要得益于其在大数据领域技术的继承和创新,在其架构模型中有三个核心要素:DAG、RDD、分布式计算平台.

DAG

DAG(Direct Acyclic Graph 有向无环图)

有向:节点对节点有依赖方向。

无环:无法从任意顶点出发经过若干条边回到该点,即任何节点不能依赖自身,否则是死循环(自反性)。保证计算可执行。

上图中是一个运算式的树表示和图表示,可以看出有向无环图是计算最简洁有效表示形式,是很高效的运算模型。

RDD

RDD即弹性分布式数据数据集(resilient distributed dataset),它是一种分布式的内存抽象,是集群中多台机器上数据分区的集合,具有位置感知和伸缩性。使得每一步计算不必进行磁盘IO成为现实,极大提升数据处理的效率。 RDD也是DAG上的点,并记录着自身依赖(向)的RDD,分为窄依赖(narrow dependencies)和宽依赖(shuffle dependencies) 窄依赖:一个RDD分区仅被一个Child RDD分区依赖,如map、filter。 宽依赖:一个RDD分区被多个Child RDD分区依赖,如join。

这种依赖特性对于一次计算的分解和失败恢复至关重要。

RDD并为DAG编程提供良好的抽象api,分为两类算子:Transformation和Action 1.Transformation(变换) Transformation是惰性的,需要等到Action操作时,才会触发操作。如map、filter算子 2.Action(动作)

Action会触发提交job到分布式调度系统进行运算。如count、foreach算子

分布式计算平台

分布式计算集群由三部分组成:

Frontend:一次请求或一个app的主控者,往往用作api实现。

Master:负责任务的分配及资源的调度。中心单例,出现故障后通过选举机制产生leader以保证高可用性。 Backend:具体任务的执行者,一个庞大的集群,提供海量的运算能力。

Spark也是由这三个角色组成计算服务的,它们分别是Client、Master、Worker;Spark中Client作为Application提交入口。Master主要负责资源和application调度。Worker作为具体计算资源的持有者,受指派创建Executor/Dirver进程执行运算,这样可以保证application间隔离和资源准确分配。Spark一个计算就是一个application,application创建过程分为两步,下面以Cluster运行模型说明具体的调度过程。

创建Application实例过程

1.启动Client进程向Master发送DirverDescription请求 2.Master将Driver加入调度队列等待执行 3.Master调度到可用的Worker发送LaunchDirver指令启动Dirver,并向Client发送SubmitDriverResponse响应 4.Client进程销毁 5.Worker启动DriverRunner线程

6.DriverRunner内启动Application进程

提交运行Application过程

1.执行Application逻辑,创建SparkContext,这时AppClient会向Master发起RegisterApplication注册申请 2.Master将app加入调度队列 3.Master调度到可用的Worker(可能多个)发送LaunchExecutor指令启动Executor(分配额定的内存和cpu资源) 4.Worker启动ExecutorRunner线程 5.ExecutorRunner启动ExecutorBackend进程 6.ExecutorBackend向SchedulerBackend发起注册申请 7.SparkContext的runJob方法触发DAGScheduler调度 8.DAGScheduler将rdd切分为stage,生成Taskset;提交给TaskScheduler 9.TaskScheduler通过SchedulerBackend调度资源执行task 10.SchedulerBackend将task分发给相应的ExecutorBackend, 11.ExecutorBackend通过Executor提交TaskRunner并发执行 12.Task执行成功后将result反馈给TaskScheduler 13.TaskScheduler进行下一个stage作业执行直至运算到最终的Action

其中2~6和7~9是并行处理的,Spark在并发上混用actor和thread;actor作为事件驱动模型协调集群间的事件响应,线程作为Task执行的载体。

RDD DAG分解

RDD DAG的逐级分解决定了分布式运算的最小颗粒和算子的并发编排。

RDD:RDD以单向链表构成DAG,执行时由最后一个RDD反向广度遍历依次提交的父操作。 Stage:是以RDD变换(Transformation)中的Shuffle Dependencies为划分点,因为这样的一系列操作理论上是可以在同一台设备上执行的。 Task:在stage上生成多个Task,Task是以分区来划分的,这样可以将一个大的Stage分布到多台机器上执行。

以国家规划大数据产业发展战略为指引,以全国大数据技术和大数据分析人才的培养为使命,以提升就业能力、强化职业技术为目标。面向社会提供大数据、人工智能等前沿技术的培训业务。

加 米 谷 大 数 据

公众号ID

DtinoneBD

本文分享自微信公众号 - 加米谷大数据(DtinoneBD)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技术分享 | Spark RDD详解

    1、RDD是什么 RDD:Spark的核心概念是RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这...

    加米谷大数据
  • Spark RDD详解 -加米谷大数据

    1、RDD是什么 RDD:Spark的核心概念是RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这...

    加米谷大数据
  • Spark RDD Map Reduce 基本操作

    RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。从编程的角度来看,RDD可以简单看成是一个数组。和普通数组的区别是,RDD中的数...

    加米谷大数据
  • spark原著

    MapReduce 批处理计算模型 Pregel 图处理模型 Strom/impala 流式处理模型

    用户7625070
  • RDD原理与基本操作 | Spark,从入门到精通

    欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你,...

    美图数据技术团队
  • Spark Core——RDD何以替代Hadoop MapReduce?

    继续前期依次推文PySpark入门和SQL DataFrame简介的基础上,今日对Spark中最重要的一个概念——RDD进行介绍。虽然在Spark中,基于RDD...

    luanhz
  • Spark核心数据结构RDD的定义

    天策
  • Spark系列(四)RDD编程

    Spark大数据处理的核心是RDD,RDD的全称为弹性分布式数据集,对数据的操作主要涉及RDD的创建、转换以及行动等操作,在Spark系列(二)中主要介绍了RD...

    张凝可
  • Spark Core源码精读计划18 | 与RDD的重逢

    在前面的17篇文章中,我们对以SparkContext和SparkEnv为中心展开的Spark Core底层支撑组件有了比较深入的理解,当然有一些重要的组件,会...

    暴走大数据
  • Spark中RDD的运行机制

    Spark 的核心是建立在统一的抽象 RDD 之上,基于 RDD 的转换和行动操作使得 Spark 的各个组件可以无缝进行集成,从而在同一个应用程序中完成大数据...

    暴走大数据

扫码关注云+社区

领取腾讯云代金券