大数据学习 之 Spark 概述

article/2025/9/15 10:44:01

文章目录

    • 一、Spark简介
      • Spark与Hadoop的区别
      • 部署模式
    • 二、 Spark架构
      • 1.Driver
      • 2.Executor
      • 3.Master & Worker
      • 4.Cluster manager
      • 5.ApplicationMaster
      • 补充点:Stage
      • 执行过程
    • 三、Shuffle机制
      • shuffle介绍
      • Shuffle的影响
      • 导致Shuffle的操作
    • 四、RDD(弹性分布式数据集)
      • 宽依赖和窄依赖
    • 五、Spark算子

一、Spark简介

Spark 是一种由 Scala 语言开发的快速、通用、可扩展的大数据分析引擎。
在这里插入图片描述
Spark主要由五部分组成:

  • Spark Core
    Spark Core 中提供了 Spark 最基础与最核心的功能,Spark 其他的功能如:Spark SQL,
    Spark Streaming,GraphX, MLlib 都是在 Spark Core 的基础上进行扩展的
  • Spark SQL
    Spark SQL 是 Spark 用来操作结构化数据的组件。通过 Spark SQL,用户可以使用 SQL
    或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。
  • Spark Streaming
    Spark Streaming 是 Spark 平台上针对实时数据进行流式计算的组件,提供了丰富的处理
    数据流的 API。
  • Spark MLlib
    MLlib 是 Spark 提供的一个机器学习算法库。MLlib 不仅提供了模型评估、数据导入等
    额外的功能,还提供了一些更底层的机器学习原语。
  • Spark GraphX
    GraphX 是 Spark 面向图计算提供的框架与算法库。

Spark与Hadoop的区别

Spark一直被认为是Hadoop的升级版,在数据处理方面,基于内存,优于hadoop的MapReduce框架,但需要注意的是Spark取代不了Hadoop,Spark没有存储,只是负责处理,而且Spark可以独立运行,也可以集成到Hadoop中,去替代MapReduce。

  • Spark和Hadoop的根本差异是多个作业之间的数据通信问题 : Spark多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘。
  • Spark提供了更加丰富的数据处理模型,而MapReduce提供的Mapper和Reducer这样简单的模型无法满足一定场景下的业务需求,且MapReduce对迭代式处理支持不是很友好。
  • Hadoop的task是一个个进程,spark是一个个线程
  • Hadoop容错性低,spark可以根据RDD之间的血缘关系重算;
  • spark有transform和action算子,只有遇到action才会触发job,会做流水线层面的优化;
  • 对于多次使用的RDD,spark可以基于其块管理器,进行缓存
  • 有利也有弊,Spark基于内存,可能会出现资源不足的情况

部署模式

在这里插入图片描述

二、 Spark架构

Spark架构是一个标准的Master-slave架构。
在这里插入图片描述

1.Driver

Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。
Driver 在 Spark 作业执行时主要负责:

  • 将用户程序转化为作业(job)
  • 在 Executor 之间调度任务(task)
  • 跟踪 Executor 的执行情况
  • 通过 UI 展示查询运行情况

实际上,我们无法准确地描述 Driver 的定义,因为在整个的编程过程中没有看到任何有关Driver 的字眼。所以简单理解,所谓的 Driver 就是驱使整个应用运行起来的程序,也称之为Driver 类。

2.Executor

Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。

Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。
Executor 有两个核心功能:

  • 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程
  • 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

3.Master & Worker

Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master 和 Worker,这里的 Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对
数据进行并行的处理和计算,类似于 Yarn 环境中 NM。

4.Cluster manager

集群资源管理器(例如,Standlone Manager,Mesos,YARN)

5.ApplicationMaster

Hadoop 用户向 YARN 集群提交应用程序时,提交程序中应该包含 ApplicationMaster,用于向资源调度器申请执行任务的资源容器 Container,运行用户自己的程序任务 job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。

说的简单点就是,ResourceManager(资源)和 Driver(计算)之间的解耦合靠的就是ApplicationMaster。

如果Driver需要资源,那么会向ApplicationMaster进行申请,AM 会进而向ResourceManager进一步申请资源。

补充点:Stage

每个job被划分为多个stage,一个stage中包含一个taskset

执行过程

  1. 用户程序创建 SparkContext 后,它会连接到集群资源管理器,集群资源管理器会为用户程序分配计算资源,并启动 Executor;
  2. Driver 将计算程序划分为不同的执行阶段和多个 Task,之后将 Task 发送给 Executor;
  3. Executor 负责执行 Task,并将执行状态汇报给 Driver,同时也会将当前节点资源的使用情况汇报给集群资源管理器。

三、Shuffle机制

shuffle介绍

在 Spark 中,一个任务对应一个分区,通常不会跨分区操作数据。但如果遇到 reduceByKey 等操作,Spark 必须从所有分区读取数据,并查找所有键的所有值,然后汇总在一起以计算每个键的最终结果 ,这称为 Shuffle

Shuffle的影响

Shuffle 是一项昂贵的操作,因为它通常会跨节点操作数据,这会涉及磁盘 I/O,网络 I/O,和数据序列化。某些 Shuffle 操作还会消耗大量的堆内存,因为它们使用堆内存来临时存储需要网络传输的数据。Shuffle 还会在磁盘上生成大量中间文件,从 Spark 1.3 开始,这些文件将被保留,直到相应的 RDD 不再使用并进行垃圾回收,这样做是为了避免在计算时重复创建 Shuffle 文件。如果应用程序长期保留对这些 RDD 的引用,则垃圾回收可能在很长一段时间后才会发生,这意味着长时间运行的 Spark 作业可能会占用大量磁盘空间,通常可以使用 spark.local.dir 参数来指定这些临时文件的存储目录。

导致Shuffle的操作

由于 Shuffle 操作对性能的影响比较大,所以需要特别注意使用,以下操作都会导致 Shuffle:

  • 涉及到重新分区操作: 如 repartitioncoalesce
  • 所有涉及到 ByKey 的操作:如 groupByKeyreduceByKey,但 countByKey 除外;
  • 联结操作:如 cogroupjoin

四、RDD(弹性分布式数据集)

RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。

通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同结点上,从而可以在集群中的不同结点上进行并行计算。

宽依赖和窄依赖

RDD 和它的父 RDD(s) 之间的依赖关系分为两种不同的类型:

  • 窄依赖 (narrow dependency):父 RDDs 的一个分区最多被子 RDDs 一个分区所依赖;
  • 宽依赖 (wide dependency):父 RDDs 的一个分区可以被子 RDDs 的多个子分区所依赖。

如下图,每一个方框表示一个 RDD,带有颜色的矩形表示分区:

区分这两种依赖是非常有用的:

  • 首先,窄依赖允许在一个集群节点上以流水线的方式(pipeline)对父分区数据进行计算,例如先执行 map 操作,然后执行 filter 操作。而宽依赖则需要计算好所有父分区的数据,然后再在节点之间进行 Shuffle,这与 MapReduce 类似。
  • 窄依赖能够更有效地进行数据恢复,因为只需重新对丢失分区的父分区进行计算,且不同节点之间可以并行计算;而对于宽依赖而言,如果数据丢失,则需要对所有父分区数据进行计算并再次 Shuffle。

五、Spark算子

  • 1、Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Value型的数据。

  • 2、Key-Value数据类型的Transformation算子,这种变换不触发提交作业,针对处理的数据项是Key-Value型的数据。

  • 3、Action算子,这类算子会触发SparkContext提交作业。


http://chatgpt.dhexx.cn/article/2RrjNP4R.shtml

相关文章

大数据技术---Spark

一、Spark简介 1、Spark概述 Spark:由美国加州伯克利大学的AMP实验室于2009年开发,基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。 三大分布式计算系统开源项目:Hadoop、Spark、Storm。 Spark的…

KB、MB、GB等和KiB、MiB、GiB等的区别

今天装系统RHEL7.7,在分区时发现单位变成MiB、GiB了,有点奇怪就查了查。 区别: KB、MB、GB等单位以10为底数的指数 KiB、MiB、GiB等单位是以2为底数的指数 如:1KB10^31000, 1MB10^610000001000KB,1GB10^910000000001000MB,而 …

asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).

webpack打包提示文件体积过大导致: The following asset(s) exceed the recommended size limit (244 KiB). This can impact web performance. entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 Ki…

当git clone遇到client_loop:send disconnect: Connection reset by peer00 Kib/s

当git clone遇到client_loop:send disconnect: Connection reset by peer00 Kib/s 1. 问题描述2.问题解决3.原因分析 1. 问题描述 刚换了新电脑,重新配置了下git仓库的ssh后,迫不及待想 git clone 先项目。发现遇到个问题: 在执行 git clone…

Kibana

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。 你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。 你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。…

WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB)

Taro打包h5体积限制 警告: WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB). 可以使用webpack-bundle-analyzer插件对打包体积进行分析,参考代码: webpackChain (chain) {chain.plug…

【名词解释】KiB和KB,MiB和MB,GiB和GB 等的区别以及1M带宽到底是多少?

目录 1. KiB和KB,MiB和MB,GiB和GB 2. 宽带速度 3. 单位换算 1. KiB和KB,MiB和MB,GiB和GB KiB和KB,MiB和MB,GiB和GB 等的区别: 1KB(kilobyte)10^31000byte, 1KiB(kibibyte)2^101024byte …

b、B、KB、Kib、MB、MiB、GB、GiB、TB、TiB的区别

1024这个数字,想必计算机行业从业人员应该不会陌生,甚至10月24日还被当做程序员日,如果你问一个程序员1GB等于多少MB,他大概率会不假思索回答:1024。 没错,对于稍微对计算机或者网络有了解的人,一般都认为1024是数据容…

KB和KiB的区别是什么?

KB和KiB的区别是什么? 文章目录 KB和KiB的区别是什么?前言MB与MiB的区别:KB和KiB的区别为什么买到的硬盘容量总是会少一些? 前言 今天整理资料时发现使用windows自带的资源管理器查看文件夹大小时计算很缓慢, 机智的我想到了使用dir命令来查看 哈哈~…

KiB是什么单位

kiB1024byte kb1000byte

linux必备软件合集

Ubuntu常用软件合集 我用的使Ubuntu-Kylin14.04,原因呢主要是觉得使本土化的,自带了日历、输入法、优客助手等易于上手的应用。也省的每次安装完原生的系统再麻烦的安装,但是这些软件并不仅仅局限于ubuntu14.04 美化篇 刚装上ubuntu,看起来很朴素&…

软件测试周刊(第82期):其实所有纠结做选择的人心里早就有了答案,咨询只是想得到内心所倾向的选择。

欢迎来到第 82 期!这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。 本期看点:B站是如何建设移动真机测试集群的?百人测试团队的测试效能体系应该如何建设?闲鱼交易链路自动化回归测试是怎么做的&#…

傻瓜式安装stable diffusion图像生成软件

目录 1、打开:https://colab.research.google.com/ 2、复制一下代码: 3、粘贴到下方,按运行按钮。 4、打开安装好的软件。上框复制以下代码: 5、下框复制以下代码: 6、如下图设置及操作: 1、打开&#…

html如何用mp4做背景音乐,如何用相片制作mv配上流行mp3背景音乐 打造自己的mv

准备好自己的相片,支持的相片(图片)格式为office powerpoint支持的就可以。具体支持什么相片格式,如何用相片制作mv再配上背景音乐呢;整个操作步骤是很简单的,如果是刚开始学习并对相关制作不太了解的朋友可能要多认真花点时间了解…

软件工程复习笔记

文章目录 1、软件工程概论(1)背景:软件危机表现方法软件工程管理软件工程技术 原因 (2)软件工程定义三要素生命周期软件定义软件开发运行维护 2、过程模型(1)瀑布模型特点优点缺点适用场合 &…

软件测试面试大全

软件测试面试大全 一、软件测试基础部分1、软件项目成员有哪些?2、软件的概念是什么?3、你对软件测试的定义是怎么的?4、你对软件Bug的概念是怎样的?5、软件Bug级别有几种?6、软件Bug状态有哪些?7、你对软件…

安卓机如果相册不选图片就退出_教你怎么把照片制作成电子相册

现在的我们都喜欢到处拍照,智能手机的出现以及越来越高清的相机,都给我们的拍照提供了太多的便利和可能,但是照片太多了以后就会堆积在电脑硬盘或者手机链里,想要从中观看、查找某一张都变的非常吃力,这个时候我们为何…

计算机如何制作音乐相册,怎么制作音乐相册?如何使用照片来制作音乐mv?照片制作成电子相册的方法...

最近又双叒叕降温啦,悄咪咪的就开始降温了,不过嘛,都快过年了,降温了才有冬天的感觉嘛。哈哈,好啦,进入今天的正题,在平时,遇见喜欢的音乐有没有想过要来为其制作MV呢?也…

软件案例分析——两大音乐软件的PK

项目内容这个作业属于哪个课程软件工程这个作业的要求在哪里软件案例分析我在这个课程的目标是1. 体验体系化、规范化的软件工程实践流程 2. 锻炼码力。这个作业在哪个具体方面帮助我实现目标深入分析软件性能,了解软件测评流程和软件市场需求 产品选择 本次作业&…

照片做视频哪个软件好?简单但好用

现在看到大多数人都在用数码大师吧。我平时给我朋友做照片视频都用这个。 主要是做起来简单,而且上手很快,里面的特效也有很多不同的风格。 我都拿来导出1080P全高清视频,上传到网站上或者在自家电视机上都能播放。 大家可以看看我做的效果…