3、Spark2x 基于内存的计算引擎

Spark2x 基于内存的计算引擎

一、Spark 概述

Spark 是一种基于内存进行计算的分布式批处理引擎,他的主要工作是执行以下几种计算:

(1) 数据处理,可以进行快速的数据计算工作,具备容错性和可拓展性。

(2) 迭代计算,Spark 支持迭代计算,可以对多步数据逻辑处理进行计算工作。(3) 数据挖掘,在海量数据基础上进行挖掘分析,可以支持多种数据挖掘和机器学习算法。

对比于 hadoop 来说,Spark 更适用于数据处理,机器学习,交互式分析,最主要的是迭代计算中,它可以提供比 hadoop 更低的延迟,更高效的处理,并且开发效率更高,容错性也更好,但是需要注意的是,Spark 的性能只有在进行多层迭代计算的时候才会有显著的性能提升,相对于迭代层数少的现象,Spark 的计算性能提升的并不明显,基本和 Hadoop 持平。

Spark 是基于内存的分布式批处理引擎,它最大的特点是延迟小,具有很高的容错性和可拓展性,它和其他引擎的最大的区别在于,它支持进行迭代计算, Spark 主要适用的场景在低延迟的迭代计算中,它和传统的数据处理引擎最大的不同,在于 Spark 会将计算中的临时文件或者临时数据存放在内存中,这样在进行反复的引用时,就不需要再从磁盘中进行数据读取,而是选择更快的内存进行该操作。那么相比于传统 Hadoop 架构,Spark 理论速度会高于 Hadoop100 倍以上,但是,这个参数是有条件的,在迭代的层级较少的时候,这个差距并不明显,还有可能 Spark 的计算速度没有 hadoop 快,但是当反复的重复引用和迭代层数多以后,这个差距就会越来越明显。

(1) SparkCore:类似于 MR 的分布式内存计算框架,Core 是整体 Spark 计算的核心进程,上层的计算按照计算的类型进行区分,用于适应不同层面的和不同目的的计算,然后计算的流程和中间处理进程都是由 Core 来进行的计算,所以

本身从原理上来说,Spark 通过各种上层进程,满足了不同需求的计算,并且进行转化,下层的 Core 只进行计算,这样做就可以保证整体的所有组件都正常运行,并且达到资源的利用最大化,最大的特点是将中间计算结果直接放在内存中,提升计算性能。自带了 Standalone 模式的资源管理框架,同时,也支持 YARN、 MESOS 的资源管理系统。FI 集成的是 SparkOnYarn 的模式。其它模式暂不支持。(2) SparkSQL:SparkSQL 是一个用于处理结构化数据的 Spark 组件,作为

Apache    Spark 大数据框架的一部分,主要用于结构化数据处理和对数据执行类SQL 查询。通过 SparkSQL,可以针对不同数据格式(如:JSON,Parquet,ORC 等)

和数据源执行 ETL 操作(如:HDFS、数据库等),完成特定的查询操作。当我们需要对 Sql 进行相关的操作的时候,就像之前所说,首先用户通过 SQL 语句发送对应的请求到达 Spark 的 SQL 执行引擎,SQL 执行引擎将我们提交的请求做语义执行,转化为对应的对数据的操作,之后,将对应的操作和执行处理任务交给 Core 来进行计算。

(3) SparkStreaming :微批处理的流处理引擎,将流数据分片以后用 SparkCore 的计算引擎中进行处理。相对于 Storm,实时性稍差,优势体现在吞吐量上。

(4)     Mllib 和 GraphX 主要一些算法库。

(5)     FusionInsight Spark 默认运行在 YARN 集群之上。

(6)     Structured    Streaming 为 2.0 版本之后的 spark 独有。它是构建在

SparkSQL 上的计算引擎,其将流式数据理解成为是不断增加的数据库表,这种流式的数据处理模型类似于数据块处理模型,可以把静态数据库表的一些查询操作应用在流式计算中,Spark 执行标准的 SQL 查询,从无边界表中获取数据。

三、SparkCore 技术原理

1.Spark 的流程角色和基本概念

角色基本概念:

(1)Client:用户方,负责提交请求 Client 和之前的概念一样,是一个引擎内的进程,提供了对外访问的接口和对内组件进程的交互。

(2)Driver:负责应用的业务逻辑和运行规划(DAG)

Driver 是一个新的组件,和之前的处理引擎最大的不同在于,我们处理 Spark 的数据时,由于 Spark 是一个基于内存的处理引擎,所以其数据计算时有一个很典型的特点就是迭代化的计算处理,所以我们在具体将任务切分的时候,就不能像之前的处理引擎一样,只是单纯的将任务做切分下发,因为任务和任务之间这次存在了强耦合或者是弱耦合的关联性关系,而计算的结果又会出现相互的调用,也就是结果之间存在有依赖关系,所以我们在处理 Spark 的计算时,就必须对任务的执行过程做一个非常详细的控制,什么时候需要做什么计算,需要调用什么样的结果,这都是 Driver 需要进行规划和控制的,所以在我们执行相关的任务之前,Driver 就需要对任务做相关的划分和处理的顺序的控制,将任务的执行规划整合为 DAG 运行规划图来进行下发(DAG:DAG 是一个应用被切分为任务之后的执行的相关处理流程,主要是用来控制任务的执行顺序和调用的数据,DAG

是一个有向无环图,也就是说,任务执行是有相关的执行顺序的,这就保证了有向,但是任务同时又是一定会执行完毕的,所以无环就保证了任务一定会有终止。)(3)ApplicationMaster:负责应用的资源管理,根据应用需要,向资源管理部门(ResourceManager)申请资源。

这里说的 AppMaster 和 MR 的有一定的不同,区别如下:

①MR 的 AppMaster 需要负责的功能很多,但是 Spark 的 AppMaster 功能较单一

②MR 的 AppMaster 在创建完成之后需要和 RM 模块进行注册操作,Spark 的不需要

在向 RM 申请资源之后,MR 的 AppMaster 需要自己和 NM 通信要求其拉起

Container,Spark 的不需要,Executor 是由 RM 直接下发创建的。 ④Container 和 Executor 创建完成之后,如果是 MR 的 AppMaster,则会下发 task 到 Container 中,如果是 Spark,则由 driver 下发 task。

如果用户需要查询相关的处理进度信息,MR 的 AppMaster 负责返回执行进度,如果是 Spark,则由 Driver 执行。

执行完成之后 MR 的 AppMaster 需要注销,Spark 的 AppMaster 不需要注销。

如果执行过程中出现故障,那么 MR 的 AppMaster 负责重新下发 task 执行,在

Spark 中这个工作由 Driver 做。

所以综上所述,MR 和 Spark 的 AppMaster 最大的区别在于,MR 的 AppMaster 是

一个综合管理的进程,但是 Spark 中,这个工作就由 Driver 来做,AppMaster 只负责资源的计算和申请操作。Driver 是一个固定进程&

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值