当前位置: 首页 > 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…...

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

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

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...