Spark框架概述

本文概述了Apache Spark,一款强大的分布式内存计算框架,介绍了其起源、与Hadoop的区别、核心特点如速度快、易用性和通用性,以及其模块结构、运行模式和在资源管理中的角色。重点讨论了Spark在大数据计算中的优势和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark 框架概述

1.1. Spark是什么

定义:Apache Spark是用于大规模数据处理的统一分析引擎

弹性分布式数据集RDD是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个Spark的核心数据结构,Spark整个平台都围绕着RDD进行。

在这里插入图片描述

简而言之,Spark借鉴了MapReduce 思想发展而来,保留了其分布式并行计算的优点并改进了其明显的缺陷。让中间数据存储在内存中提高了运行速度、并提供丰富的操作数据的API提高了开发速度。

统一分析引擎?

Spark是一款分布式内存计算的统一分析引擎。

其特点就是对任意类型的数据进行自定义计算。

Spark可以计算:结构化、半结构化等各种类型的数据结构,同时也支持使用Python、Java、Scala、R以及SQL语言区开发应用程序计算数据。

Spark的适用面非常广泛,所以,被称之为统一的(适用面广)的分析引擎(数据处理)

1.2. Spark风雨十年

Spark是加州大学伯克利分校AMP实验室开发的通用大数据处理框架。Spark的发展历史,经历过几大重要阶段,如下图所示:

在这里插入图片描述
Stack Overflow的数据可以看出,2015年开始Spark每月的问题提交数量也已经超过Hadoop。2019年排名Spark第一,PySpark第二;而十年的累计排名是Spark第一,PySpark第三。按照这个趋势发展下去,Spark和PySpark在未来很长一段时间内应该还会处于垄断地位。

在这里插入图片描述

1.3. Spark VS Hadoop(MapReduce)

Spark和Hadoop技术栈有何区别呢?

HadoopSpark
类型基础平台,包含计算、存储、调度纯计算工具(分布式)
场景海量数据处理(硬盘迭代计算)海量数据的批处理(内存迭代计算、交互式计算)、海量数据流计算
价格对机器需求低、便宜对内存有要求,相对较贵
编程范式Map + Value,API较为底层,算法适应性差RDD中间运算结果在内存中,延迟小
数据存储结构MapReduce中间计算计算结果在HDFS磁盘上,延迟大RDD中间运算结果在内存中,延迟小
运行方式Task以进程方式维护,任务启动慢Task以线程方式维护,任务启动快,可批量传教提高并行能力

尽管Spark相对于Hadoop而言具有较大优势,但Spark并不能完全替代Hadoop

  • 在计算层面,Spark相比较MR(MapReduce)有巨大的性能优势,但至今任有许多计算工具基于MR架构,比如非常熟悉的Hive
  • Spark仅做计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN),HDFS和YARN仍是许多大数据体系的核心架构。

1.4. Spark四大特点

  • 运行速度快
  • 易于使用
  • 通用性强
  • 适用环境广

速度快

由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。

在这里插入图片描述

Spark处理数据与MapReduce处理的数据相比,有如下两个不同点:

  • 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中;
  • 其二、Spark提供了非常丰富的算子(API),可以做到复杂任务在一个Spark程序中完成。

易于使用

Spark的版本已经更新到Spark 3.3.1 (截至日期2022.11.15),支持了包括Java、Scala、Python、R和SQK语言在内的多种语言,为了兼容Spark2.x企业应用场景,Spark仍然持续更新Spark2版本。

df = spark.read.json("logs.json")
df.where("age > 21").select("name.firest").show()

通用性强

在Spark的基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLlib及GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。

在这里插入图片描述

运行方式

Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云Kuberbetes上。

对于数据源而言,Spark支持从HDFS、HBase、Cassandra及Kafka等多种途径获取数据。

1.5. Spark框架模块简述

整个Spark框架模块包含:Spark Core、Spark SQL、 Spark Streaming、Spark GraphX、Spark MLlib,而后四项的能力都是建立在核心引擎之上。

在这里插入图片描述

Spark Core: Spark的核心,Spark核心功能均由Spark Core模块提供,是Spark运行的基础。SparkCore以RDD为数据抽象,提供Python、Java、Scala、R语言的API,可以编程进行海量离线数据批处理计算。

SparkSQL: 基于SparkCore之上,提供结构化数据的处理模块。可以以SparkSQL为基础,进行数据的流式计算。

SparkStreaming:以SparkCore为基础,提供数据的流式计算功能。

MLlib:以SparkCore为基础,进行机器学习计算,内置了大量的机器学习库和API算法等。方便用户以分布式计算的模式进行机器学习计算。

GraphX: 以SparkCore为基础,进行图计算,提供了大量的图计算API,方便用于以分布式计算模式进行图计算。

1.6. Spark的运行模式

Spark提供多种运行模式,包括:

  • 本地模式(单机)
  • Standalone模式(集群)
  • Hadoop YARN模式(集群)
  • Kubernetes模式(容器集群)
  • 云服务模式(运行在云平台)

1.7. Spark的架构角色

Spark运行角色

Spark中由4类角色组成整个Spark的运行时环境:

  • Master角色,管理整个集群的资源
  • Worker角色,管理单个服务器的资源
  • Driver角色,管理单个Spark任务在运行的时候的工作
  • Executor角色,单个任务运行的的时候的一堆工作者,干活的。

从两个层面划分:
资源管理层面:

  • 管理者: Spark是Master角色,YARN是ResourceManger
  • 工作中:Spark是Work角色,YARM是NodeManger

从任务执行层面:

  • 某任务管理者:Spark是Driver角色,YARN是ApplicationMaster
  • 某任务执行者:Spark是Executor角色,YARN是容器中运行的具体工作进程

注:正常情况下Executor是干活的角色,不过在特殊场景下(Local模式)Driver可以即管理又干活。

Spark解决了什么问题?

海量数据的计算,可以进行离线批处理以及实时流计算

Spark有哪些模块?

核心SparkCore、SQL计算(SparkSQL)、流计算(SparkStreaming)、图计算(GraphX)、机器学习(MLlib)

Spark特点有哪些?

速度快、使用简单、通用性强、多种模式运行

Spark的运行模式?

  • 本地模式
  • 集群模式(StandAlone、YARN、K8S)
  • 云模式

Spark的运行角色(对比YARN)?

  • Master:集群资源管理 (类同ResourceManager)

  • Worker: 单机资源管理 (类同NodeManager)

  • Driver:单任务管理者 (类同ApplicationMaster)

  • Executor:但认为执行者 (类同YARN容器内的Task)
    k的运行角色(对比YARN)?

  • Master:集群资源管理 (类同ResourceManager)

  • Worker: 单机资源管理 (类同NodeManager)

  • Driver:单任务管理者 (类同ApplicationMaster)

  • Executor:但认为执行者 (类同YARN容器内的Task)

### Apache Spark 概述 Apache Spark 是一种快速且通用的分布式计算框架,专为大规模数据处理而设计。它提供了多种编程语言的支持,包括 Java、Scala、Python 和 R,并通过其优化引擎实现了高效的并行操作[^3]。 Spark 不仅能够运行在 Hadoop YARN 上,还可以独立部署或者与其他资源管理器集成。它的核心优势在于内存计算能力,这使得它可以显著提高迭代算法和交互查询的速度。此外,Spark 还支持批处理、实时流处理以及复杂的分析任务。 --- ### 主要功能 #### 1. **统一的数据处理接口** - Spark 提供了一个名为 `SparkSession` 的统一入口点,在版本 2.0 中引入,简化了开发者的工作流程。这个单一的 API 集成了之前多个上下文的功能(如 `SparkContext`, `SQLContext`, `HiveContext`),从而减少了复杂性和冗余代码[^1]。 #### 2. **强大的生态系统** - Spark 生态系统由多个模块组成,涵盖了各种数据分析需求: - **Spark Core**: 基础部分,负责调度、任务分发和基本 I/O 功能。 - **Spark SQL**: 支持结构化数据处理和标准 SQL 查询。 - **DataFrame/Dataset**: 类似于关系型数据库表的对象模型,便于高效的操作。 - **Spark Streaming**: 实现低延迟的流式数据处理。 - **Structured Streaming**: 构建可扩展且容错的流应用。 - **MLlib**: 提供机器学习库,包含常用算法实现。 - **GraphX**: 图形处理工具包,适用于社交网络分析等领域。 - **SparkR**: 将 Spark 的强大性能带入 R 社区[^2]。 #### 3. **高性能** - 利用基于内存的计算方式,Spark 能够比传统的磁盘读写方法更快完成大量重复访问的任务。这种特性对于需要多次扫描相同数据集的应用程序尤为重要。 #### 4. **易用性与灵活性** - 开发者可以通过简单的 API 编写复杂的逻辑;同时由于兼容 Hadoop 数据源,迁移成本较低。另外,借助 Maven 或 SBT 添加必要的依赖项即可轻松构建项目环境[^4]。 ```scala // 示例:向 build.sbt 文件添加 Spark 依赖 libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0" libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.0" ``` --- ### 总结 综上所述,Apache Spark 凭借其灵活的设计理念、广泛的适用范围以及不断完善的社区支持,已经成为现代大数据领域不可或缺的技术之一。无论是批量作业还是在线服务场景下,都能看到它的身影。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值