前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark核心谈

Spark核心谈

作者头像
加米谷大数据
发布2018-07-25 17:42:48
4800
发布2018-07-25 17:42:48
举报
文章被收录于专栏:加米谷大数据加米谷大数据

在大数据领域,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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加米谷大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档