Spark设计理念与基本架构

https://www.cnblogs.com/swordfall/p/9280006.html

1.基本概念

Spark中的一些概念:

  • RDD(resillient distributed dataset):弹性分布式数据集。
  • Partition:数据分区。即一个RDD的数据可以划分为多少个分区。
  • NarrowDependency:窄依赖,即子RDD依赖于父RDD中固定的Partition。Narrow-Dependency分为OneToOneDependency和RangeDependency两种。
  • ShuffleDependency:shuffle依赖,也称为宽依赖,即子RDD对父RDD中的所有Partition都有依赖。
  • Task:是送到某个Executor上的工作单元,即具体执行任务。Task分为ShuffleMapTask和ResultTask两种。ShuffleMapTask和ResultTask分别类似于Hadoop中的Map和Reduce。Task是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责的。
  • Job:用户提交的作业。一个Job包含多个Task组成的并行计算,往往由Spark Action触发。
  • Stage:每个Job会被拆分成多组Task,作为一个TaskSet,其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage) 两种,Stage的边界就是发生shuffle的地方。一个Job可能被划分为一到多个Stage。
  • DAG(directed acycle graph):有向无环图。用于反映各RDD之间的依赖关系。
  • DAGScheduler:根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TaskScheduler。其划分Stage的依赖依据是根据RDD之间的依赖关系找出开销最小的调度方法。
  • TaskScheduler:将TaskSet(即Stage)提交给worker运行,每个Executor运行什么Task就是在此处分配的。TaskScheduler维护所有TaskSet,当Executor向Driver发送心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。另外TaskScheduler还维护所有Task的运行标签,重试失败的Task。
    • 在不同运行模式中任务调度器具体为:
    1. Spark on Standalone模式为TaskScheduler
    2. Yarn-Client模式为YarnClientClusterScheduler
    3. Yarn-Cluster模式为YarnClusterScheduler
  • 将这些术语串起来的运行层次图如下:

注意:一个Job=多个Stage,一个Stage=多个同种Task

2. Spark模块设计

整个Spark主要由以下模块组成:

  • Spark Core:Spark的核心功能实现,包括:SparkContext的初始化(Driver Application通过SparkContext提交)、部署模式、存储体系、任务提交与执行、计算引擎等。
  • Spark SQL:提交SQL处理能力,便于熟悉关系型数据库操作的工程师进行交互查询。此外,还为熟悉Hadoop的用户提交Hive SQL处理能力。
  • Spark Streaming:提供流式计算处理能力,目前支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等数据源。此外,还提供窗口操作。
  • GraphX:提供图计算处理能力,支持分布式,Pregel提供的API可以解决图计算中的常见问题。
  • MLlib:提供机器学习相关的统计、分类、回归等领域的多种算法实现。其一致的API接口大大降低了用户的学习成本。

Spark SQL、Spark Streaming、GraphX、MLlib的能力都是建立在核心引擎之上,如图:

2.1 Spark核心功能

Spark Core提供Spark最基础与最核心的功能,主要包括以下功能。

  • SparkContext:通常而言,DriverApplication的执行与输出都是通过SparkContext来完成的,在正式提交Application之前,首先需要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、Web服务等内容,应用程序开发者只需要使用SparkContext提供的API完成功能开发。SparkContext内置的DAGScheduler负责创建Job,将DAG中的RDD划分到不同的Stage,提交Stage等功能。内置的TaskScheduler负责资源的申请、任务的提交及请求集群对任务的调度等工作。
  • 存储体系:Spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地减少了磁盘I/O,提升了任务执行的效率,使得Spark适用于实时计算、流式计算等场景。此外,Spark还提供了以内存为中心的高容错的分布式文件系统Tachyou供用户进行选择。Tachyon能够为Spark提供可靠的内存级的文件共享服务。
  • 计算引擎:计算引擎由SparkContext中的DAGScheduler、RDD以及具体节点上的Executor负责执行的Map和Reduce任务组成。DAGScheduler和RDD虽然位于SparkContext内部,但是在任务正式提交与执行之前会将Job中的RDD组织成有向无环图(简称DAG),并对Stage进行划分,决定了任务执行阶段任务的数量、迭代计算、shuffle等过程。
  • 部署模式:由于单节点不足以提供足够的存储及计算能力,所以作为大数据处理的Spark在SparkContext的TaskScheduler组件中提供了对Standalone部署模式的实现和Yarn、Mesos、Kubernetes等分布式资源管理系统的支持。通过使用Standalone、Yarn、Mesos、Kubernetes等部署模式为Task分配计算资源,提高任务的并发执行效率。除了可用于实际生产环境的Standalone、Yarn、Mesos、Kubernetes等部署模式外,Spark还提供了Local模式和local-cluster模式便于开发和调试。

2.2  Spark扩展功能

为了扩大应用范围,Spark陆续增加了一些扩展功能,主要包括:

  • Spark SQL:SQL具有普及率高、学习成本低等特点,为了扩大Spark的应用面,增加了对SQL及Hive的支持。Spark SQL的过程可以总结为:首先使用SQL语句解析器(SqlParser)将SQL转换为语法树(Tree),并且使用规则执行器(RuleExecutor)将一系列规则(Rule)应用到语法树,最终生成物理执行计划并执行。其中,规则执行器包括语法分析器(Analyzer)和优化器(Optimizer)。Hive的执行过程与SQL类似。
  • Spark Streaming:Spark Streaming与Apache Storm类似,也用于流式计算。Spark Streaming支持Kafka、Flume、Twitter、MQTT、ZeroMQ、Kinesis和简单的TCP套接字等多种数据输入源。输入流接收器(Receiver)负责接入数据,是接入数据流的接口规范。Dstream是Spark Streaming中所有数据流的抽象, DStream可以被组织为DStream Graph。DStream本质上由一系列连续的RDD组成。
  • GraphX:Spark提供的分布式图计算框架。GraphX主要遵循整体同步并行(bulk synchronous parallell, BSP)计算模式下的Pregel模型实现。GraphX提供了对图的抽象Graph,Graph由顶点(Vertex)、边(Edge)及继承了Edge的EdgeTriplet(添加了srcAttr和dstAttr用来保存源顶点和目的顶点的属性)三种结构组成。GraphX目前已经封装了最短路径、网页排名、连接组件、三角关系统计等算法的实现,用户可以选择使用。
  • MLlib:Spark提供的机器学习框架。机器学习是一门涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多领域的交叉学科。MLlib目前已经提供了基础统计、分类、回归、决策树、随机森林、朴素贝叶斯、保序回归、协同过滤、聚类、维数缩减、特征提取与转型、频繁模式挖掘、预言模型标记语言、管道等多种数理统计、概率论、数据挖掘方面的数学算法。

3. Spark 模型设计

3.1 Spark编程模型

Spark应用程序从编写到提交、执行、输出的整个过程如图所示,图中描述的步骤如下:

1) 用户使用SparkContext提供的API(常用的有textFile、sequenceFile、runJob、stop等)编写Driver application程序。此外SQLContext、HiveContext及StreamingContext对SparkContext进行封装,并提供了SQL、Hive及流式计算相关的API。

2) 使用SparkContext提交的用户应用程序,首先会使用BlockManager和BroadcaseManager将任务的Hadoop配置进行广播。然后由DAGScheduler将任务转换为RDD并组织成DAG,DAG还将被划分为不同的Stage,一个Stage会由多个Task组成,多个Task将会被存放在TaskSet集合里,TaskSet即为Stage。最后由TaskScheduler将Task借助Netty通信框架将任务提交给集群管理器(Cluster Manager)。

3) 集群管理器(Cluster Manager)给任务分配资源,即将具体任务分配到Worker上,Worker创建Executor来处理任务的运行。Standalone、YARN、Mesos、Kubernetes、EC2等都可以作为Spark的集群管理器。

3.2 RDD计算模型

RDD可以看做是对各种数据计算模型的统一抽象,Spark的计算过程主要是RDD的迭代计算过程,如图所示。RDD的迭代计算过程非常类似与管道。分区数量取决于partition数量的设定,每个分区的数据只会在一个Task中计算。所有分区可以在多个机器节点的Executor上并行执行。

4. Spark基本架构

从集群部署的角度来看,Spark集群由以下部分组成:

  • Cluster Manager:Spark的集群管理器,主要负责资源的分配与管理。集群管理器分配的资源属于一级分配,它将各个Worker上的内存、CPU等资源分配给应用程序,但是并不负责对Execoutor的资源分配。目前,Standalone、YARN、Mesos、Kubernetes、EC2等都可以作为Spark的集群管理器。
  • Worker:Spark的工作节点、从节点。对Spark应用程序来说,由集群管理器分配得到资源的Worker节点主要负责以下工作:控制计算节点,创建并启动Executor,将资源和任务进一步分配给Executor,同步资源信息给Cluster Manager。
  • Executor:是为某个Appliation运行再Worker node上的一个进程,主要负责任务的执行以及与Worker、Driver App的信息同步。
  • Driver App:客户端驱动程序,也可以理解为客户端应用程序,运行Application的main()函数,用于将任务程序转换为RDD和DAG,并与Cluster Manager进行通信与调度。

这些组成部分之间的整体关系如图所示:

参考资料:

《深入理解Spark核心思想与源码分析》

https://blog.csdn.net/swing2008/article/details/60869183

【转帖】Spark设计理念与基本架构的更多相关文章

  1. Spark设计理念与基本架构

    1.基本概念 Spark中的一些概念: RDD(resillient distributed dataset):弹性分布式数据集. Partition:数据分区.即一个RDD的数据可以划分为多少个分区 ...

  2. 《深入理解Spark-核心思想与源码分析》(二)第二章Spark设计理念和基本架构

    若夫乘天地之正,而御六气之辩解,以游无穷者,彼且恶乎待哉? ——<庄子.逍遥游> 翻译:至于遵循宇宙万物的规律,把握“六气”的变化,遨游于无穷无尽的境域,他还仰赖什么呢! 2.1 初始Sp ...

  3. Spark Streaming揭秘 Day19 架构设计和运行机制

    Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...

  4. Spark Streaming揭秘 Day22 架构源码图解

    Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreamin ...

  5. Spring技术内幕:设计理念和整体架构概述(转)

    程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...

  6. 京东基于Spark的风控系统架构实践和技术细节

    京东基于Spark的风控系统架构实践和技术细节 时间 2016-06-02 09:36:32  炼数成金 原文  http://www.dataguru.cn/article-9419-1.html ...

  7. 大数据体系概览Spark、Spark核心原理、架构原理、Spark特点

    大数据体系概览Spark.Spark核心原理.架构原理.Spark特点 大数据体系概览(Spark的地位) 什么是Spark? Spark整体架构 Spark的特点 Spark核心原理 Spark架构 ...

  8. hadoop知识点总结(三)YARN设计理念及基本架构

    YARN设计理念与基本架构 1,MRv1的局限性:扩展性差,可靠性差,资源利用率低,无法支持多种计算框架 2,YARN基本设计思想 1)基本框架对比 Hadoop1.0中,JobTracker由资源管 ...

  9. Spark系列(四)整体架构分析

    架构流程图 说明  Driver端流程说明(Standalone模式) 使用spark-submit提交Spark应用程序Application. 通过反射的方式创建和构造一个DriverActor进 ...

随机推荐

  1. HDU 6595 Everything Is Generated In Equal Probability (期望dp,线性推导)

    Everything Is Generated In Equal Probability \[ Time Limit: 1000 ms\quad Memory Limit: 131072 kB \] ...

  2. Saint John Festival Gym - 101128J (凸包二分)

    Problem J: Saint John Festival \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 给出\(n\)个大点,和\(m\ ...

  3. LeetCode 953. Verifying an Alien Dictionary

    原题链接在这里:https://leetcode.com/problems/verifying-an-alien-dictionary/ 题目: In an alien language, surpr ...

  4. VMware空虚拟机通过网络安装系统时获取不到IP地址情况(基于Linux的DHCP服务器)

    当虚拟机提示no DHCP or proxyDHCP offers were received时 1.dhcp服务配置错误(留意句尾分号“  :”) 2.dhcp服务未启动(用 systemctl s ...

  5. RookeyFrame 代码层面 常用方法

    测试代码均写在这个类里面的,因为是测试嘛,所以表名那些就将就看了.最后写完了再贴上全部代码 类的路径:Rookey.Frame.Operate.Base -> Test -> Class1 ...

  6. 【ARC098F】Donation

    [ARC098F]Donation 题面 atcoder 题意: 给定一张\(n\)个点,\(m\)条边的无向图.这张图的每个点有两个权值 \(a_i,b_i\). 你将会从这张图中选出一个点作为起点 ...

  7. pfx格式和cer格式的区别

    来一篇大神的帖子就都懂了. 版权声明:本文为CSDN博主「天府云创」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn. ...

  8. shell 文件比较符

    文件夹不存在创建 if [ ! -d "/data/" ];then mkdir /data else echo "文件夹已经存在" fi 文件存在则删除 if ...

  9. [WEB安全]源码泄露总结

    原文链接:https://blog.csdn.net/qq_36869808/article/details/88895109 源码泄露总结: svn源码泄露:https://blog.csdn.ne ...

  10. Jmeter(四十八)_动态线程分析HTML测试报告

    概述 jmeterGUI模式下,性能测试的结果往往误差很大,因为GUI本身就会消耗一部分资源.所以我们常常用命令行去跑性能脚本,得出结果 同时,jmeter在命令行下还可以生成多维度的测试报告,里面包 ...