Spark-第一周

一、spark是什么

Spark是一种快速、通用、可扩展的大数据分析引擎

2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。

目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。

二、为什么用Spark

Hadoop的MapReduce计算模型存在的问题:
    MapReduce的核心是Shuffle(洗牌)。在整个Shuffle的过程中,至少会产生6次的I/O。下图是MapReduce的Shuffle的过程。
    中间结果输出:基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。另外,当一些查询(如:Hive)翻译到MapReduce任务时,往往会产生多个Stage(阶段),而这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果,而I/O的效率往往较低,从而影响了MapReduce的运行速度。

    Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。

三、spark体系

3.1集群模式概述

Spark 应用程序作为集群上独立的进程集运行,由SparkContext 主程序(称为驱动程序)中的对象进行协调。

具体来说,为了在集群上运行,SparkContext 可以连接到多种类型的集群管理器 (Spark 自己的独立集群管理器、Mesos、YARN 或 Kubernetes),这些集群管理器跨应用程序分配资源。连接后,Spark 会获取集群中节点上的执行程序,这些执行程序是为应用程序运行计算和存储数据的进程。接下来,它将您的应用程序代码(由传递到 SparkContext 的 JAR 或 Python 文件定义)发送到执行器。最后,SparkContext将任务发送给执行器来运行。

关于此架构,有几个有用的事项需要注意:

  • 每个应用程序都有自己的执行程序进程,这些进程在整个应用程序的持续时间内保持运行并在多个线程中运行任务。这样做的好处是可以在调度端(每个驱动程序调度自己的任务)和执行器端(来自不同应用程序的任务在不同的 JVM 中运行)将应用程序彼此隔离。但是,这也意味着如果不将数据写入外部存储系统,则无法在不同的 Spark 应用程序(SparkContext 实例)之间共享数据
  • Spark 对于底层集群管理器是不可知的。只要它能够获取执行程序进程,并且这些进程相互通信,即使在也支持其他应用程序(例如Mesos/YARN/Kubernetes)的集群管理器上运行它也相对容易。
  • 驱动程序必须在其整个生命周期中侦听并接受来自其执行程序的传入连接(例如,请参阅网络配置部分中的spark.driver.port)。因此,驱动程序必须可从工作节点进行网络寻址。
  • 由于驱动程序在集群上调度任务,因此它应该靠近工作节点运行,最好在同一局域网上。如果您想远程向集群发送请求,最好向驱动程序打开 RPC 并让它从附近提交操作,而不是在远离工作节点的地方运行驱动程序。

3.2Spark 是如何工作的

Spark架构

当作业进入时,驱动程序将代码转换为逻辑有向无环图 (DAG)。然后,驱动程序执行某些优化,例如管道转换。

此外,它将 DAG 转换为具有阶段集的物理执行计划。同时,它在每个阶段下创建称为任务的小型执行单元。然后它收集所有任务并将其发送到集群。

它是与集群管理器对话并协商资源的驱动程序。此集群管理器代表驱动程序启动执行程序后。此时,基于数据,放置驱动程序将任务发送到集群管理器。

在执行器开始执行之前,执行器将自己注册到驱动程序中。使驱动程序拥有所有执行者的整体视图。

现在,Executors 执行 driver 分配的所有任务。同时,应用程序运行时,驱动程序监视运行的执行器。在spark架构中驱动程序调度未来的任务。

所有任务都根据数据放置来跟踪缓存数据的位置。当它调用sparkcontext的stop方法时,它会终止所有的执行器。之后,它从集群管理器中释放资源。

3.3Spark的核心组件

3.3.1Spark Core


Spark Core是Spark生态系统的核心模块,提供了分布式任务调度、内存管理、错误恢复和与存储系统交互的功能。其主要特性包括:

RDD(Resilient Distributed Dataset):
RDD是Spark中最基本的抽象,代表一个不可变、可分区、可以并行操作的数据集。RDD可以通过读取外部数据源(如HDFS、HBase、本地文件等)或在其他RDD上进行操作来创建。
 

分布式任务调度:
Spark Core使用基于DAG(有向无环图)的任务调度模型来执行计算任务。它将用户程序转换为DAG图,根据依赖关系并行执行任务。
 

内存计算:
Spark Core充分利用内存计算技术,将中间数据存储在内存中,从而大大提高了计算速度。此外,Spark还提供了可配置的内存管理机制,使用户可以根据应用程序的特点进行调优。

3.3.2Spark Streaming


Spark Streaming是Spark提供的用于实时流数据处理的组件,可以实现对持续不断的数据流进行实时计算和分析。Spark Streaming 是核心 Spark API 的扩展,可实现实时数据流的可扩展、高吞吐量、容错流处理。数据可以从许多来源(如 Kafka、Kinesis 或 TCP 套接字)获取,并且可以使用用高级函数(如 map、reduce、join 和 window)表示的复杂算法进行处理。最后,处理后的数据可以推送到文件系统、数据库和实时仪表板。事实上,您可以将Spark的 机器学习和 图处理算法应用在数据流上。

在内部,它的工作原理如下。 Spark Streaming接收实时输入数据流,并将数据分成批次,然后由Spark引擎处理以批次生成最终结果流。

Spark Streaming 提供了称为离散流或DStream的高级抽象,它表示连续的数据流。 DStream 可以通过来自 Kafka 和 Kinesis 等源的输入数据流创建,也可以通过在其他 DStream 上应用高级操作来创建。在内部,DStream 表示为RDD序列 。

其主要特性包括:

微批处理:
Spark Streaming将实时数据流分成小批次进行处理,每个批次的数据都可以作为一个RDD进行处理。这种微批处理的方式既保证了低延迟,又兼顾了高吞吐量。

容错性:
Spark Streaming具有与Spark Core相同的容错性,能够在节点故障时进行数据恢复和任务重启,保证数据处理的可靠性。

3.3.3Spark SQL


Spark SQL 是 Spark 生态系统中的一个组件,用于结构化数据的处理和分析。它提供了 SQL 查询、DataFrame API、集成外部数据源等功能,使用户可以使用标准的 SQL 语句或编程接口来处理大规模的结构化数据。下面将详细展开 Spark SQL 的特点、组成部分以及应用场景。

特点

结构化数据处理
Spark SQL 专注于结构化数据的处理,支持将数据加载为 DataFrame,并提供了丰富的操作和转换,如选择、过滤、聚合、连接等。
SQL 查询支持
Spark SQL 提供了对标准 SQL 查询语句的支持,用户可以直接在 Spark 中执行 SQL 查询,对数据进行查询、筛选、聚合等操作,无需编写复杂的代码。
DataFrame API
除了 SQL 查询之外,Spark SQL 还提供了 DataFrame API,使用户可以使用类似于 Pandas 的编程接口来操作数据。DataFrame API 提供了丰富的函数和操作,可以完成各种数据处理任务。
外部数据源集成
Spark SQL 支持与多种外部数据源的集成,包括 HDFS、Hive、JDBC、Parquet、Avro 等。用户可以轻松地从这些数据源中读取数据,并进行处理和分析。

组成部分

Catalyst 查询优化器:
Catalyst 是 Spark SQL 中的查询优化器,负责将 SQL 查询转换为适用于 Spark 的执行计划,并对执行计划进行优化。它采用了基于规则和代价模型的优化策略,可以大大提高查询性能。

Tungsten 执行引擎:
Tungsten 是 Spark SQL 中的执行引擎,负责执行查询计划并进行数据处理。它采用了基于内存的列存储和代码生成技术,可以大大提高数据处理的速度和效率。

Hive 兼容性:
Spark SQL 兼容 Hive,可以直接读取 Hive 表并执行 HiveQL 查询。它还支持将 Hive UDF(User Defined Function)注册为 Spark SQL 函数,从而实现更丰富的数据处理功能。

3.3.4MLlib(机器学习库)

MLlib是Spark生态系统中的机器学习库,提供了丰富的机器学习算法和工具,可以用于数据挖掘、预测分析、分类、聚类等任务。MLlib的设计目标是实现可扩展性、易用性和高性能,使得用户能够在大规模数据集上进行高效的机器学习计算。

特性

可扩展性
MLlib采用了分布式并行计算模型,可以在大规模数据集上进行高效的机器学习计算。它利用了Spark的RDD(Resilient Distributed Dataset)数据抽象和并行计算引擎,实现了对数据的分布式处理和算法的并行执行,从而能够处理PB级别的数据集。
易用性
MLlib提供了简单易用的API,使得用户可以轻松地构建和调整机器学习模型。它提供了丰富的机器学习算法和工具,并支持常见的数据格式,如RDD、DataFrame等,同时也提供了丰富的文档和示例,帮助用户快速上手和解决问题。
高性能
MLlib的底层实现采用了高效的并行计算算法和数据结构,能够充分利用集群的计算资源,并通过优化算法和数据处理流程来提高计算性能。此外,MLlib还支持在内存中进行计算,可以大大提高计算速度。


主要组成部分

分类与回归
MLlib提供了一系列的分类和回归算法,包括逻辑回归、决策树、随机森林、梯度提升树等。这些算法可以用于解决分类和回归问题,如预测用户点击率、预测房价等。

聚类
MLlib提供了多种聚类算法,如K均值、高斯混合模型等。这些算法可以用于将数据集划分成若干个类别,并找出类别之间的相似性和差异性。

协同过滤
MLlib提供了基于协同过滤的推荐算法,如交替最小二乘法(ALS)等。这些算法可以用于构建推荐系统,预测用户对商品的喜好程度,从而实现个性化推荐。

降维与特征提取
MLlib提供了多种降维和特征提取算法,如主成分分析(PCA)、奇异值分解(SVD)等。这些算法可以用于减少数据维度、提取数据特征,从而简化模型和提高计算效率。

模型评估与调优
MLlib提供了多种模型评估和调优的工具,如交叉验证、网格搜索等。这些工具可以帮助用户评估模型的性能、选择合适的参数,并优化模型的预测能力。

3.3.5GraphX(图计算库)

GraphX 是 Spark 中用于图和图并行计算的新组件。在较高层面上,GraphX通过引入新的图抽象来扩展 Spark RDD:一个具有附加到每个顶点和边的属性的有向多重图。为了支持图计算,GraphX 公开了一组基本运算符(例如subgraph、joinVertices和 aggregateMessages)以及Pregel API 的优化变体。此外,GraphX 还包含越来越多的图形算法和 构建器,以简化图形分析任务。

特点

高级抽象
GraphX 提供了一种高级抽象的方式来表示图数据,将图抽象为顶点和边的集合,并支持属性的附加。用户可以通过简单的 API 来构建和操作图数据,而无需关注底层的数据结构和实现细节。
并行计算
GraphX 利用 Spark 的分布式计算模型来实现图的并行计算,可以在大规模数据集上高效地进行图算法的计算。它将图划分成多个分区,并利用并行计算技术来加速计算过程,提高计算性能。
容错性
GraphX 具有与 Spark Core 相同的容错性,能够在节点故障时进行数据恢复和任务重启,保证图计算的可靠性。它利用 RDD 的弹性特性和日志记录来实现容错机制,确保计算的正确性和一致性。


组成部分

图抽象
GraphX 将图抽象为顶点(Vertex)和边(Edge)的集合,每个顶点和边都可以附加属性。用户可以通过构建顶点和边的集合来创建图对象,并对图进行操作和转换。
图操作
GraphX 提供了丰富的图操作和转换,如图的连接、过滤、映射、聚合等。用户可以使用这些操作来对图进行数据处理和分析,如查找最短路径、计算图的连通分量等。
图算法
GraphX 实现了多种常见的图算法,如 PageRank、图搜索、最短路径算法等。用户可以直接调用这些算法来解决图相关的问题,而无需自己实现复杂的算法逻辑。

四、spark安装部署

1.spark-on-yarn模式集群搭建

参考:Spark环境搭建-Spark-on-Yarn

2.spark常用配置

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

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

相关文章

常见的数据集格式

常见的数据集格式有三种,分别为voc(xml)、coco(json)、yolo(txt)。 1 VOC VOC数据集由五个部分构成:JPEGImages,Annotations,ImageSets,SegmentationClass以及SegmentationObject. . └── VOC #根目…

HAL库源码移植与使用之RTC时钟

实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒,专门用来记录时间。 普通定时器无法掉电运行!但RTC可由VBAT备用电源供电,断电不断时 这里讲F1系列的RTC 可以产生三个中断信号&#xff…

Kafka之存储设计

文章目录 1. 分区和副本的存储结构1. 分区和副本的分布2. 存储目录结构3. 文件描述 2. 相关配置3. 数据文件类型4. 数据定位原理LogSegment 类UnifiedLog 类 5. 副本数据同步HW水位线LEO末端偏移量HW更新原理 6. 数据清除 1. 分区和副本的存储结构 在一个多 broker 的 Kafka 集…

文心一言大模型

文心一言是百度基于其强大的“文心”大模型技术推出的生成式AI产品(英文名:ERNIE Bot)。以下是关于文心一言的详细介绍: 一、产品定位与功能 定位:文心一言被定位为人工智能基座型的赋能平台,旨在助力金融…

MFC:以消息为基础的事件驱动系统和消息映射机制

以消息为基础的事件驱动系统和消息映射机制 (1)消息 A.What(什么是消息) 本质是一个数据结构,用于应用程序不同部分之间进行通信和交互 typedef struct tagMSG {HWND hwnd; // 接收该消息的窗口句柄UINT message; // 消息标…

【C语言】 利用栈完成十进制转二进制(分文件编译,堆区申请空间malloc)

利用栈先进后出的特性,在函数内部,进行除二取余的操作,把每次的余数存入栈内,最后输出刚好就是逆序输出,为二进制数 学习过程中,对存储栈进行堆区的内存申请时候,并不是很熟练,一开始…

双边性:构建神经网络的新方法

正如承诺的那样,这是最近我遇到的最有趣的想法之一的第二部分。如果你错过了,请务必观看本系列的第一部分 - 神经科学家对改进神经网络的看法 - 我们讨论了双边性的生物学基础以及我们大脑的不对称性质如何带来更高的性能。 在这篇文章中,我…

v-for 进行列表的 增删改查

通过对象下标替换属性值 但是通过实践此方法是错误的&#xff0c;Vue监听的是students这个对象&#xff0c;而不是这个对象里面的数组信息&#xff0c;也就是说&#xff0c;改变里面的值&#xff0c;并不能在页面上实现更新的功能 <!DOCTYPE html> <html lang"en…

通俗地理解主动元数据管理

元数据管理&#xff0c;是企业开展数据管理的核心基础&#xff0c;内容涉及元数据的创建&#xff0c;确定需要捕获哪些元数据&#xff0c;通过哪些工具和流程进行创建&#xff0c;继而将元数据妥善存储&#xff0c;保障安全性和可访问性&#xff0c;并不断更新维护&#xff0c;…

[渗透测试] 反序列化漏洞

反序列化漏洞 ​ 序列化&#xff1a;将对象的状态信息转换为可以传输或存储的形式的过程。简单的来说&#xff0c;就是将一个抽象的对象转换成可以传输的字符串 &#xff0c;以特定的形式在进行之间实现跨平台的传输。 序列化大多以字节流、字符串、json串的形式来传输。将对…

linux/windows wps node.js插件对PPT状态监听并且通知其他应用

需求背景 公司要求对Window系统&#xff0c;和国产操作系统&#xff08;UOS&#xff09;的wps 软件在 PPT开始播放 结束播放&#xff0c;和播放中翻页 上一页 下一页 等状态进行监听&#xff0c;并通知到我们桌面应用。 技术方案 开发WPS插件&#xff0c;使用node.JS 插件开…

系统架构设计师①:计算机组成与体系结构

系统架构设计师①&#xff1a;计算机组成与体系结构 计算机结构 计算机的组成结构可以概括为以下几个主要部分&#xff1a;中央处理器&#xff08;CPU&#xff09;、存储器&#xff08;包括主存和外存&#xff09;、输入设备、输出设备&#xff0c;以及控制器、运算器、总线和…

如何查看jvm资源占用情况

如何设置jar的内存 java -XX:MetaspaceSize256M -XX:MaxMetaspaceSize256M -XX:AlwaysPreTouch -XX:ReservedCodeCacheSize128m -XX:InitialCodeCacheSize128m -Xss512k -Xmx2g -Xms2g -XX:UseG1GC -XX:G1HeapRegionSize4M -jar your-application.jar以上配置为堆内存4G jar项…

使用puma部署ruby on rails的记录

之前写过一篇《记录一下我的Ruby On Rails的systemd服务脚本》的记录&#xff0c;现在补上一个比较政治正确的Ruby On Rails的生产环境部署记录。使用Puma部署项目。 创建文件 /usr/lib/systemd/system/puma.service [Unit] DescriptionPuma HTTP Server DocumentationRuby O…

[AWS]MSK调用,报错Access denied

背景&#xff1a;首先MSK就是配置一个AWS的托管 kafka&#xff0c;创建完成之后就交给开发进行使用&#xff0c;开发通常是从代码中&#xff0c;编写AWS的access_key 和secret_key进行调用。 但是开发在进行调用的时候&#xff0c;一直报错连接失败&#xff0c;其实问题很简单&…

Electron 企业级开发通信与本地存储实用解决方案

背景 之前写了一篇Electron通信的方式&#xff0c;讲述了一下三者之间的通信机制&#xff0c;比较恶心&#xff0c;后来发现有个electron/remote&#xff0c; Electron 渲染进程直接调用主进程的API库electron/remote引用讲解-CSDN博客文章浏览阅读58次。remote是个老库&…

蓝队黑名单IP解封提取脚本

应用场景&#xff1a;公司给蓝队人员一个解封IP列表&#xff0c;假如某个IP满足属于某某C段&#xff0c;则对该IP进行解封。该脚本则是进行批量筛选出符合条件的白名单IP 实操如下&#xff1a;公司给了一个已经封禁了的黑名单IP列表如下&#xff08;black&#xff09; 公司要求…

高清视频,无损音频,LDR6023——打造极致视听与高效充电的双重享受!

Type-C PD&#xff08;Power Delivery&#xff09;芯片是一种支持USB Type-C接口规范的电源管理单元&#xff0c;其主要功能包括&#xff1a; 快速充电&#xff1a;Type-C PD芯片支持高功率传输&#xff0c;能够提供更快的充电速度&#xff0c;使电子设备在短时间内充满电&…

微信小程序:多图片显示及图片点击放大,多视频显示

微信小程序&#xff1a;多图片显示及图片点击放大&#xff0c;多视频显示 01 多图片显示及图片点击放大02 多视频03 全部代码 01 多图片显示及图片点击放大 <view><view class"title">图片&#xff1a;</view><block wx:if"{{photoUrlList…

源码搭建国内微短剧系统(APP+小程序)云存储配置流程

国内微短剧系统很多人不知道云存储和配置的操作流程&#xff0c;我整理了一份非常详细的操作文档流程&#xff0c;给大家介绍短剧系统云存储配置的详细操作流程。顺便推荐一下国内微短剧系统。 推荐下他们的开源地址&#xff1a;https://gitee.com/nymaite_com_2878868888/tjg…