Spark - [01] 概述
一、Spark是什么
Spark 是一种基于内存的快速、通用、可扩展的大数据分析引擎。
Apache Spark is a unified analytics engine for large-scale data processing.
- 2009年诞生于加州大学伯克利分校AMPLab,项目采用Scala编写。
- 2010年开源
- 2013年6月成为Apache孵化项目
- 2014年2月成为Apache顶级项目
二、Spark 内置模块(Spark生态)
Spark SQL
是Spark用来操作结构化数据的程序包。
通过 Spark SQL,我们可以使用 SQL 或者 Apache Hive 版本的 SQL 方言(HQL)来查询数据。
Spark Streaming:
是Spark用来操作结构化数据的程序包
可以使用SQL或者HQL来对历史数据做交互式查询(即席查询:用户根据自己的需求自定义查询)。
Spark SQL:
支持多种数据源,比如 Hive表,Parquet以及JSON等。
Spark MLlib
构建在Spark之上,提供常见的机器学习(ML)功能的程序库,支持一系列数据挖掘算法。
包括分类、回归、聚类、协同过滤,还提供了模型评估、数据导入等额外的支持功能。
Spark GraghX
图计算(关注事物本身而且关注事物之间的联系)
SparkCore
实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。
Spark Core 中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的 API 定义。
独立调度器/Yarn/Mesos
Spark的资源管理和调度器:
- Standalone:Spark自带的资源调度器,需要在集群中的每台节点上配置Spark,本地测试环境用
- Yarn:国内使用最广泛,推荐生产环境使用(★★★★☆)
- Mesos:国内使用较少,国外使用较多。
三、Spark的特点
1、快
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。
Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。
2、易用
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。
而且Spark支持交互式的Python和Scala的Shell,可以非常方便地在这些Shell中使用Spark集群来验证解决问题的方法。
3、通用
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。减少了开发和维护的人力成本和部署平台的物力成本。
4、兼容性
Spark可以非常方便地与其他的开源产品进行融合。比如,
- Spark可以使用Hadoop的Yarn和Apache Mesos作为它的资源管理和调度器
- 并且可以处理所有Hadoop支持的数据,包括HDFS、Hbase等。
- 这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。
四、Spark VS Flink
相同点:两者都是大数据处理框架,各自在数据处理领域有着广泛的应用。
不同点:
1、基本特性与优势
Spark速度快:基于内存计算,比传统的磁盘计算更快。
Spark可扩展性强:可以在分布式计算环境中,轻松扩展到大规模数据处理。
Spark处理多种数据:能够处理多种数据类型,包括结构化数据、图形数据和流数据等。
Spark易用性:支持多种编程语言(如java、Scala、Python和R),提供了易于使用的交互式Shell和图形化界面。
Spark通用性强:Spark生态圈(BDAS)包含多个组件,如Spark Core、Spark SQL、Spark Streaming等,提供一站式解决平台。
Flink流处理:是一个高吞吐、高性能、低延时的实时流处理引擎,能够提供毫秒级时延处理能力。
Flink丰富的状态管理:流处理应用需要存储事件或中间结果以供后续处理,Flink具有丰富的状态管理能力。
Flink任务调度与时间机制:根据用户提交的代码StreamGraph,并优化为JobGraph,由JobManager根据ExecutionGraph进行调度。支持三种时间机制(事件时间、注入时间、处理时间)以及watermark机制处理乱序数据。
2、架构与任务调度
Flink在运行时主要包含JobManager、TaskManager和Slot等组件,并根据用户提价的代码进行任务调度和优化。
Spark的架构和任务调度机制和Flink有所不同,但其核心也是基于分布式计算环境进行任务分配和执行。
3、容错机制
Flink使用两阶段提交协议来确保数据处理的“exactly-once”语义,即确保每个事件只被处理一次。
Spark也具有较高的容错性,但其具体实现方式与Flink可能有所不同。
综上所述,Spark和Flink在数据处理领域各有优势。
Spark以其强大的生态系统、易用性和多语言支持等特点受到广泛欢迎。
而Flink则以其卓越的流式处理能力、低时延和状态管理功能在实时数据处理领域表现出色。
Spark 的角色
driver
介绍
Spark 的驱动器是执行开发程序中的 main 方法的进程。负责开发人员编写的用来创建 SparkContext、创建 RDD,以及进行RDD的转化操作和行动操作代码的执行。启动 Spark shell 的时候,系统后台自启了一个 Spark 驱动器程序,就是在 Spark shell 中预加载的一个叫做 sc 的 SparkContext 对象。如果驱动器程序终止,那么 Spark 应用也就结束了。
作用
- 把用户程序转为作业(Job)
- 跟踪 Executor 的运行状况
- 为执行器节点调度任务
- UI 展示应用运行状况
executor
介绍
Spark Executor 是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的声明周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。
作用
- 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程。
- 通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存方式存储。
- RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
Spark 作业提交流程
YarnClient运行模式
YarnCluster模式
Spark 安装部署
# 将 spark的tar包上传到任意节点(node7-1)上的合适的目录
# 解压tar包 => 删除tar包 => 修改解压后的目录名
tar -zxvf spark-2.2.1-bin-hadoop2.7.tgz
mv spark-2.2.1-bin-hadoop2.7/ spark-hadoop/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!