当前位置: 首页 > news >正文

【大数据】MapReduce的“内存增强版”——Spark

【大数据】MapReduce的“内存增强版”——Spark

  • 文章脉络
  • Spark架构
  • Spark-core
    • SparkConf 和 SparkContext
    • RDD
    • Spark集群
  • Spark-sql

在大数据时代,数据处理和分析成为企业竞争的重要手段。Hadoop作为大数据处理的基石,其核心组件MapReduce在众多场景中发挥了巨大作用。但是随着业务数据变多业务变复杂,MapReduce在处理速度、迭代计算等方面逐渐暴露出局限性。

为此,Spark应运而生,被誉为MapReduce的“内存增强版”。Spark比较核心的几个组件是core、sql、streaming,其中streaming使用不多,因此本文着重介绍Spark-core和Spark-sql。


文章脉络

在这里插入图片描述

图1 Spark知识点

  Spark是一个基于内存计算的大数据计算框架,由加州大学伯克利分校的AMPLab实验室开发。它继承了Hadoop的分布式计算思想,并在MapReduce的基础上进行了优化和改进。

  Spark有以下核心优势:

  1、高速计算:Spark将中间结果存储在内存中,大大减少了磁盘IO操作,提高了计算速度。

  2、易用性:Spark提供了丰富的API,支持多种编程语言,如Java、Scala、Python等,简化了编程模型。

  3、通用性:Spark整合了多种大数据处理框架,如SQL、Streaming、MLlib(机器学习)等,实现了多场景的一站式解决方案。

【注意】Streaming、MLlib在我的日常工作中并不会用到。流式计算一般用Flink(真·流式计算)来做,而不用Streaming(假·流式计算);机器学习或者深度学习则是有Python这边各种各样的库(sklearn、tf、torch)可以做。

  4、兼容性:Spark可以与Hadoop生态系统无缝集成,充分利用Hadoop的资源管理和存储优势。


  Q:为什么Spark比MapReduce快?

  A:MapReduce在处理数据时,需要将中间结果写入磁盘,导致频繁的磁盘IO操作,从而影响整体执行速度。Spark使用了内存计算,可以在处理过程中将数据尽可能多地保存在内存中,这大大减少了磁盘I/O操作,而磁盘I/O是MapReduce性能的一个主要瓶颈。


  Q:既然基于内存计算更快,那为什么MapReduce不基于内存做?

  A:MapReduce最初被开发的时候(2004年左右),内存的价格相对较高,容量也远不如今天,设计一个基于磁盘的系统更加经济实用。并且在MR设计之初,人们对磁盘I/O和内存性能的权衡有不同的理解。尽管磁盘I/O较慢,但通过批处理和顺序读写操作,MR能够高效地利用磁盘带宽。

Spark架构

在这里插入图片描述

图2 Spark架构图

  图2清晰地展示了Spark与许多大数据产品之间的关系。

【注意】Spark并不仅作为MapReduce的平替而使用,在资源调度环节可以不采用YARN,在存储上也可以不采用HDFS,它其实可以把Hadoop这一套给替换掉。

  在API支持上,Spark像MapReduce一样支持了非常多的语言。

  在资源调度上,Spark不仅可以使用YARN,可以使用Mesos以及自身的独立模式(Standalone Mode)。这三种资源管理器各有特点,可以根据实际应用场景和需求进行选择:

  YARN(Yet Another Resource Negotiator):是Hadoop生态系统中的资源管理器,Spark on YARN模式下,Spark应用程序可以运行在YARN集群上,与其他Hadoop应用程序共享资源。

  Mesos:是一个通用的集群资源管理器,它可以将不同类型的任务(如Spark、Hadoop、Marathon等)运行在同一个集群上,实现资源的细粒度管理和分配。

  独立模式(Standalone Mode):Spark自带的资源管理器,它简化了Spark集群的部署和管理,适用于不需要与其他大数据框架共享资源的小型或独立Spark集群。

  在存储环节,Spark除了支持HDFS,还支持很多种存储系统,比如Amazon S3、HBase甚至关系型数据库。

  在SQL层面,Spark的支持性也超高,不但支持标准的SQL语法,还支持多种数据源(HDFS、Hive表、JSON、Parquet、ORC、JDBC等),而且还兼容Hive。

Spark-core

SparkConf 和 SparkContext

  在Apache Spark中,SparkConf 和 SparkContext 是创建和配置Spark应用程序的两个核心组件。

  SparkConf 是一个配置Spark应用程序的类。它允许用户设置各种Spark参数,这些参数可以控制应用程序的运行时行为。

【注意】SparkConf可以设置应用名称、设置运行模式等等。

  SparkContext是Spark的入口点,负责与Spark集群通信,创建RDD,以及向集群提交作业。

【注意】SparkContext可以初始化Spark应用程序的运行环境、创建和操作RDD、提交作业以执行计算、提供访问集群状态的方法。

  这两个类,基本相当于Spring里面的配置类、上下文的感觉,没太多学习成本。

RDD

  Spark采用弹性分布式数据集(RDD)作为基本计算单元。RDD是一种分布式的、容错的、并行的数据结构,可以将数据存储在内存或磁盘中。

【注意】真正写代码的时候,并不能感知到“分布式”、“弹性”这些概念。只能接触到RDD这个类,把数据放到RDD类里面,它就是弹性分布式数据集了~

  RDD有两类重要的方法,称为:

  1、转换操作(Transformations)
  2、行动操作(Actions)

【注意】转换操作(Transformations)是懒加载的,也就是说,如果你只写了转换操作的代码,即使运行代码也并不会真正执行,必须有行动操作才可以触发先前的转换操作。有点像TensorFlow里面预先定义计算图的感觉。

  - 转换操作(Transformations)
   - map(func):对每个元素应用一个函数。
   - filter(func):返回满足函数条件的元素。
   - flatMap(func):将每个元素映射到0个或多个元素,并扁平化结果。
   - reduceByKey(func, [numPartitions]):在键值对的RDD上,按键进行聚合。

  - 行动操作(Actions)
   - count():返回RDD中的元素数量。
   - collect():将RDD的所有元素以数组的形式返回驱动程序。
   - saveAsTextFile(path):将RDD的内容保存到文本文件中。
   - foreach(func):对RDD中的每个元素应用一个函数。

【注意】目前我只在Java工程里面写过Spark,或者写SQL来执行Spark任务。以Java举例,假设你写了filter筛选表里大于0的数据,然后print,直接运行输出为空。必须在后面跟上行动操作,比如count,才会真正执行。

Spark集群

在这里插入图片描述

图3 Spark集群结构图

  如图3,Apache Spark集群由多个组件组成,每个组件负责不同的功能。

  Spark Driver
   驱动程序是Spark应用程序的入口,负责将用户编写的应用程序转换成实际的作业执行过程。驱动会在Spark应用程序中创建SparkContext,将应用程序分解成多个任务,并将这些任务分配给集群中的执行器(Executors)。

  Cluster Manager
  集群管理器负责为Spark应用程序分配资源。

  Executor
  执行器是运行在工作节点上的进程,负责运行任务、保存数据以及向驱动程序汇报任务的进度。每个执行器都有一定数量的核心,可以并行执行多个任务。执行器还负责存储计算过程中产生的数据,以减少对磁盘的读写操作。

  Worker Node
  工作节点是集群中的物理或虚拟机器,每个工作节点都会被分配一定数量的执行器,执行器负责运行任务并存储数据。

  DAG Scheduler
  DAG调度器负责将Spark应用程序中的高层RDD转换操作转换成物理执行计划。将RDD的依赖关系转换成一个有向无环图(DAG),并将DAG划分为多个阶段(stages)。

Spark-sql

  Spark SQL除了支持标准SQL、兼容Hive之外,其在API层面还抽象出了一个DataFrame类。

  在Spark SQL中,DataFrame是一个分布式数据集合,它被组织成命名列的形式,类似于关系数据库中的表或Python的pandas DataFrame。DataFrame API提供了丰富的数据操作功能,而且支持Scala、Java、Python和R语言。

  也就是说,DataFrame底层是由RDD实现的,但它提供了更丰富的优化和抽象。DataFrame的API比RDD更高级,因此在大多数情况下,DataFrame的性能会更好,且代码更简洁。

【注意】起码在编码层面,写RDD还是没DF优雅的。


  Q:Pandas的DF与Spark的DF之间有什么区别和联系?

  A:对于大规模数据集,Spark DataFrame可以利用集群的计算资源进行分布式计算,性能通常优于pandas。对于小型到中型数据集,pandas DataFrame的性能通常很好,因为它是在单个机器上运行的,没有网络通信的开销。

  Spark和pandas DataFrame可以相互转换,可以在Spark中处理大规模数据集,然后在需要时将数据子集转换为pandas DataFrame进行更细致的分析。

【注意】总结:一个是分布式场景下的数据集合,一个是单机情况下的数据集合,但是它们可以互转,API也很相似。

相关文章:

【大数据】MapReduce的“内存增强版”——Spark

【大数据】MapReduce的“内存增强版”——Spark 文章脉络 Spark架构 Spark-core SparkConf 和 SparkContext RDD Spark集群 Spark-sql 在大数据时代,数据处理和分析成为企业竞争的重要手段。Hadoop作为大数据处理的基石,其核心组件MapReduce在众多…...

o1模型:引领AI技术在STEM领域的突破与应用

o1模型是OpenAI最新推出的大型语言模型,它在多个领域展现出了卓越的能力,被认为是AI技术发展的一个重要里程碑。以下是对o1模型的详细介绍和分析: o1模型的简介和性能评估 o1模型在物理、化学、生物学等领域的基准任务上达到了博士生水平&…...

数据库系统 第57节 数据库迁移

数据库迁移是一个复杂的过程,涉及到将数据从一个数据库系统转移到另一个数据库系统。这个过程通常需要仔细规划和执行,以确保数据的完整性和可用性。以下是数据库迁移的一些关键方面: 数据迁移工具: 这些工具可以帮助自动化迁移过…...

【主机入侵检测】Wazuh规则详解

前言 Wazuh 规则是一组用XML格式编写的条件,它们定义了应该如何解释日志数据。这些规则由Wazuh Manager使用,用于在日志消息中检测特定的模式或行为,并相应地生成警报或响应。它们在威胁检测中扮演着至关重要的角色,因为它们允许系…...

redis有序集合写入和求交集的速度

背景 团队小伙伴做了一个需求。大概的需求是有很多的图片作品,图片作品有一些类别,每个人进入到每个类别的作品业,根据权重优先查看权重最高的的作品,权重大概是基于每个人对该作品的浏览计算,浏览过的作品放在最后展…...

微服务之服务注册与发现:Etcd、Zookeeper、Consul 与 Nacos 比较

在微服务架构中,服务注册与发现是实现服务动态管理和负载均衡的关键。本文将对四款主流的服务注册与发现工具——Etcd、Zookeeper、Consul、Nacos进行深入对比,从功能、性能、一致性、生态集成、应用场景等多个维度展开分析,帮助您选择最适合…...

桥接模式详解和分析JDBC中的应用

🎯 设计模式专栏,持续更新中, 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 桥接模式 文章目录 桥接模式桥接模式的四个核心组成&#xff1a…...

【python - 函数】

一、交互式会话 在与 Python 的交互式会话中,你可以在提示符 >>> 后键入一些 Python 代码,Python 解释器会读取并执行你键入的各种命令。 要启动交互式会话,请在终端 (Mac/Unix/Linux) 中键入 python3 或在 Windows 中打开 Python…...

scipy中稀疏矩阵特征值问题概述

在Python的scipy库中,这三种算法——ARPACK、LOBPCG、和AMG——都是用于求解稀疏矩阵特征值问题的数值方法。它们各自有不同的特性和适用场景,以下是详细说明: 1. ARPACK (Arnoldi Package) ARPACK(Arnoldi Package)…...

浅谈线性表——队列

文章目录 一、什么是队列?二、队列底层三、自我实现一个队列3.1、链式存储3.1.1、单向链表实现队列的实现代码3.1.2、双向链表实现队列的实现代码 3.2、顺序存储3.2.1、循环队列的实现代码 一、什么是队列? 队列是只允许在一端进行插入数据操作&#xf…...

2-94 基于matlab的最佳维纳滤波器的盲解卷积算法

基于matlab的最佳维纳滤波器的盲解卷积算法。维纳滤波将地震子波转换为任意所需要的形态。维纳滤波不同于反滤波,它是在最小平方的意义上为最 佳。基于最佳纳滤波理论的滤波器算法是莱文逊(Wiener—Levinson)算法。程序提供了4种子波和4种期望输出:零延迟…...

【提示词】浅谈GPT等大模型中的Prompt

Prompt是人工智能(AI)提示词,是一种利用自然语言来指导或激发人工智能模型完成特定任务的方法。在AI语境中,Prompt是一种自然语言输入,通常指的是向模型提出的一个请求或问题,这个请求或问题的形式和内容会…...

最强AI照片说话Windows一体包下载地址,口型合成音频驱动图片,免安装,下载即用

照片数字一键整合包:点击下载 一键安装包,简单一键启动,即刻使用,秒级体验。 目前效果最好的音频驱动图片说话的软件,比sadtalker、MuseTalk更清晰,效果更好,可以作为DID heygen的开源平替。原…...

Windows下使用cmake编译OpenCV

Windows下使用cmake编译OpenCV cmake下载OpenCV下载编译OpenCV cmake下载 下载地址:https://cmake.org/download/ 下载完成,点击选择路径安装即可 OpenCV下载 下载地址:https://github.com/opencv/opencv/releases/tag/4.8.1因为我们是编译…...

设计模式---中介者模式

设计模式---中介者模式 定义与设计思路中介者模式的引入:机场控制塔中介者模式的设计框架 定义与设计思路 定义:用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间…...

六氟化硫密度微水在线监测配套5孔M12格兰头航空插头插座

我们将为大家介绍如何使用六氟化硫密度微水在线监测配套5孔M12格兰头连接器。在本教程中,我们将向您展示简单易懂的步骤,让您轻松掌握。 所需材料: 1. 六氟化硫密度微水在线监测器 2. 5孔M12格兰头连接器 3. 电源线 4. 符合要求的电缆 5…...

linux -L4.linux 暂停和启动进程

接第3课,L3 第3课-查看进程 通过端口号,查看对应的进程 netstat -tulnp | grep :9513暂停这个进程 Kill -STOP 5376重启这个进程 Kill -CONT 5376要查看特定PID对应的端口,你可以使用netstat命令结合grep工具来过滤输出。以下是一个基于L…...

Java多线程编程-基础篇

多线程相关的概念 并发 并发是指在同一时间段内,两个或多个任务在同一个处理器上交替执行,使得在宏观上看起来像是同时进行。并发是通过快速切换任务来模拟同时执行的效果,实际上在任何一个时刻点上只有一个任务在执行。 也就是说&#xff0…...

【极限、数学】 NOIP 2018 提高组初赛试题 第 7 题详解(线段长度期望)

在一条长度为 1 1 1 的线段上随机取两个点,则以这两个点为端点的线段的期望长度是( )。 考虑将一个线段上平均分布有 n ( n ≥ 2 ) n(n\geq 2) n(n≥2) 个节点,其中首尾均有一个节点,那么我们就将一个线段均分为 n…...

《论网络安全体系设计》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化的普及,计算机网络已经在各行各业得到了广泛的应用。目前,绝大多数业务处理几乎完全依赖计算机和网络执行,各种重要数据如政府文件、工资档案、财务账目和人事档案等均依赖计算机和网络进行存储与传输。另一方面&…...

这款开源的通用PDF处理神器,功能炸裂!

今天分享一款以PDF为中心的多功能办公学习工具箱软件,包含四大板块功能:PDF实用工具箱、Anki制卡神器、Anki最强辅助、视频笔记神器,软件功能众多且强大,熟练运用可以大幅提高办公和学习效率,绝对是您不可多得的效率神…...

RabbitMQ延迟消息——DelayExchange插件

什么是死信以及死信交换机 当一个队列中的消息满足下列情况之一时,可以成为死信: 1. 消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false 2. 消息是一个过期消息,超时无人消费 3. 要投递的队列消…...

【系统规划与管理师】【案例分析】【考点】【答案篇】第5章 IT服务部署实施

【问题篇】☞【系统规划与管理师】【案例分析】【考点】【问题篇】第5章 IT服务部署实施 【移动端浏览】☞【系统规划与管理师】【案例分析】【模拟考题】章节考题汇总(第5章)(答案篇)(共24个知识点) 第5章…...

华为云服务器的数据库部署及管理

不管是终端数据上报到服务器进行存储,还是客户端的动态请求都需要用到数据库,因此这里对数据库的使用进行了一些记录,租用的是华为云的ECS弹性服务器(Ubuntu18)。下面以网页登录的账号信息Acount为例。 一、Mysql的安装…...

C#【必备技能篇】替换一个字节(byte)中连续几位(bit)的内容

文章目录 一、一个示例二、通用方法 一、一个示例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){Method1();}public static…...

roboguide将tp程序转化为LS文本格式的方法

不同的软件版本可能操作不同,但是仍然可以参考文章中的办法。 我使用的版本如图所示: 1.首先,打开任意一个工程,如果没有,可以打开自带的示例。 如图,我打开了自带的示例,在帮助文档中可以找到…...

基于SpringBoot+Vue+MySQL的流浪猫狗宠物救助救援网站管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当今社会,随着宠物数量的激增及人们关爱动物意识的提升,流浪猫狗问题日益严峻。为解决这一问题,构建一套高效、便捷的流浪猫狗宠物救助救援网站管理系统显得尤为重要。本系统基于SpringBoot…...

I/O 多路复用:`select`、`poll`、`epoll` 和 `kqueue` 的区别与示例

I/O 多路复用是指在一个线程内同时监控多个文件描述符(File Descriptor, FD),以便高效地处理多个 I/O 事件。在 UNIX/Linux 和 BSD 系统中,select、poll、epoll、kqueue 都是实现 I/O 多路复用的系统调用。它们各有特点&#xff0…...

大数据之Flink(三)

9.3、转换算子 9.3.1、基本转换算子 9.3.1.1、映射map 一一映射 package transform;import bean.WaterSensor; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; impor…...

【HCIA-Datacom】IPv4地址介绍

| | 👉个人主页:Reuuse 希望各位多多支持!❀ | 👉HCIA专栏博客 | 最后如果对你们有帮助的话希望有一个大大的赞! | ⭐你们的支持是我最大的动力!⭐ | 目录 IPv4地址定义IPv4地址分类方式二级目录三级目录 I…...