一文了解Spark引擎的优势及应用场景

Spark引擎诞生的背景

Spark的发展历程可以追溯到2009年,由加州大学伯克利分校的AMPLab研究团队发起。成为Apache软件基金会的孵化项目后,于2012年发布了第一个稳定版本。


以下是Spark的主要发展里程碑:

  • 初始版本发布:2010年开发的Matei Zaharia的研究项目成为Spark的前身。在2010年夏季,Spark首次公开亮相。
  • Apache孵化项目:2013年,Apache Spark成为Apache软件基金会的孵化项目。这一举动增加了Spark的可信度和可靠性,吸引了更多的贡献者和用户。
  • 发布1.0版本:2014年5月,Spark发布了第一个1.0版本,标志着其正式成熟和稳定可用。
  • 成为顶级项目:2014年6月,Spark成为Apache软件基金会的顶级项目。这个里程碑确认了Spark在大数据处理领域的领导地位。
  • Spark Streaming和MLlib:2014年6月,Spark 1.0版本中首次引入了Spark Streaming和MLlib(机器学习库),丰富了Spark的功能。
  • Spark SQL和DataFrame:2015年,Spark 1.3版本中引入了Spark SQL和DataFrame API,使得开发者可以更方便地进行结构化数据处理。
  • 发布2.0版本:2016年7月,Spark发布了2.0版本,引入了Dataset API,更加统一了Spark的编程模型。
  • 扩展生态系统:Spark逐渐形成了一个庞大的生态系统,包括了许多扩展库和工具,如GraphX、SparkR、Sparklyr等。
  • 运行更灵活:Spark不仅可以运行在独立模式下,还可以与其他大数据处理框架(如Hadoop YARN和Apache Mesos)集成。

目前,Spark已经成为大数据处理领域的主要引擎之一,并在各个行业和领域得到广泛应用。它的发展依然持续,持续推出新的功能和改进,以满足不断增长的大数据处理需求。


主要功能和hive 相比较的优势是哪些?

主要功能

image


上图是spark 引擎的核心功能,其中包括Spark Core、Spark SQL、Spark Streaming、Spark MLlib、GraphX和Structured Streaming等。

  1. Spark Core:实现了Spark的基本功能,包含了RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。
  2. Spark SQL:用于操作结构化数据的程序包。通过Spark SQL,我们可以使用SQL操作数据,方便数据分析和处理。
  3. Spark Streaming:提供了对实时数据进行流式计算的组件。Spark Streaming提供了用于操作数据流的API,可以实时处理数据并进行计算。
  4. Spark MLlib:是Spark提供的机器学习功能的程序库。它包括了常见的机器学习算法,如分类、回归、聚类、协同过滤等,还提供了模型评估和数据导入等支持功能。
  5. GraphX:是Spark中用于图计算的API。GraphX具有良好的性能,并提供了丰富的功能和运算符,可以在海量数据上运行复杂的图算法。
  6. Structured Streaming:是用于处理结构化流数据的组件,它可以统一离线和实时数据处理的API。Structured Streaming能够处理连续的数据流,并提供了更高级、更易用的API。

除了这些子项目,Spark还提供了集群管理器,可以高效地在一个计算节点到数千个计算节点之间伸缩计算。这使得Spark能够处理大规模的数据,并具有良好的可扩展性。

Spark的子项目和功能的不断扩展,使得Spark成为一个功能强大且灵活的大数据处理引擎。无论是在离线批处理还是实时流处理方面,Spark都提供了丰富的工具和API,满足了各种数据处理需求。

为了和hive 想比较,我们重点看看Spark SQL的语法.在Spark SQL中,常见的SQL语法包括以下内容:


1、查询语句:SELECT: 用于选择要查询的列FROM: 用于指定要查询的数据表或视图WHERE: 用于设置查询条件GROUP BY: 用于对结果进行分组HAVING: 用于对分组后的结果进行过滤ORDER BY: 用于对结果进行排序LIMIT: 用于限制返回的行数2、表操作语句:CREATE TABLE: 用于创建表DROP TABLE: 用于删除表ALTER TABLE: 用于修改表结构TRUNCATE TABLE: 用于清空表数据3、数据操作语句:INSERT INTO: 用于向表中插入数据UPDATE: 用于更新表中的数据DELETE FROM: 用于删除表中的数据4、聚合函数:COUNT: 统计行数SUM: 求和AVG: 求平均值MIN: 求最小值MAX: 求最大值5、条件表达式:AND, OR: 逻辑与和逻辑或NOT: 逻辑非=, <>, <, >, <=, >=: 比较运算符LIKE, IN, BETWEEN: 字符串匹配和范围判断

这些是Spark SQL中最常见的SQL语法,您可以根据需要使用它们来进行数据查询、表操作和数据操作等操作。并且Spark SQL可以从多种数据源读取数据。包括但不限于以下几种:

  • 文件系统:Spark SQL可以从本地文件系统或Hadoop分布式文件系统(HDFS)中读取数据。它支持读取常见的文件格式,如文本文件(CSV、JSON、XML等)、Parquet文件、Avro文件、ORC文件等。

  • 关系型数据库:Spark SQL可以从关系型数据库中读取数据,包括MySQL、PostgreSQL、Oracle等。您可以使用JDBC连接器来连接到数据库并执行SQL查询。

  • NoSQL数据库:Spark SQL也可以通过连接到NoSQL数据库(如MongoDB、Cassandra、Redis等)来读取数据。您可以使用相应的连接器来访问这些数据库,并使用Spark SQL查询语言进行查询。

  • Hive:Spark SQL可以与Hive集成,直接读取Hive表中的数据。这使得您可以使用Spark SQL查询来访问Hive中的数据,而无需写HiveQL语句。


除了以上几种常见的数据源,Spark SQL还支持许多其他的数据源,如Kafka、Elasticsearch、Azure Blob存储、Amazon S3等。您可以根据需要选择适合的数据源,并使用Spark SQL进行数据读取和查询操作。

既然Spark SQL 可以处理数据,那么为什么没有替代HIVE了?
主要是HIVE 支持一些Spark SQL 不支持的SQL语法。

例如以下是hive SQL 支持,而Spark SQL不支持的语法

1、查询建表Create table lvhou_test as selec * from lvhou_test1;2、Select子查询 select * from test1 where a,b in (select a,b from test2 where a = 'aa');select * from test1 where a,b not  in (select a,b from test2 where a = 'aa');3、Select union 查询select * from test union all select * from test0;(合一)select * from test union select * from test0;(去重)select * from (select * from test union select * from test0) a;select a from (select * from test union all select * from test0) a;4、Update 语句update test1 set b = 'abc' where a = 'aa';update test1 set a = 'abc';5、delete/alter 语句delete from test1 where a = 'aa';alter table test1 add columns (d string);6、order by 语句
select a from test order by a desc;7、sort by 语句
select a,b from test sort by b desc;8、count 函数
select count(distinct *) from test00;

注意这里说的不支持,是指它不是以sql的形式支持的,和前面说spark SQL支持聚合函数方式是不一样的,它是以data frame的形式支持

以下是使用count函数的示例:
import org.apache.spark.sql.SparkSession

// 创建SparkSession对象
val spark = SparkSession.builder().appName("CountFunctionExample").getOrCreate()// 创建DataFrame
val data = Seq(("Alice", 25), ("Bob", 30), ("Charlie", 35), ("Alice", 40))
val df = spark.createDataFrame(data).toDF("name", "age")// 使用count函数计算非空值的个数
val count = df.selectExpr("count(name)").as[Long].first()println(s"Count: $count")

在上述示例中,通过创建一个包含姓名和年龄的DataFrame,然后使用count函数计算姓名列中的非空值的个数,最后打印结果。

请注意,count函数可以用于单列或多列,甚至可以在整个DataFrame上使用,以计算非空行的数量。

以上的语法上的区别就可以说明了hive SQL 和Spark SQL 的应用场景上的区别。

  1. Hive SQL适用于大规模的离线批处理,而Spark SQL则适用于迭代式计算和交互式数据挖掘。Spark SQL通过使用RDD数据结构和内存存储优化来提高中间结果的计算效率。

  2. 相比之下,Hive SQL会将中间结果数据写入稳定的文件系统中,这可能会导致数据的复制备份、磁盘I/O和数据的序列化,从而在需要复用中间结果的操作中效率较低。而Spark SQL使用RDD数据结构将中间结果保存在内存中,可以通过控制数据集的分区来实现最优化的数据存储和处理。同时,Spark SQL还提供了丰富的API来操作数据集。

总结一下,hiveSQL 应用于大规模的离线跑批,但是对时间要求不高,而Spark SQL 应用于迭代式计算和交互式数据挖掘、Spark Streaming 支持流式数据计算、Spark MLlibk提供的机器学习功能的程序库。它包括了常见的机器学习算法,如分类、回归、聚类、协同过滤等,还提供了模型评估和数据导入等支持功能。GraphX用于图计算的API。可以在海量数据上运行复杂的图算法。


应用场景

Spark SQL 的迭代式计算的应用场景

迭代式计算是一种通过重复执行相同的计算步骤来达到某个目标的计算方法。在迭代式计算中,计算的结果会作为下一次计算的输入,这样可以逐步逼近目标值。迭代式计算通常用于解决无法通过单次计算得出精确解的问题,例如优化问题、机器学习算法等。通过多次迭代,可以逐步提高计算的精度和准确性。常见的迭代式计算用于最优化问题,用于求解最大化或最小化目标函数的问题。通过不断迭代,在每次迭代中找到使目标函数值最优化的参数。

  • 在工程优化设计领域。它可以用来优化各种工程系统的设计和维护,例如确定一个复杂机械装置的尺寸、材料及配制,以最小化能源消耗或者最大化生产效率。
  • 在金融领域,迭代式计算可以用于对股票、期权和其他金融资产的价格建模。通过对复杂的财务数据进行分析,迭代式计算可以帮助金融机构做出更好的风险决策,从而更好地保护资产。
  • 交通规划也可以应用迭代式计算,以建立最优的道路和交通网络。迭代式计算可以考虑到不同的目标,如最小化出行时间、最小化交通拥堵、最小化公共交通成本,以及最小化环境污染等。

Spark Streaming 支持流式数据计算应用场景

Spark Streaming 支持许多流式数据计算应用场景,包括但不限于以下几个:

  • 实时数据处理和分析:Spark Streaming可以处理连续流入的数据,并实时计算、聚合和分析数据。这可用于实时监控、实时报警、网络流量分析、实时可视化等。

  • 基于流的机器学习:Spark Streaming可结合Spark的机器学习库(如MLlib)进行流式机器学习。通过连续接收数据流,并实时训练和更新模型,可以构建实时推荐系统、欺诈检测、实时广告投放等。

  • 事件驱动的应用:Spark Streaming可以用于处理事件驱动的应用,如实时日志处理、社交媒体分析、网络安全监测等。它可以从事件流中提取有用的信息、进行模式识别和异常检测。


Spark MLlibk提供的机器学习功能应用场景

Spark MLlib的机器学习算法库可以在各种应用场景中使用。以下是一些常见的应用场景:

  • 分类和回归:在分类和回归问题中,MLlib提供了支持向量机(SVM)、逻辑回归(Logistic Regression)、决策树(Decision Trees)、随机森林(Random Forests)、梯度提升树(Gradient-Boosted Trees)等算法。这些算法可以用于许多领域,如金融、营销、医疗等,用于预测和分类。

  • 聚类:MLlib提供了多种聚类算法,如k均值聚类(K-means)、高斯混合模型(Gaussian Mixture Model)等。这些算法可以用于市场细分、用户分群、异常检测等。

  • 协同过滤:MLlib提供了基于用户的协同过滤(User-Based Collaborative Filtering)和基于物品的协同过滤(Item-Based Collaborative Filtering)算法,用于推荐系统。这些算法可以根据用户的行为数据,如浏览记录或评分,为用户提供个性化的推荐。

  • 特征工程:MLlib提供了一系列特征工程的函数和工具,用于数据的预处理和特征提取。例如,通过特征提取、降维、尺度变换等方法,可以将原始数据转换为高维特征向量,更好地适应机器学习算法的输入格式要求。

除了上述应用场景外,MLlib还支持模型评估、参数调优、模型持久化等常见机器学习任务。尤其是由于Spark的分布式计算模型,MLlib在大规模数据集上能够提供高性能的机器学习解决方案。


Spark GraphX 图计算框架应用场景

GraphX 是 Spark 提供的图计算框架,用于处理大规模图数据。它的应用场景包括但不限于以下几个方面:

  • 社交网络分析:GraphX 可以用于分析社交网络中的节点和关系,如查找社交网络中的影响力最大的节点、查找节点之间的关系强度等。

  • 推荐系统:GraphX 可以用于构建用户和商品之间的关系图,通过图算法进行推荐,如基于相似性的协同过滤、基于随机游走的推荐算法等。

  • 路径分析:GraphX 可以用于分析路径相关的问题,如查找两个节点之间的最短路径、查找节点周围的节点等。

  • 网络流分析:GraphX 可以用于分析网络流量,如找出网络中的瓶颈、计算最大流等。


结论:

当进行大规模数据量的离线跑批的时候,对时间延迟要求不高,成本投入有限的情况下使用Hive SQL,hive sql 对机器的要求不高,因为数据存储在文件中。而对数据计算复杂(有推荐、分类、聚类算法场景)且时延要求高的场景,如迭代计算, 交互式计算, 流计算、有机器学习算法需求,图计算需求,且成本投入可以接受的情况下使用Spark SQL,Spark SQL读取的数据都是存入到内存中,因此对机器的内存有要求,且要求内存较大, 相对较贵.

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

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

相关文章

2024全新仿麻豆视频苹果cms源码v10影视模板

下载地址&#xff1a;2024全新仿麻豆视频苹果cms源码v10影视模板 高端大气的设计&#xff0c;适合做电影、连续剧、综艺、动漫、微电影、纪录片、海外剧等视频网站

N3 中文文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊# 前言 前言 前面学习了相关自然语言编码&#xff0c;这周进行相关实战 导入依赖库和设置设备 import torch import torch.nn as nn import torchvision fro…

虚函数机制-动态绑定的应用

虚函数使得程序在运行的时候根据指针指向对象的类型来确定调用哪个函数。 下图中&#xff1a;都为静态绑定。因为在编译器就确定了可以调用的函数 此时当基类指针指向派生类对象时&#xff0c;因为没有virtual关键字&#xff0c;所以在编译阶段就根据指针类型确定了要指向的函…

秋招突击——第四弹——Java的SSN框架快速入门——Maven

文章目录 引言Maven分模块开发与设计分模块开发的过程 依赖管理可选依赖与排除依赖 继承与聚合聚合继承 属性和版本管理属性扩大集中管理的范围版本管理 多环境开发多环境开发 私服简介安装私服资源操作流程分析上传和下载 总结 引言 前一个部分花了太多时间&#xff0c;后续得…

【Pandas驯化-02】pd.read_csv读取中文出现error解决方法

【Pandas】驯化-02pd.read_csv读取中文出现error解决方法 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公众号 &…

MEMS:Lecture 17 Noise MDS

讲义 Minimum Detectable Signal (MDS) Minimum Detectable Signal&#xff08;最小可检测信号&#xff09;是指当信号-噪声比&#xff08;Signal-to-Noise Ratio, SNR&#xff09;等于1时的输入信号水平。简单来说&#xff0c;MDS 是一个系统能够分辨出信号存在的最低输入信号…

视频网站下载利器yt-dlp参数详解

yt-dlp 是一个强大的命令行工具&#xff0c;用来下载 YouTube 和其他网站上的视频和音频。它拥有丰富的参数&#xff0c;可以定制下载行为&#xff0c;满足各种需求。本文将详细介绍 yt-dlp 的参数使用。 一、基本参数 -f, –format FORMAT: 指定下载格式&#xff0c;可以用视…

mysql:1205-Lock wait timeout exceeded;try restarting transaction

1.现象 2.分析 使用下面sql在自带数据库的information_schema中查询,注意观察那些长时间开启事务又没完成的进程,然后根据进程的db、操作人、主机、事务开启时间和状态,来排查是什么情况导致的事务未完成(代码异常、执行时间超时等等);我这里是异步作业事务执行时间过长导致的 …

H5拟态个人主页

演示地址&#xff1a;科技语者个人主页 (chgskj.cn) 文末有该项目的源码~ 这张图片的效果你是不是非常想要get同款&#xff1f; 源码就是这个样子 这段HTML代码构建了一个个人主页&#xff0c;结合了CSS样式和JavaScript功能。 下面是对代码的主要组成部分的详细解释&#x…

苏姿丰回忆IBM工作经历 曾参与PS3 Cell处理器开发

AMD首席执行官苏姿丰博士曾在IBM工作了13年&#xff0c;先后担任IBM纽约半导体研发中心的副主管、研发部门主管和CEO特别助理。1998年苹果发布的iMac G3里&#xff0c;使用的PowerPC 750是首个采用铜互连技术的处理器&#xff0c;取代了铝互连技术。此前相关报道中曾提及&#…

深入理解计算机系统 CSAPP 家庭作业6.37

S256 N64时: sumA:这个很简单了,不说了 sumB:如下表. i递增时一直不命中 读到j1,i0 即读a[0][1]时 组0存放的是a[48][0] -a[48][3] 接着读a[1][1]时,组16放的是a[49][0]-a[49][3],j递增之后还是一直不命中 组0:a[0][0]a[16][0]a[32][0]a[48][0]a[0][1]组16:a[1][0]a[17][…

Windows下的zip压缩包版Mysql8.3.0数据迁移到Mysql8.4.0可以用拷贝data文件夹的方式

Windows下的zip压缩包版Mysql8.3.0数据迁移到Mysql8.4.0可以用拷贝data文件夹的方式 拷贝后, 所有账户和数据都是一样的 步骤 停止MySQL服务 net stop mysql 或 sc.exe stop mysql net stop mysqlsc.exe stop mysql卸载 Mysql8.3.0 的服务 mysqld remove 或 mysqld remove m…

idea的java代码引用proto文件报错

尝试了四种办法&#xff0c;感觉第一个和第二个比较有效。 前提是要先安装了 proto 的idea插件。 1.修改idea配置文件编译大文件的限制 proto生成的源文件有数万行&#xff0c;源文件过大导致 idea 拒绝编译过大的源文件。 解决方案&#xff1a; 如果 protoc 生成的 class 文…

C++语法05 浮点型/实数类型

什么是实数类型 实数类型是一种数据类型&#xff0c;实数类型变量里能存放小数和整数。 定义格式&#xff1a;double a; 赋值&#xff1a;a0.4; 输入&#xff1a;cin>>a; 输出&#xff1a;cout<<a; 训练&#xff1a;尺子的价格 小知在文具店买铅笔&#xff…

RIP路由协议汇总(华为)

#交换设备 RIP路由协议汇总 一、原理概述 当网络中路由器的路由条目非常多时&#xff0c;可以通过路由汇总&#xff08;又称路由汇聚或路由聚合&#xff09;来减少路由条目数&#xff0c;加快路由收敛时间和增强网络稳定性。路由汇总的原理是&#xff0c;同一个自然网段内的不…

基数和基数转换

目录 一、定义&#xff1a; 二、各个进制&#xff1a; 1、二进制&#xff1a; 2、八进制&#xff1a; 3、十进制&#xff1a; 4、十六进制&#xff1a; 三、基数转换&#xff1a; 1、各类基数转十进制&#xff1a; 二转十&#xff1a; 八转十&#xff1a; 十六转八&a…

Maven 项目的创建(导入依赖、仓库、maven的配置、配置国内源、以及可能遇到的问题)

一、创建Maven项目 使用的编译软件&#xff1a;idea 软件版本&#xff1a; 社区版 2021.1 - 2022.4&#xff08;为什么选择这个版本&#xff0c;因为只有这个版本里有一些插件是可以安装的&#xff09; 专业版不限制&#xff08;专业版功能是最全的&#xff0c;但是收费&am…

【操作与配置】Pytorch环境搭建

安装显卡驱动 显卡驱动是一种软件程序&#xff0c;用于控制显卡硬件与操作系统之间的通信和交互。显卡驱动负责向操作系统提供有关显卡硬件的信息&#xff0c;以及使操作系统能够正确地控制和管理显卡的各种功能和性能。显卡驱动还包含了针对不同应用程序和游戏的优化&#xff…

C语言入门学习系列:基本语法

目录 引言1. 标准库与头文件2. 语句3. 表达式3.1 表达式在赋值语句中3.2 表达式在控制结构中3.3 表达式作为函数参数3.4 表达式和语句的区别 4. 语句块5. 空格6. 注释7. printf() 函数7.1 基本用法7.2 占位符7.3 输出格式 引言 #include <stdio.h>int main(void) {int a…