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