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架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Antd v5.8 modal.confirm 手动控制关闭

开发中经常需要使用操作提示弹窗,在 Antd 中的 Modal 组件提供了 confirm 方法,可以快速实现操作提示弹窗。本文就来介绍一下如何使用 Modal.useModal 创建弹窗,并且实现手动控制弹窗的关闭逻辑。 一、代码演示 import { message, Modal } f…

C++ SEH结构化异常捕获处理(双平台支持 Linux、Windows)。

测试: try_ctor();try_call([](){printf("1111111111111111111111\r\n");int* p NULL;*p 100;throw 1;// try_eeh();}, [](){printf("2222222222222222222222\r\n");}); 设置NULL指针P的值引发程式崩溃,可以被正确捕获&#xff0…

禾匠榜店商城系统 RCE漏洞复现

0x01 产品简介 禾匠榜店商城系统是浙江禾匠信息科技有限公司的一套基于PHP和MySQL的商城系统。 0x02 漏洞概述 禾匠榜店商城系统的api/testOrderSubmit模块下的preview方法存在命令执行漏洞,攻击者可以向服务器写入木马文件,直接获取服务器权限 0x03 漏洞概述 FOFA:bod…

2312llvm,编译X86的clang与llvm

先从这里下载llvm-project. 然后解压后,进入clang目录. 输入命令: cmake -DLLVM_ENABLE_PROJECTSclang -G "Visual Studio 17 2022" -A Win32 -Thostx64 ..\llvm表示,用x64的cl编译X86版本,用-A Win32代表X86版本. 然后生成llvm.sln有2M大. 编译选项技巧: 因为,内存…

带你手把手解读firejail沙盒源码(0.9.72版本) (三) fcopy

文章目录 main.c该模块的各个函数功能详解selinux_relabel_pathcopy_filemkdir_attrcopy_linkproc_pid_to_selffs_copydircheckduplicate_dirduplicate_fileduplicate_linkmain Makefile main.c 文件总结 ├── fcopy │ ├── Makefile │ └── main.cmain.c #include…

【腾讯云HAI域探密】- HAI为NPL保驾护航

近些年,随着机器学习技术的蓬勃发展,以GPU为代表的一系列专用芯片以优越的高性能计算能力和愈发低廉的成本,在机器学习领域得到广泛认可和青睐。GPU等专用芯片以较低的成本提供海量算力,已经成为机器学习和AI人工智能领域的核心利…

用EXCEL计算NTC、BS、电压等AD参数

前言 之前计算NTC的AD值算得很麻烦,因为51内核的单片机不支持除法运算,更别说浮点运算了。 EXCEL自动算出参数就显得很方便了。 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 理论基础 参考这篇文章NTC热敏电阻温度采集…

企业数字化转型进入深海区:生成式AI时代下如何制定数据战略

云计算适用于任何人,任何企业,云计算的分支——人工智能(AI)正发展的迅疾如火,炙手可热。特别是ChatGPT已经挑战各行各业对于AI的认知。 作为全球云计算领域的年度风向标活动,12月12日,亚马逊云科技2023 re:Invent中国…

Web漏洞分析-文件解析及上传(下)

随着互联网的迅速发展,网络安全问题变得日益复杂,而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞,通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析&…

基于C/C++的非系统库自定义读写ini配置

INI文件由节、键、值组成。 节 [section] 参数 (键值) namevalue 这里将常用的操作方式封装成了一个dll供外部使用 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBCFG_EXPORTS // 符号…

有什么简单实用的民宿管理系统软件?民宿如何开拓盈利渠道?

民宿是近些年兴起的一种小型住宿设施,一般就是利用当地的一些民房改造的。民宿的装修风格一般更加具有本土风味,很适合拍照打卡。不过民宿由于规模比较小,所以员工一般也不多,很多民宿的入住登记都要旅客自己弄。所以有很多民宿会…

STC8模板代码

目录 STC8依赖文件库 程序结构 GPIO操作 初始化所有 使用宏配置IO口 使用函数配置IO口 UART操作 头文件 初始化 UART1 UART2 UART3 UART4 接收逻辑 UART1 UART2 UART3 UART4 发送 UART1 UART2 UART3 UART4 配置printf Timer操作 导入依赖 初始化 Time…

Apache DolphinScheduler 社区荣获 “2023 年度优秀开源技术团队“ 奖项

在开源社区日益繁荣的今天,我们非常荣幸地宣布:Apache DolphinScheduler 社区在 OSCHINA 平台的评选中荣获了“2023 年度优秀开源技术团队”奖项。这一奖项反映了我们社区在过去一年里在内容发表的深度与广度、活动运营影响力以及对开源文化的推广方面所…

AGILE-SCRUM

一个复杂的汽车ECU开发。当时开发队伍遍布全球7个国家,10多个地区,需要同时为多款车型定制不同的软件,头疼的地方是: 涉及到多方人员协调,多模块集成和管理不同软件团队使用的设计工具、验证工具,数据、工…

JS-sessionStorage、localStorage和cookie

sessionStorage 仅在浏览器当前窗口关闭之前有效,即使是刷新或者进入该窗口下的的另一个页面,数据也仍然存在;关闭浏览器或到另一个窗口,数据就是不存在的。 // 设置sessionStorage保存到本地,第一个为变量名,第二个是…

实验一 门电路逻辑功能及测试

一、实验目的 1.熟悉门电路逻辑功能. 2.熟悉数字电路学习机及示波器使用方法。 二、实验仪器及材料 1.双踪示波器 2.器件 74LS00 二输入端四与非门 2片 74LS20 四输人端双与非门 1片 74LS86 二输入端四异或门 1片 74LS04 六反相器 1片 …

如何在本地搭建Oracle数据库并实现无公网ip通过PLSQL工具远程连接数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 正文开始前给大家推荐个网站,前些天发…

基于JAVA的校园电子商城系统论文

摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此校园购物信息的…

西南科技大学数字电子技术实验七(4行串行累加器设计及FPGA实现)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结…

正则表达式入门与实践

文章目录 一、为什么要有正则二、正则表达式基础概念三、Pattern与Matcher类的使用(一)Pattern类的常用方法(二)Matcher类的常用方法四、常用正则规则及其含义(一)规范表示(二)数量表示(三)逻辑运算符五、String对正则表达式的支持六、实践演练(一)匹配给定文本中的…