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

news2024/11/25 8:46:22

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.coloradmin.cn/o/1826514.html

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

相关文章

mysql报错Access denied for user ‘root‘,navicat可以连接mysql,spring不能连mysql

首先修改配置文件跳过验证&#xff0c;编辑你自己挂载的配置文件的位置 #查找my.cnf位置 sudo find / -name "my.cnf"编辑mysql配置文件 vim /opt/soft/mysql/conf/my.cnf #在[mysqld]下面添加 skip_grant_tables#重启mysql docker restart mysql#进入容器 docke…

完美的移动端 UI 风格让客户无可挑剔

完美的移动端 UI 风格让客户无可挑剔

快速数据处理:软件功能简介及下载

目录 1 功能介绍 1.1 封面 1.2 可定制功能 1.3 支持的操作系统和CPU 1.4 数据上报 1.5 数据接收 1.5 附带的测试数据 1.6 关于内置python的说明 2 软件下载 3 待开发功能 发布这个程序的原因是&#xff0c;前面写的这个专题的几篇文章&#xff0c;我原以为一点用也没…

代码随想录算法训练营第三十六天| 452. 用最少数量的箭引爆气球, 435. 无重叠区间 ,763.划分字母区间

452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int findMinArrowShots(int[][] points) {if (points.length < 1) {return points.length;}Arrays.sort(points, (o1, o2) -> {if (o1[0] ! o2[0]) {return o1[0] < o2[0…

局域网监控软件有哪些:五款好用的网络监控神器分享(收藏篇)

在日益复杂的企业网络环境中&#xff0c;有效地监控局域网内的活动对于确保网络安全、提高工作效率和维护企业资产至关重要。 为此&#xff0c;精选了五款市场上广受好评的局域网监控软件&#xff0c;它们各自具备独特的功能和优势&#xff0c;能够满足不同规模企业的需求&…

下载使用nginx发布html自定义页面

在浏览器搜索nginx.org&#xff0c;然后点击download&#xff0c;接着点击 stable and mainline 选择自己所使用系统对应的信息后点击&#xff08;我用的是CentOS&#xff0c;所以需要点击RHEL and derivatives&#xff09; vim /etc/yum.repos.d/nginx.repo [nginx-stable] n…

大模型应用:LangChain-Golang核心模块使用

1.简介 LangChain是一个开源的框架&#xff0c;它提供了构建基于大模型的AI应用所需的模块和工具。它可以帮助开发者轻松地与大型语言模型(LLM)集成&#xff0c;实现文本生成、问答、翻译、对话等任务。LangChain的出现大大降低了AI应用开发的门槛&#xff0c;使得任何人都可以…

Vue引入element-plus-04

我们这次开发是使用vue的脚手架来进行开发,前面我们已经使用过最原生的方式去编写我们的vue的语法,从今天开始就使用vue的脚手架,但是前提是你需要用于node的环境 在我们开始之前&#xff0c;我们至少需要有node npm是什么&#xff1f; npm是一个强大的包管理工具&#xff0c;它…

监控神器vnStat初探

文章目录 一、概述二、官方docker部署1. vnStat守护进程和HTTP服务器在同一容器中运行2. 双容器运行&#xff0c;vnstat容器收集数据&#xff0c;vnstati容器提供web服务 三、修改后的编排文件四、运行结果五、停止监控不感兴趣的网卡 一、概述 vnStat是一款网络流量监测工具&…

智慧监狱技术解决方案

1. **建设背景**&#xff1a;介绍了智慧监狱建设的战略部署&#xff0c;包括司法部提出的“数字法治、智慧司法”信息化体系建设&#xff0c;以及智慧监狱建设的总体目标、重点任务和实施步骤。 2. **建设需求**&#xff1a;分析了当前监狱系统存在的问题&#xff0c;如子系统…

Java新特性与性能调优

引言 Java不断演进&#xff0c;每个新版本都引入了新的特性和改进&#xff0c;帮助开发者在提高生产力的同时&#xff0c;也能更好地优化程序性能。本文将详细介绍Java新版本中的重要特性&#xff0c;如从Java 8到Java 17&#xff0c;并探讨性能调优的方法&#xff0c;包括JVM调…

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现&#xff0c;如营销手段单一、难以应对市场竞争等。因此&#xff0c;许多卖家为了提升店铺权重和排名&#xff0c;选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…

C++ 46 之 关系运算符的重载

#include <iostream> #include <string> using namespace std;class Students06{ public:string m_name;int m_age;Students06(string name, int age){this->m_name name;this->m_age age;}// 重载了 bool operator(Students06 &stu){if(this->m_na…

CNN学习(7):用C++实现简单不同参数的卷积模型

目录 一、参数说明和计算公式 1、符号约定 2、输出大小计算公式 二、不同类型的卷积 1、输入3*3*1&#xff0c;卷积核3*3*1&#xff0c;输出1*1*1 &#xff08;1&#xff09;实现代码 &#xff08;2&#xff09;代码说明 2、输入4*4*1&#xff0c;卷积核3*3*1&#xff…

如何避免销售飞单私单!教你如何巧妙避开陷阱,业绩飙升!

明明投入了大量的时间和精力&#xff0c;客户却悄无声息地消失了&#xff1f;或是突然有一天&#xff0c;你发现原本属于你的订单被同事悄悄抢走&#xff1f;这背后&#xff0c;很可能隐藏着销售飞单私单的陷阱。今天&#xff0c;就让我们一起探讨如何巧妙避开这些陷阱&#xf…

MySQL-----InnoDB的自适应哈希索引

InnoDB存储引擎监测到同样的二级索引不断被使用&#xff0c;那么它会根据这个二级索引&#xff0c;在内存上根据二级索引树(B树)上的二级索引值&#xff0c;在内存上构建一个哈希索引&#xff0c;来加速搜索。 查看是否开启自适应哈希索引 show variables like innodb_adapti…

2024年【安全生产监管人员】试题及解析及安全生产监管人员考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产监管人员试题及解析是安全生产模拟考试一点通总题库中生成的一套安全生产监管人员考试试题&#xff0c;安全生产模拟考试一点通上安全生产监管人员作业手机同步练习。2024年【安全生产监管人员】试题及解析及…

LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等

前言 自ChatGPT为代表的大语言模型&#xff08;Large Language Model, LLM&#xff09;出现以后&#xff0c;由于其惊人的类通用人工智能&#xff08;AGI&#xff09;的能力&#xff0c;掀起了新一轮[自然语言处理]领域的研究和应用的浪潮。尤其是以ChatGLM、LLaMA等平民玩家都…

Qwen-Agent:Qwen2加持,强大的多代理框架 - 函数调用、代码解释器以及 RAG!

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; Qwen-Agent&#xff1a;Qwen2加持&#xff0c;强大的多代理框架 - 函数调用、代码解释器以及 RAG&…

全局解决SpringBoot框架中的application.properties/yml注解中文乱码问题(一劳永逸)

问题原因 Spring Boot在加载application.properties/yml配置文件时&#xff0c;默认使用ISO-8859-1编码。这种编码方式并不支持中文字符&#xff0c;因此当配置文件中包含中文字符时&#xff0c;就会出现乱码&#xff0c;现象如下&#xff1a; 问题解决 本解决方法是全局设置…