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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏包子铺里聊IT

五分钟深入 Hadoop 输入优化

当面试公司问起 Hadoop 经验时,我们当然不能只停留在 Mapper 干了什么、Reducer 干了什么。没有 Performance Tuning 怎么...

2717
来自专栏加米谷大数据

技术分享 | 提升Hadoop性能和利用率你知道有哪些吗?

时下流行的词汇是大数据和Hadoop。了解大数据的知道Hadoop有三个组件,即HDFS、MapReduce和Yarn。 HDFS代表Hadoop分布式文件系统...

3565
来自专栏数据科学与人工智能

【Spark研究】用Apache Spark进行大数据处理第一部分:入门介绍

什么是Spark Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于20...

2587
来自专栏灯塔大数据

塔说 | 常见Hadoop面试题及答案解析

导读:Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和...

3645
来自专栏数据派THU

手把手教你入门Hadoop(附代码资源)

作者:GETINDATA公司创始人兼大数据顾问彼得亚·雷克鲁斯基(Piotr Krewski)和GETINDATA公司首席执行官兼创始人亚当·卡瓦(Adam K...

1624
来自专栏PPV课数据科学社区

数据仓库Hive 基础知识(Hadoop)

Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,...

5338
来自专栏CSDN技术头条

这12件事让我很讨厌Hadoop

文章作者Andrew C. Oliver是一位专业的软件顾问,同时还是北卡罗来纳州达勒姆大数据咨询公司Open Software Integrators的总裁和...

2178
来自专栏叁金大数据

漫谈未来的HDFS

前面我们提到的HDFS,了解了HDFS的特性和架构。HDFS能够存储TB甚至PB规模的数据是有前提的,首先数据要以大文件为主,其次NameNode的内存要足够大...

1543
来自专栏CSDN技术头条

YARN & Mesos,论集群资源管理所面临的挑战

在国内,大部分的Spark用户都是由Hadoop过渡而来,因此YARN也成了大多Spark应用的底层资源调度保障。而随着Spark应用的逐渐加深,各种问题也随之...

2438
来自专栏数据科学与人工智能

【Spark研究】用Apache Spark进行大数据处理之入门介绍

什么是Spark Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于20...

2939

扫码关注云+社区

领取腾讯云代金券