【Spark】架构与核心组件:大数据时代的必备技能(上)

🐇明明跟你说过:个人主页

🏅个人专栏:《大数据前沿:技术与应用并进》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、什么是Apache Spark

2、Spark与其他大数据处理框架的比较(如Hadoop)

1. 架构与工作原理

2. 性能比较

3. 数据处理模型

二、Spark的生态系统概览

1、Spark SQL

2、Spark Streaming

3、MLlib

4、GraphX

5、SparkR 和 PySpark

三、Spark架构原理

1、Spark 核心组件

2、Spark 的执行流程

3、Spark 核心概念


一、引言

1、什么是Apache Spark

Apache Spark 是一个开源的大数据处理框架,它提供了一个快速、通用的分布式计算平台,用于大规模数据处理和分析。Spark 是基于内存的处理引擎,相较于传统的基于磁盘的 MapReduce(如 Hadoop)具有更高的性能,尤其是在迭代计算(如机器学习、图计算等)方面。Spark 支持批处理、实时流处理、机器学习、图计算等多种数据处理模式,因此广泛应用于大数据分析、实时数据流处理和机器学习领域。

2、Spark与其他大数据处理框架的比较(如Hadoop)

Apache Spark 与其他大数据处理框架(尤其是 Apache Hadoop)在许多方面有显著的不同。以下是 Spark 与 Hadoop 的比较,重点强调它们的架构、性能、灵活性等方面的差异:

1. 架构与工作原理

Hadoop(MapReduce)架构:

  • Hadoop MapReduce 是一个基于磁盘的批处理计算框架,主要由两个阶段组成:Map 阶段 和 Reduce 阶段。
  • 数据存储:Hadoop 依赖于 HDFS(Hadoop Distributed File System)来存储大规模数据集。
  • 计算模型:在 MapReduce 中,计算任务会生成临时中间结果并写入磁盘,然后在下一阶段进行处理。由于每个步骤都需要写入磁盘,磁盘 I/O 是 MapReduce 的性能瓶颈。
  • 计算过程:MapReduce 的工作流程是从磁盘读取数据,进行映射操作,再将中间数据写入磁盘,最终进行归约操作。每次操作都会进行磁盘读写,导致较高的 I/O 开销。

Apache Spark 架构:

  • Spark 是一个内存计算框架,设计为支持多种数据处理任务(包括批处理、实时流处理、机器学习和图计算)。
  • 数据存储:Spark 也支持与 HDFS、S3 等分布式文件系统进行集成,但它的处理方式不同于 Hadoop MapReduce,Spark 将数据加载到内存中进行处理,减少了对磁盘的依赖。
  • 计算模型:Spark 基于 RDD(Resilient Distributed Datasets) 进行数据处理,RDD 是一个不可变的分布式数据集,能够通过内存存储和计算加速任务处理。Spark 通过保留中间数据集在内存中,避免了 MapReduce 中大量的磁盘 I/O 操作。

 

2. 性能比较

Hadoop MapReduce 性能:

  • Hadoop MapReduce 的每个阶段(Map 和 Reduce)都会涉及到磁盘操作,每次作业的结果都会写入磁盘,然后进行下一阶段的计算。由于这个设计,它对于需要多次写入磁盘的任务会存在较大的性能瓶颈。
  • 适合传统的批处理任务,但对于一些需要迭代计算(如机器学习)或低延迟实时处理的任务,它的效率相对较低。

Apache Spark 性能:

  • Spark 的显著优势在于它的 内存计算能力。Spark 将数据加载到内存中,并在内存中进行计算,减少了磁盘的读取和写入操作。这使得 Spark 在迭代计算(如机器学习算法)和实时流处理(如 Spark Streaming)方面比 Hadoop MapReduce 更为高效。
  • 对于迭代计算任务,Spark 的性能比 Hadoop 高出几倍甚至几十倍,因为它避免了 MapReduce 中每次迭代都需要进行磁盘操作的开销。
  • Spark 支持通过数据持久化(caching)将中间计算结果保留在内存中,从而避免不必要的计算。

 

3. 数据处理模型

Hadoop MapReduce:

  • 适用于批处理任务,即数据的批量读取和处理。
  • Hadoop MapReduce 的作业是顺序执行的,每个作业的输入和输出都通过磁盘存储。

Apache Spark:

  • Spark 支持 批处理、实时流处理、交互式查询机器学习 等多种数据处理模式。
  • Spark Streaming 提供了一个微批处理模型,用于处理实时流数据,可以与 Kafka、Flume 等流式数据源进行集成。
  • Spark 通过 SQL 查询(Spark SQL)支持结构化数据的处理,并且能够直接与数据库、HDFS 等外部数据源交互。

 

二、Spark的生态系统概览

Apache Spark 是一个功能强大的大数据处理引擎,除了基本的分布式数据处理能力外,它还提供了丰富的生态系统组件,涵盖了批处理、流处理、机器学习、图计算等多个领域。

1、Spark SQL

Spark SQL 是 Apache Spark 提供的一个模块,用于处理结构化数据。它支持使用 SQL 语法来执行复杂的数据查询,且能够与多种数据源(如 HDFS、Hive、HBase、JDBC 等)进行交互。Spark SQL 不仅支持传统的 SQL 查询,还支持基于 DataFrame 和 Dataset API 的编程模型,能够处理结构化和半结构化的数据。

主要特点:

  • SQL 查询:Spark SQL 提供了 SQL 查询引擎,能够让开发者直接使用 SQL 语句查询分布式数据集。
  • DataFrame 和 Dataset:Spark SQL 引入了 DataFrame(类似于数据库中的表)和 Dataset(带有类型的 DataFrame)作为编程接口,简化了数据操作。
  • 兼容性:Spark SQL 与 Hive 兼容,可以无缝地运行 Hive 查询,并且能够访问 Hive 元数据存储(如 Hive Metastore)。
  • 连接多种数据源:可以与多种数据存储系统集成,包括 HDFS、HBase、Cassandra、JDBC 等。

使用场景:

  • 执行结构化数据的查询,进行数据分析。
  • 在大数据环境下执行复杂的 SQL 查询。
  • 将 SQL 查询与 Spark 的其他模块(如 MLlib 或 Spark Streaming)结合,进行深度数据分析。

 

2、Spark Streaming

Spark Streaming 是一个实时流处理模块,可以处理不断流入的数据流。它基于微批处理(Micro-Batching)的模型,将实时数据分成小批次进行处理。Spark Streaming 可以处理来自多种流数据源的数据,如 Kafka、Flume、Kinesis 等。

主要特点:

  • 微批处理:Spark Streaming 将实时数据流拆分成固定大小的批次进行处理,这种方式相比其他流处理引擎(如 Apache Flink)具有更高的容错性和简化的编程模型。
  • 集成数据源:Spark Streaming 支持多种常见的数据源,如 Kafka、Kinesis、Flume 等。
  • 状态管理:Spark Streaming 提供了对流处理中的状态管理支持,可以保存中间状态并用于更复杂的流处理任务(如窗口操作)。
  • 与 Spark 的其他组件集成:可以与 Spark SQL、MLlib 等模块无缝集成,支持更复杂的实时数据分析和处理。

使用场景:

  • 处理实时数据流,如实时日志分析、实时监控、实时推荐等。
  • 结合机器学习库(MLlib)进行实时预测。
  • 与 Spark SQL 配合,实现对实时数据的动态查询和分析。

3、MLlib

MLlib 是 Spark 提供的机器学习库,旨在提供可扩展的机器学习算法,支持大规模数据集上的训练与预测。它不仅包含基本的机器学习算法,还提供了如数据预处理、特征提取、模型评估等常用功能。

主要特点:

  • 算法:MLlib 提供了分类、回归、聚类、协同过滤等多种机器学习算法。
  • 优化算法:支持常见的优化方法,如梯度下降、随机梯度下降(SGD)等。
  • 数据预处理:提供了对特征转换、标准化、处理缺失值等常见数据预处理任务的支持。
  • 集成支持:可以与 Spark SQL 和 Spark Streaming 等其他模块集成,方便构建端到端的机器学习管道。

使用场景:

  • 在大数据环境下进行机器学习任务,如预测分析、分类任务等。
  • 处理流数据时,利用 Spark Streaming 进行实时机器学习。
  • 执行大规模的聚类、分类和回归任务,进行数据建模和特征选择。

 

4、GraphX

GraphX 是 Spark 提供的图计算库,旨在处理大规模图数据。它允许用户在图数据上执行并行化计算,支持图算法(如 PageRank、连通分量、最短路径等)的执行。GraphX 是基于 RDD 的,它将图数据表示为 RDD,并使用图计算的特殊操作来处理。

主要特点:

  • 图数据表示:GraphX 将图表示为一个由顶点和边构成的 RDD(Resilient Distributed Dataset)。图的顶点和边可以携带属性数据,这些数据可以进行并行化处理。
  • 图算法:GraphX 提供了多种常见的图算法,如 PageRank、图的最短路径、连通分量、三角形计数等。
  • 与 Spark 集成:GraphX 可以与 Spark SQL 和 MLlib 等模块集成,使得图计算能够与数据分析、机器学习任务结合。
  • 基于 RDD:GraphX 使用 RDD 作为底层数据结构,从而能够充分利用 Spark 的分布式计算能力。

使用场景:

  • 社交网络分析,如社交图的构建和分析。
  • 网络图分析,如互联网结构和通信网络的分析。
  • 数据流、通信图等大规模图数据的计算和分析。

5、SparkR 和 PySpark

除了 Java 和 Scala,Spark 还为 R(SparkR)Python(PySpark)用户提供了专门的接口,使得使用 Spark 的数据分析工作变得更加灵活。SparkR 和 PySpark 提供了与 Spark 的核心组件(如 Spark SQL、MLlib、Spark Streaming 等)的接口,帮助数据科学家和分析师进行分布式数据处理和机器学习。

主要特点:

  • SparkR:为 R 用户提供的接口,使 R 用户能够利用 Spark 进行大数据分析和机器学习。
  • PySpark:为 Python 用户提供的接口,能够通过 Python 进行 Spark 数据处理、流处理和机器学习等任务。

使用场景:

  • R 用户:进行大规模数据处理、统计分析和机器学习任务。
  • Python 用户:使用 PySpark 进行数据分析、数据清理、流处理以及机器学习任务。

 

三、Spark架构原理

1、Spark 核心组件

Spark 的架构由多个核心组件构成,这些组件共同协作,支持高效的分布式计算。

(1) Driver Program (驱动程序)
驱动程序是 Spark 应用的控制器,负责整个应用的执行。它通过与集群管理器(如 YARN 或 Mesos)和工作节点进行交互,调度任务并管理分布式计算的生命周期。

  • 任务调度:驱动程序负责将任务划分成小的单元,并将这些任务分配给工作节点执行。
  • 集群协调:它会通过集群管理器与执行节点进行通信,协调资源和任务的分配。

(2) Cluster Manager (集群管理器)
Spark 支持多种集群管理器,包括 Standalone 模式、YARN、Mesos 等,集群管理器负责资源的管理和分配。

  • Standalone 模式:在这种模式下,Spark 自己管理集群资源。
  • YARN 模式:通过 Hadoop YARN 管理 Spark 作业的资源。
  • Mesos 模式:通过 Mesos 集群管理器分配资源。

集群管理器的主要职责是为每个 Spark 应用程序分配资源(如 CPU、内存),并管理集群中的作业执行。

(3) Executor (执行器)
每个 Spark 应用程序在集群中都会启动一个或多个执行器(Executor)。执行器是 Spark 程序的工作单元,负责执行任务并计算数据。

  • 任务执行:每个执行器会从集群管理器获取任务,并在其本地机器上执行。
  • 内存和存储:执行器有自己的内存空间,用于存储数据(例如,RDD、DataFrame 等)以及任务执行过程中产生的中间数据。
  • 结果返回:执行器将计算的结果发送回驱动程序。

每个 Spark 应用程序只有一个驱动程序,但可能会有多个执行器,通常每个工作节点会启动一个执行器。

(4) Worker Node (工作节点)
工作节点是集群中的实际计算资源,Spark 的计算任务由这些节点执行。每个工作节点可以有多个执行器,每个执行器负责执行一定的计算任务。

(5) Task (任务)
Spark 将工作负载分成若干个任务。每个任务在执行器上独立执行。任务是计算的最小单位,通常会被划分为多个并行任务来提高执行效率。

(6) RDD (Resilient Distributed Dataset)
RDD 是 Spark 的核心数据结构,表示分布式数据集,它是一个不可变的分区数据集,可以并行操作。RDD 提供了对分布式数据的抽象,支持容错机制,可以在节点失败的情况下重新计算丢失的数据。

RDD 支持两种操作:

  • 窄依赖操作(如 map、filter):这些操作会对每个分区的数据进行转换,每个操作只需要依赖于一个父 RDD。
  • 宽依赖操作(如 groupBy、join):这些操作会对数据进行重新分区,可能需要跨多个节点进行数据交换。

 

2、Spark 的执行流程

Spark 的执行流程通常可以分为以下几个步骤:

(1) Job 提交
Spark 应用通过驱动程序向集群管理器提交作业。作业是由多个任务组成的,通常对应于某个操作(如 map、reduce 等)或者一个 Spark 作业的执行(如 SQL 查询)。

(2) Stage 划分
Spark 会将作业划分为多个阶段(Stage)。每个阶段包括多个任务,Spark 会根据依赖关系划分阶段,通常一个宽依赖操作会导致一个新的阶段的生成。

  • 每个阶段内的任务可以并行执行。
  • 阶段之间通过 Shuffle 进行数据交换,Shuffle 是一个代价较高的操作。

(3) Task 调度
作业被划分为多个阶段后,每个阶段会进一步拆分为多个任务。任务是 Spark 执行的基本单位,通常一个任务会处理某个数据分区。

任务会被调度到执行器上执行,执行器负责处理任务并将结果返回给驱动程序。Spark 会尽可能将任务分配到集群中的空闲节点上进行并行执行。

(4) 数据处理与计算
每个执行器在其节点上执行任务,处理数据,并将计算结果存储在内存中。对于 RDD 操作,计算会根据分区来并行执行。操作包括数据转换、聚合、过滤等。

(5) Shuffle 操作
当 Spark 执行某些宽依赖操作(例如 groupBy、join)时,可能需要进行 Shuffle 操作。Shuffle 会涉及到数据在不同节点之间的重新分布和排序,通常是一个耗时的操作。

(6) 结果返回
当所有任务执行完成后,执行器会将结果返回给驱动程序。驱动程序将这些结果汇总,并向用户返回最终的计算结果。

3、Spark 核心概念

(1) DAG (Directed Acyclic Graph)
Spark 使用 DAG(有向无环图)来表示计算过程。每个操作(如 map、filter、reduce)都是一个节点,而节点之间的依赖关系表示为边。DAG 使得 Spark 可以更好地进行任务调度和容错处理。

在执行过程中,Spark 会根据 DAG 构建一个计算图,任务将根据图的依赖关系进行调度。
DAG 有助于优化任务执行和提高并行度。


(2) 数据存储
Spark 提供了多个数据存储选项,可以在内存、磁盘、HDFS、S3 等地方存储数据。Spark 的内存计算方式使得它比 Hadoop MapReduce 更加高效,但也需要考虑内存管理和存储策略。

  • RDD 缓存:RDD 支持将数据缓存到内存中,进行快速计算。
  • 持久化:Spark 允许将 RDD 持久化到磁盘,以避免重复计算,提高效率。

 

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于大数据的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!    

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

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

相关文章

MySQL数据库——索引结构之B+树

本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行?为什么不使用二叉查找树(BST)?为什么不使用平衡二叉树(AVL树)&a…

外网访问 Docker 容器的可视化管理工具 DockerUI

DockerUI 是一个 docker 容器镜像的可视化图形化管理工具,DockerUI 可以用来轻松构建、管理和维护 docker 环境。让用户维护起来更方便。 本文就介绍如何安装使用 DockerUI 并结合路由侠内网穿透来访问 DockerUI。 第一步,安装 DockerUI 1,…

「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现

本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。 关键词 UI互动应用接口定义购物车功能动态计算商品管理列表操作 一、功能说明 简易购物车功能包含以下交互&#…

19、鸿蒙学习——配置HDC命令 环境变量

一、下载Command Line Tools 可参考上篇《鸿蒙学习——配置OHPM、hvigor环境变量》 二、配置hdc环境变量 hdc命令行工具用于HarmonyOS应用/元服务调试所需的工具,该工具存放在命令行工具自带的sdk下的toolchains目录中。为方便使用hdc命令行工具,请将…

linux学习笔记(一).学习路径+学习流程+起源

背景 再跟着尚硅谷视频Linux教程(1>7)学习linux,日常做笔记督促自己学习。 Linux学习笔记 Linux应用领域 1.个人桌面应用领域 能力一般 2.服务器应用领域 强项 3.嵌入式应用领域 强项 Linux学习流程 基础 1.基本命令操作(文件命令操作copy等等&#xf…

LeetCode每日三题(六)数组

一、最大子数组和 自己答案: class Solution {public int maxSubArray(int[] nums) {int begin0;int end0;if(numsnull){//如果数组非空return 0;}else if(nums.length1){//如果数组只有一个元素return nums[0];}//初值选为数组的第一个值int resultnums[0];int i…

Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本

ClamAV是一个开源的跨平台病毒扫描引擎,用于检测恶意软件、病毒、木马等安全威胁。 一、Linux Debian安装ClamAV 在Linux Debian系统上安装ClamAV,你可以按照以下步骤进行: 更新软件包列表: 打开终端并更新你的软件包列表&#…

VSCode outline显示异常的解决方法——清除VSCode的配置和用户文件

1. 删除所有配置文件 sudo apt remove --purge code2. 删除所有用户文件 rm -rf ~/.config/Code rm -rf ~/.vscode rm -rf ~/.local/share/code rm -rf ~/.cache/Code3. 重装Code sudo dpkg -i code_1.96.2-1734607745_amd64.deb如此,可修复异常导致的outline无…

Crawler实现英语单词的翻译

首先声明一点,这种方法仅限于低频次的交互来获取翻译信息,一旦一秒内大量的请求会被重定向,那就直接不能用了 如果希望可以批量查询英语单词翻译,可以查看我的下一篇博客。 接下来的任务就是要把这么一大堆的单词进行翻译&#xf…

QT 学习第十四天 QWidget布局

QT 学习十四天 布局 布局管理Qt Widgets 布局布局管理器简介基本布局管理器栅格布局管理器窗体布局管理器综合使用布局管理器设置部件大小可扩展窗口 布局管理 今天讲 Qt Widgets 和 Qt Quick 中的布局。 前者主要用布局管理器 后者除了布局管理器还有基于锚的布局&#xff08…

jangow靶机

打开靶机,打开kali,有的人会发现扫不到靶机的ip 在网上搜索了半天,发现是靶机的网卡配置有问题 重启靶机,选第二个 进去后再选第二个,按e 找到ro这一行 把ro后面这一行的内容都替换成ro rw signin init/bin/bash ctr…

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…

KOI技术-事件驱动编程(Sping后端)

1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的,那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,…

小程序配置文件 —— 14 全局配置 - tabbar配置

全局配置 - tabBar配置 tabBar 字段:定义小程序顶部、底部 tab 栏,用以实现页面之间的快速切换;可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面; 在上面图中,标注了一些 tabBar …

小程序基础 —— 08 文件和目录结构

文件和目录结构 一个完整的小程序项目由两部分组成:主体文件、页面文件: 主体文件:全局文件,能够作用于整个小程序,影响小程序的每个页面,主体文件必须放到项目的根目录下; 主体文件由三部分组…

使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图

在做一些尺度分析时,经常会涉及到对研究区构建不同尺度的渔网进行分析,渔网的形状通常为规则四边形。构建渔网的方法也很简单,使用ArcGIS/ArcGIS Pro工具箱中的【创建渔网/CreateFishnet】工具来构建。但如果想构建其他形状渔网进行相关分析&…

【K8S问题系列 | 21 】K8S中如果PV处于Bound状态,如何删除?【已解决】

在Kubernetes(K8S)的存储管理体系中,持久卷(PersistentVolume,PV)是一种重要的资源,它为Pod提供了持久化存储能力。当PV处于Bound状态时,意味着它已经与某个持久卷声明(P…

旅游管理系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

Qt5 中 QGroupBox 标题下沉问题解决

我们设置了QGroupBox 样式之后,发现标题下沉了,那么如何解决呢? QGroupBox {font: 12pt "微软雅黑";color:white;border:1px solid white;border-radius:6px; } 解决后的效果 下面是解决方法: QGroupBox {font: 12pt "微软雅黑";color:white;bo…

六大基础深度神经网络之CNN

左侧是传统卷积网络输入的是一列像素点,右侧是卷积神经网络,输入的是具有长宽通道数的原始图像 下图为整体架构。卷积层可以认为提取特征,池化层是压缩特征。全连接层是把图像展平然后计算10个类别的概率值 给出一张图像不同区域的特征不同&a…