Apache Spark分布式计算框架架构介绍

目录

一、概述

二、Apache Spark架构组件栈

2.1 概述

2.2 架构图

2.3 架构分层组件说明

2.3.1 支持数据源

2.3.2 调度运行模式

2.3.3 Spark Core核心

2.3.3.1 基础设施

2.3.3.2 存储系统

2.3.3.3 调度系统

2.3.3.4 计算引擎

2.3.4 生态组件

2.3.4.1 Spark SQL

2.3.4.2 Spark Streaming

2.3.4.3 GraphX

2.3.4.4 Spark MLlib

2.3.4.5 Spark R

三、Apache Spark 的运行时架构

3.1 概述

3.2 架构图

3.3 组件角色说明

3.3.1 Cluster Manager

3.3.2 Worker

3.3.3 Executor

3.3.4 Driver

3.3.5 Application

3.4 Spark 运行流程

3.4.1 概述

3.4.2 运行流程图

3.4.3 运行流程步骤说明

四、Spark 的特点

4.1 计算速度快

4.2 易于使用

4.3 通用大数据框架

4.4 支持多种资源管理器

4.5 生态圈丰富


一、概述

Apache Spark 是通用的分布式大数据计算引擎 Spark UC Berkeley AMPLab(美国加州大学伯克 利分校的 AMP 实验室)开源的通用并行框架。 Spark 拥有 Hadoop MapReduce 所具有的优点,但不同于 Hadoop MapReduce 的是, Hadoop 每次经过 Job行的中间结果都存储到 HDFS 磁盘上,而 Spark Job 中间输出结果可以保存在内存中,而不再需要读写 HDFS 。因为内存的读写速度与磁盘的读写速度不在一个数量级上,所以Spark 利用内存中的数据能更快速地完成数据的处理。

Spark 启用了弹性分布式数据集( Resilient Distributed Dataset , RDD) ,除了能够提高交互式查询效率,还可以优化迭代器的工作负载。由于弹性分布式数据集的存在,使得数据挖掘与机器学习等需要迭代的 MapReduce 的算法更容易实现。

官网地址:spark.apache.org

二、Apache Spark架构组件栈

2.1 概述

Spark 基于 Spark Core 建立了 Spark SQL、Spark Streaming、MLlib、GraphX、SparkR 核心组件,基于不同组件可以实现不同的计算任务,这些计算任务的运行模式有:本地模式、独立模式(Standalone)、Mesos 模式、 YARN 模式。Spark 任务的计算可以从 HDFS、S3、Hypertable、HBase或Cassandra等多种数据源中存取数据。

2.2 架构图

2.3 架构分层组件说明

2.3.1 支持数据源

Spark 任务的计算可以从 HDFS、S3、Hypertable、HBase或Cassandra等多种数据源中存取数据。

2.3.2 调度运行模式

Spark 的运行模式主要包括 Local模式、 Standalone 模式、 On YARN、 On Mesos 和运行在 AWS 等公有云平台上。

2.3.3 Spark Core核心

Spark 的核心功能实现包括基础设施、存储系统、调度系统和计算引擎。

2.3.3.1 基础设施

Spark 中有很多基础设施,这些基础设施被 Spark 中的各种组件广泛使用,包括 SparkConf (配置信息) 、SparkContext ( Spark 上下文) 、Spark RPC (远程过程调用)、ListenerBu (事件总线) 、MetricsSystem (度量系统) 、SparkEnv (环境变量)等。

2.3.3.2 存储系统

Spark 存储系统用于管理 Spark 运行过程中依赖的数据的存储方式和存储位置。Spark 存储系统首先考虑在各节点的内存中存储数据,当内存不足时会将数据存储到磁盘上,这种内存优先的存储策略使得 Spark 的计算性能无论在实时流计算还是在批量'计算的场景下都表现很好。 Spark 的内存存储空间和执行存储空间之间的边界可以
灵活控制。

2.3.3.3 调度系统

Spark 调度系统主要由 DAGScheduler 、TaskScheduler组成。DAGScheduler 负责创建 Job 、将 DAG 中的RDD 划分到不同 Stage 、为 Stage 创建对应的Task 、批量提交 Task 等。 TaskScheduler 负责按照 FIFO (First Input First Output. 先进先出 ) 或 FAIR (公平调度)等调度算法对 Task 进行批量调度。

2.3.3.4 计算引擎

计算引擎由内存管理器、任务管理器、 Task Shuffle 管理器等组成。

2.3.4 生态组件

2.3.4.1 Spark SQL

Spark SQL 提供基于 SQL 的数据处理方式,使得分布式数据的处理变得更加简单。此外,Spark 提供了对 Hive SQL 的支持。

2.3.4.2 Spark Streaming

Spark Streaming 提供流计算能力,支持 Kafka 、flume、 Kinesis 、TCP 多种流式数据源。此外,Spark Streaming 提供了基于时间窗口的批量流操作,用于对一定时间周期内的流数据执行批量处理。

2.3.4.3 GraphX

GraphX 用于分布式图计算。通过 Pregel 提供的 API 可以快速解决图计算中的常见问题。

2.3.4.4 Spark MLlib

Spark MLlib 为 Spark机器学习库 。Spark MLlib 提供了统计、分类、回归等多种机器学习算法的实现,其简单易用的 API 接口降低 了机器学习的门槛。

2.3.4.5 Spark R

Spark R是一个R语言包, 提供了轻量级R语言使用Spark的方式。Spark R实现了分布式的数据框,支持类似查询、过滤及聚合的操作(类似R语言中的数据框包dplyr ),使得基于R语言能够更方便处理大规模的数据集。同时Spark R 支持基于Spark MLlib 进行机器学习。

三、Apache Spark 的运行时架构

3.1 概述

Spark 的集群架构主要由 Cluster Manager (管理器)、 Worker (工作节点)、 Executor(执行器)、 Driver (驱动器)、 Application (应用程序) 五部分组成。

3.2 架构图

3.3 组件角色说明

3.3.1 Cluster Manager

Spark 集群管理器,主要用于整个集群资源的管理和分配。根据部署模式的不同,可以分为 Local、 Standalone、 YARN、Mesos、AWS。

3.3.2 Worker

Spark 的工作节点,用于执行提交的任务。 Worker 的工作职责如下:

  • 通过注册机制向Cluster Manager 汇报自身的CPU和内存等资源使用信息。
  • 在Master 的指示下创建并启动 Executor,Executor 是真正的计算单元。
  • 将资源和任务进一步分配给Executor 并运行。
  • 同步资源信息和Executor 状态信息给Cluster Manager。

3.3.3 Executor

真正执行计算任务的组件,是某个Application 运行在 Worker 上的一
个进程。该进程负责 Task 的运行并且将运行的结果数据保存到内存或磁盘上。

Task 是运行在 Executor 上的任务单元,Spark 应用程序最终被划分为经过优化的多个 Task 的集合。

3.3.4 Driver

Application 的驱动程序,可以理解为驱动程序运行中的 main()函数,Driver 在运行过程中会创建SparkContext。Application 通过 Driver 与 Cluster Manager 和Executor 进行通信。Driver 可以运行在 Application 上,也可以由 Application 提交给Cluster Manager,再由 Cluster Manager 安排 Worker 运行。Driver 的主要职责如下:

  • 运行应用程序的main()函数。
  • 创建SparkContext。
  • 划分RDD并生成 DAG。
  • 构建Job 并将每个 Job 都拆分为多个 Task,这些 Task 的集合被称为Stage。各个Stage 相互独立,由于 Stage 由多个 Task 构成,因此也被称为 Task Set。Job 是由多个Task构建的并行计算任务,具体为 Spark 中的 Action操作(例如collect、save 等)。
  • 与Spark中的其他组件进行资源协调。
  • 生成并发送Task到Executor。

3.3.5 Application

基于Spark API编写的应用程序,其中包括实现 Driver 功能的代码和在集群中多个节点上运行的 Executor 代码。Application 通过 Spark API创建RDD、对RDD进行转换、创建DAG、通过Driver将Application 注册到 Cluster Manager。

3.4 Spark 运行流程

3.4.1 概述

Spark 的数据计算主要通过 RDD的选代完成,RDD是弹性分布式数据集,可以看作是对各种数据计算模型的统一抽象。在 RDD 的迭代计算过程中,其数据被分为多个分区并行计算,分区数量取决于应用程序设定的 Partition 数量,每个分区的数据都只会在一个Task上计算。所有分区可以在多个机器节点的 Executor 上并行执行。

3.4.2 运行流程图

3.4.3 运行流程步骤说明

  • 创建RDD对象,计算 RDD 之间的依赖关系,并将RDD生成一个DAG。
  • DAGScheduler 将 DAG划分为多个 Stage,并将 Stage 对应的 Task Set 提交到集群管理中心。划分 Stage 的一个主要依据是当前计算因子的输人是否确定。如果确定,则将其分到同一个 Stage 中,避免多个 Stage 之间传递消息产生的系统资源开销。
  • TaskScheduler 通过集群管理中心为每个 Task 都申请系统资源,并将 Task 提交到Worker
  • Worker的Executor 执行具体的 Task。

四、Spark 的特点

4.1 计算速度快

Spark将每个任务都构造成一个DAG(Directed Acyclic Graph,有向无环图)来执行,其内部计算过程基于弹性分布式数据集在内存中对数据进行迭代计算,因此其运行效率很高。官方数据表明,如果计算的数据从磁盘上读取,则 Spark 的速度是 Hadoop MapReduce的10倍以上;如果计算的数据从内存中读取,则 Spark 的计算速度是Hadoop MapReduce的100倍以上。

4.2 易于使用

Spark 提供了 80多个高级运算操作,支持丰富的算子,开发人员只需要按照其封装好的API实现即可,不需要关心 Spark 的底层架构。同时,Spark 支持多种语言开发,包括Java、Scala、Python。

4.3 通用大数据框架

Spark 提供了多种类型的开发库,包括 Spark Core、Spark SQL(即时查询)、Spark Streaming(实时流处理)、Spark MLlib、GraphX(图计算),使得开发人员可以在同一个应用程序中无缝组合使用这些库,而不用像传统的大数据方案那样将离线任务放在Hadoop MapReduce 上运行,将实时流计算任务放在 Storm 上运行,并维护多个平台。Spark 提供了从实时流计算、MapReduce 离线计算、SOL计算、机器学习到图计算的一站式整体解决方案。

4.4 支持多种资源管理器

Spark 支持单机、Standalone、Hadoop YARN、Apache Mesos 等多种资源管理器,用户可以根据现有的大数据平台灵活地选择运行模式。

4.5 生态圈丰富

Spark生态圈以Spark Core 为核心,支持从HDFS、S3、HBase 等多种持久化层读取数据。同时,Spark 支持以 Hadoop YARN、Apache Mesos 和 Standalone 为资源管理器调度Job,完成Spark应用程序的计算。Spark 应用程序可以基于不同的组件实现,如SparkShell、Spark Submit 、Spark Streaming 、SparkSOL、BlinkDB(权衡查询)、MLlib/MLbase(机器学习)、GraphX 和SparkR(数学计算)等。Spark 生态圈已经从大数据计算和数据挖掘扩展到机器学习、自然语言处理和语音识别等领域。

今天Spark相关内容的介绍就分享到这里,可以关注Spark专栏《Spark》,后续不定期分享相关技术文章。如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

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

相关文章

网络基础:Vlan原理与配置

VLAN(Virtual Local Area Network,虚拟局域网)是一种将一个物理网络划分为多个逻辑子网的技术。它通过在网络交换机上配置,使得不同VLAN中的设备即使连接在同一个物理交换机上,也不能直接进行通信,从而实现…

某企业数据治理总体解决方案(45页PPT)

引言:集团企业数据治理总体解决方案旨在构建一个高效、安全、合规且灵活的数据管理体系,以支持企业决策优化、业务创新、风险管理和运营效率提升。该方案通过整合数据资源、规范数据流程、强化数据质量和促进数据共享,实现数据资产的最大化价…

Lingo学习(三)——工厂合并、运算符、内置函数

一、工厂合并 (一) 工厂合并——生产二维矩阵 【引入】 sets: factory /1..6/ : a; plant /1..8/ : d; Cooperation(factory,p lant) : c, x; endsets 以上程序可…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(三)

上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 &a…

网络安全应急响应信息收集利器-Eagle_Eye

项目介绍: 网络安全应急响应信息收集利器 - Eagle_Eye:您的终端信息自动收集专家 在网络安全的紧急时刻,每一秒都至关重要。Eagle_Eye,这款专为应急响应设计的工具,如同一位随时待命的侦察兵,能够在危机时刻迅速收集…

嵌入式工程师从0开始,到底该学什么,怎么学?

作为嵌入式工程师,从零开始学习需要掌握以下几个关键方面。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学,敲个22就可以免费获得。 基…

yarn底层原理详解:(第33天)

系列文章目录 一、yarn总体架构 二、yarn核心组件及功能 三、yarn资源分配与调度 四、yarn提交和执行流程 五、yarn调度算法 六、yarn安全性与容错性 文章目录 系列文章目录前言一、总体架构二、核心组件及功能1. ResourceManager(RM)2. NodeManager&am…

day29--452. 用最少数量的箭引爆气球+435. 无重叠区间+763.划分字母区间

一、452. 用最少数量的箭引爆气球 题目链接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/ 文章讲解:https://programmercarl.com/0452.%E7%94%A8%E6%9C%80%E5%B0%91%E6%95%B0%E9%87%8F%E7%9A%84%E7%AE%AD%E5%BC%95%E7%88…

整数的英语表示

题目链接 整数的英语表示 题目描述 注意点 0 < num < 2^31 - 1 解答思路 每三个数字形成一组&#xff08;高位不足的部分可以用0填充&#xff09;&#xff0c;使用StringBuilder拼接每组的数字和单位关键是三个数字的英语表示&#xff0c;包含个位、十位、百位&…

C++ | Leetcode C++题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> majorityElement(vector<int>& nums) {int n nums.size();vector<int> ans;unordered_map<int, int> cnt;for (auto & v : nums) {cnt[v];}for (auto & v : cnt…

搭建ELK+Filebead+zookeeper+kafka实验

目录 1.部署 Filebeat 2. Logstash配置 3.浏览器kibana访问验证 主机名ip地址主要软件es01192.168.9.114ElasticSearches02192.168.9.115ElasticSearches03192.168.9.116ElasticSearch、Kibananginx01192.168.9.113nginx、LogstashNA192.168.9.111nginx、FilebeatNA192.168…

YOLOv8改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

告别中央服务器:Syncthing实现点对点文件同步

介绍 Syncthing 是一款开源的文件同步工具&#xff0c;可让您在多个设备之间同步文件。 它适用于 Mac OS X、Windows、Linux、FreeBSD、Solaris、OpenBSD等系统。 可以通过浏览器访问来配置和监控该应用程序。 Syncthing 具有以下特点: 1、点对点同步 2、无需中央服务器 …

推三返一,七星创客模式激活消费与分享热情

七星创客模式&#xff0c;作为一种创新的消费与营销融合策略&#xff0c;正悄然改变着传统商业生态的运作方式。其核心精髓“先消费后返利”&#xff0c;不仅颠覆了消费者的传统购物体验&#xff0c;还巧妙地在促进消费与激励分享之间搭建起了一座桥梁。这一模式通过随机返佣的…

【CT】LeetCode手撕—8. 字符串转换整数 (atoi)

目录 题目1- 思路2- 实现⭐8. 字符串转换整数 (atoi)——题解思路 3- ACM 实现 题目 原题连接&#xff1a;8. 字符串转换整数 (atoi) 1- 思路 思路 x 的平方根 ——> 利用二分 ——> 二分的 check条件为 k^2 < x 2- 实现 ⭐8. 字符串转换整数 (atoi)——题解思路 …

C++ enum class转常量

当使用 enum class 时&#xff0c;它具有更强的类型安全性和隔离性&#xff0c;因此需要显式转换才能访问其底层整数值。 std::underlying_type_t 是一个类型别名&#xff0c;它返回枚举类型的底层类型。 to_underlying 函数提供了一种方便的方式来执行这种转换&#xff0c;特别…

LLM——langchain 与阿里 DashScop (通义千问大模型) 和 DashVector(向量数据库) 结合使用总结

文章目录 前言预览直接调用大模型使用 prompt template格式化输出使用上下文 RAG 增强检索 自定义 langchain AgentPromptTemplate 和 ChatPromptTemplate使用少量示例创建ChatPromptTemplate 前言 langchain 是一个面向大模型开发的框架&#xff0c;其中封装了很多核心组件&a…

Java数据结构-链表与LinkedList

链表 链表的概念 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 通俗来说&#xff0c;相比较于顺序表&#xff08;物理上连续&#xff0c;逻辑上也连续&#xff09;&#xff0c;链表物理上不一定连续。 链表是…

代码随想录算法训练营第三十一天|动态规划:01背包理论基础、01背包理论基础(滚动数组)

动态规划&#xff1a;01背包理论基础 1. dp[i][j]: 表示0到i个物品放入容量为j的背包中&#xff0c;价值总和最大是多少 2. dp[i][j]的状态取决于&#xff0c;第i个物品要不要放入这个背包。 不放物品i&#xff1a;dp[i-1][j] (其实就是当物品i的重量大于背包j的重量时&…

2023年全国大学生电子信息竞赛E题——自动追踪系统(stm32和openmv+普通舵机)完美解决第四问

当时做的时候&#xff0c;当时看别人开源的23年的题&#xff0c;感觉一头雾水。两个字没思路。确实只有做了才会有思路。我这里清晰的整理出来思路。 1.第一问的复位问题就是写一个函数&#xff0c;如果按键按下&#xff0c;就进入&#xff0c;再按下就退出 当然这个复位是写死…