Spark分布式内存计算框架

目录

一、Spark简介

(一)定义

(二)Spark和MapReduce区别

(三)Spark历史

(四)Spark特点

二、Spark生态系统

三、Spark运行架构

(一)基本概念

(二)架构设计

(三)Spark运行基本流程

四、Spark编程模型

(一)核心数据结构RDD

(二)RDD上的操作

(三)RDD的特性

(四)RDD 的持久化

(五)RDD之间的依赖关系 

(六)RDD计算工作流 

五、Spark的部署方式


一、Spark简介

(一)定义

        Spark是一种基于内存的、用以实现高效集群计算的平台。准确地讲,Spark是一个大数据并行计算框架,是对广泛使用的MapReduce计算模型的扩展。

(二)Spark和MapReduce区别

        Spark有着自己的生态系统,但同时兼容HDFS、Hive等分布式存储系统,可以完美融入Hadoop的生态圈中,代替MapReduce去执行更高的分布式计算。两者区别如图所示,基于MapReduce的计算引擎通常会将中间结果输出到磁盘上进行存储和容错;而Spark则是将中间结果尽量保存在内存中以减少底层存储系统的I/O,以提高计算速度。

        Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
        Spark是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
        Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。

(三)Spark历史

        Spark最初由美国加州大学伯克利分校(UC Berkeley)的AMP实验室于2009年开发,项目采用Scala编写。是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
        2010年开源。
        2013年6月成为Apache孵化项目。2013年Spark加入Apache孵化器项目后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。
        2014年2月成为Apache顶级项目。Spark在2014年打破了Hadoop保持的基准排序纪录:Spark/206个节点/23分钟/100TB数据; Hadoop/2000个节点/72分钟/100TB数据;Spark用十分之一的计算资源,获得了比Hadoop快3倍的速度。

(四)Spark特点

1、运行速度快:与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。
2、易用:Spark支持Java、Python、Scala和R等多种语言的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的Shell,可以非常方便地在这些Shell中使用Spark集群来验证解决问题的方法。
3、通用性:Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。减少了开发和维护的人力成本和部署平台的物力成本。
4、兼容性:Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。

二、Spark生态系统

        Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案。因此,Spark所提供的生态系统足以应对上述三种场景,即同时支持批处理、交互式查询和流数据处理。
        现在,Spark生态系统已经成为伯克利数据分析软件栈BDAS(Berkeley Data Analytics Stack)的重要组成部分。

BDSA架构

Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming(Structured Streaming)、MLLib和GraphX等组件。 

Spark生态系统

1、Spark Core

        Spark Core包含Spark最基础和最核心的功能,如内存计算、任务调度、部模式、故障恢复、存储管理等,主要面向批数据处理。Spark Core 建立在统一的抽象RDD 之上,使其可以以基本一致的方式应对不同的大数据处理场景;需要注意的是,Spark Core 通常被简称为Spark。

2、Spark SQL

        Spark SQL是用于结构化数据处理的组件,允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员不需要自己编写Spark 应用程序,开发人员可以轻松地使用SOL 命令进行查询,并进行更复杂的数据分析。

3、Spark Streaming

        Spark Streaming是一种流计算框架,可以支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。 Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等。

4、Structured Streaming

        Structured Streaming是一种基于Spark SQL引擎构建的、可扩展且容错的流处理引擎。通过一致的API, Structured Streaming 可以使开发人员像写批处理程序一样编写流处理程序,降低了开发人员的开发难度。

5、MLlib(机器学习)

        MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只需具备一定的理论知识就能进行机器学习的工作。

6、GraphX(图计算)

        GraphX是Spark中用图计算的API,可认为是Pregel在Spark 上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

下表给出了在不同应用场景下,可以选用的Spark生态系统中的组件和其他框架。

Spark的应用场景
应用场景时间跨度其他框架Spark生态系统中的组件
复杂的批量数据处理小时级MapReduce、HiveSpark
基于历史数据的交互式查询分钟级、秒级Impala、Dremel、DrillSpark SQL
基于实时数据流的数据处理毫秒、秒级Storm、S4Spark Streaming Structured Streaming
基于历史数据的数据挖掘——MahoutMLlib
图结构数据的处理——Pregel、HamaGraphX

三、Spark运行架构

        Spark Core包含Spark最基础和最核心的功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,当提及Spark运行架构时,就是指Spark Core的运行架构。

(一)基本概念

RDD:是Resillient Distributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系。
Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task。
应用(Application):用户编写的Spark应用程序。
任务( Task ):运行在Executor上的工作单元。
作业( Job ):一个作业包含多个RDD及作用于相应RDD上的各种操作。
阶段( Stage ):是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为阶段,或者也被称为任务集合,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集。

(二)架构设计

        Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor) 资源管理器可以自带或Mesos或YARN。

Spark运行架构

        一个应用由一个Driver和若干个作业构成,一个作业由多个阶段构成,一个阶段由多个没有Shuffle关系的任务组成 当执行一个应用时,Driver会向集群管理器申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中。

Spark中各种概念之间的相互关系

(三)Spark运行基本流程

1、首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控。SparkContext对象代表了和一个集群的连接。
2、资源管理器为Executor分配资源,并启动Executor进程。
3、SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,并提供应用程序代码。
4、Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源 。

Spark运行基本流程图

四、Spark编程模型

(一)核心数据结构RDD

        Spark将数据抽象成弹性分布式数据集(Resilient Distributed Dataset,RDD),RDD实际是分布在集群多个节点上数据的集合,通过操作RDD对象来并行化操作集群上的分布式数据。

RDD有两种创建方式:
(1)并行化驱动程序中已有的原生集合;
(2)引用HDFS、HBase等外部存储系统上的数据集。

(二)RDD上的操作

转换(Transformation)操作:将一个RDD转换为一个新的RDD。

行动(Action)操作:行动操作会触发Spark提交作业,对RDD进行实际的计算,并将最终求得的结果返回到驱动器程序,或者写入外部存储系统中。 

(三)RDD的特性

        Spark采用RDD以后能够实现高效计算的原因主要在于:
(1)高效的容错性
        现有容错机制:数据复制或者记录日志
        RDD:血缘关系、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作
(2)中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销
(3)存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化

(四)RDD 的持久化

        由于Spark RDD是惰性求值的,因此,当需要多次使用同一个转换完的RDD时,Spark会在每一次调用行动操作时去重新进行RDD的转换操作,这样频繁的重算在迭代算法中的开销很大。 为了避免多次计算同一个RDD,可以用persist()或cache()方法来标记一个需要被持久化的RDD,一旦首次被一个行动(Action)触发计算,它将会被保留在计算结点的内存中并重用。

(五)RDD之间的依赖关系 

1、Shuffle操作

2、窄依赖和宽依赖 

        窄依赖表现为一个父RDD的分区对应于一个子RDD的分区或多个父RDD的分区对应于一个子RDD的分区;宽依赖则表现为存在一个父RDD的一个分区对应一个子RDD的多个分区。

(六)RDD计算工作流 

输入:定义初始RDD,数据在Spark程序运行时从外部数据空间读取进入系统,转换为Spark数据块,形成最初始的RDD;
计算:形成RDD后,系统根据定义好的Spark应用程序对初始的RDD进行相应的转换操作形成新的RDD;然后,再通过行动操作,触发Spark驱动器,提交作业。如果数据需要复用,可以通过cache操作对数据进行持久化操作,缓存到内存中;
输出:当Spark程序运行结束后,系统会将最终的数据存储到分布式存储系统中或Scala数据集合中。

五、Spark的部署方式

Spark支持三种不同类型的部署方式,包括:
Standalone(类似于MapReduce1.0,slot为资源分配单位)
Spark on Mesos(和Spark有血缘关系,更好支持Mesos)
Spark on YARN

Spark on YARN架构

  • 33
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Spark 是一个基于内存分布式计算框架,它可以在大规模数据集上进行快速的数据处理。Spark 的主要特点是速度快、易用性高、支持多种编程语言和数据源,并且可以与 Hadoop 集成使用。Spark 的核心是 RDD(Resilient Distributed Datasets,弹性分布式数据集),它是一个可分区、可并行计算、可容错的数据集合。Spark 还提供了丰富的 API,包括 Spark SQL、Spark Streaming、MLlib 和 GraphX 等,可以满足不同的数据处理需求。Spark分布式计算模型基于 DAG(Directed Acyclic Graph,有向无环图)执行引擎,可以实现高效的数据处理和计算Spark 的应用场景包括数据挖掘、机器学习、图计算、实时数据处理等。 ### 回答2: Spark 是一种流行的开源分布式计算框架,它用于处理大量数据。Spark 的主要目标是提高大规模数据处理的速度,并增强数据处理的可伸缩性、容错性和易用性。 Spark 的主要特点是它可以将数据集分成多个部分,并通过分布式计算来处理这些数据。Spark 支持多种数据源,如 Hadoop HDFS、Cassandra、HBase 和 Amazon S3 等,因此灵活性强。 Spark 的核心库是 Spark Core,它提供了分布式任务调度、内存管理和错误恢复等核心功能。同时 Spark 也提供了各种扩展库,如 Spark SQL、Spark Streaming、Spark MLlib 和 GraphX 等,用于处理不同类型的数据。 Spark 采用 RDD(弹性分布式数据集)模型进行数据处理。RDD 代表一个分区的不可变数据集,可以并行处理在分布式环境中存储的数据。RDD 具有弹性、不可变、分区、可持久化等特性,可以有效地支持各种数据处理操作,如 map、reduce、filter、join 等等。 除了 RDD 模型,Spark 还支持DataFrame 和 DataSet 模型。DataFrame 是一种类似于关系型数据库表的数据结构,它具有优秀的优化性能和易用性。DataSet 模型是 DataFrame 的超集,它提供了静态类型检查和面向对象的编程接口等更高级的功能。 Spark 可以使用多种编程语言编写,在 Java、Scala 和 Python 等语言中都可以使用 Spark。同时,Spark 也支持在 YARN、Mesos 和 Kubernetes 等多种资源管理平台上运行。对于 Spark 用户而言,几乎可以无缝切换各种编程语言和资源管理平台。 总之,Spark 是一个非常重要和流行的分布式计算框架,它在大数据处理领域具有广泛的应用和积极的社区支持,也正在不断地发展壮大。 ### 回答3: Spark 是一款基于内存分布式计算框架,被认为是目前最流行的大数据计算框架之一。它不仅能够执行批处理作业,而且还可以处理流式数据和机器学习等任务。与 Hadoop MapReduce 相比,Spark 的优势主要在于速度。 Spark 采用了 RDD(Resilient Distributed Datasets)模型,可以自动将数据划分为多个分区并在多个节点上并行计算,从而实现高效的计算。RDD 可以在内存中缓存,减少了输入/输出的操作,同时也减少了磁盘 I/O 的使用。此外,Spark 还支持针对 RDD 转换和操作的各种 API,包括 map、reduce、filter、join 等常见操作。这使得开发人员可以轻松地构建复杂的数据流和算法。 Spark 还提供了许多组件和库,包括 Spark Streaming、Spark SQL 和 MLlib 等,为不同的任务提供了不同的解决方案。Spark Streaming 可以用于流处理,Spark SQL 可以用于 SQL 查询,而 MLlib 则提供了各种机器学习算法和工具。 总之,Spark 是一个快速、易于使用和高度可扩展的分布式计算框架,是大数据行业的热门技术之一。它可以用于处理各种形式的数据并执行各种任务,无论是批处理还是流处理,还是机器学习,都可以使用 Spark 轻松处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francek Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值