Apache Spark - 大规模数据分析的统一引擎

Apache Spark 是一个用于大规模数据处理的统一分析引擎。它提供了 Java、Scala、Python 和 R 语言的高级 API,以及支持通用执行图的优化引擎。它还支持一套丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL、用于 pandas 工作负载的 pandas API on Spark、用于机器学习的 MLlib、用于图处理的 GraphX,以及用于增量计算和流处理的 结构化流 (Structured Streaming)

下载

请从项目官网的 下载页面 获取 Spark。本文档适用于 Spark 4.1.1 版本。Spark 使用 Hadoop 的客户端库来支持 HDFS 和 YARN。下载包已预先针对一些主流的 Hadoop 版本进行了打包。用户也可以下载“无 Hadoop”版本的二进制包,并通过 扩充 Spark 的类路径 (classpath) 来配合任意版本的 Hadoop 运行 Spark。Scala 和 Java 用户可以使用 Maven 坐标将 Spark 引入其项目中,Python 用户则可以通过 PyPI 安装 Spark。

如果您想从源码构建 Spark,请访问 构建 Spark

Spark 可在 Windows 和类 UNIX 系统(如 Linux、Mac OS)上运行,且应能在任何运行受支持 Java 版本的平台上运行。这包括 x86_64 和 ARM64 架构上的 JVM。在单机上本地运行非常简单——您只需要在系统中安装了 java 并将其添加到 PATH 中,或者设置 JAVA_HOME 环境变量指向 Java 安装目录即可。

Spark 运行于 Java 17/21、Scala 2.13、Python 3.10+ 和 R 3.5+(已弃用)之上。使用 Scala API 时,应用程序必须使用与 Spark 编译版本相同的 Scala 版本。自 Spark 4.0.0 起,该版本为 Scala 2.13。

运行示例与 Shell

Spark 附带了多个示例程序。Python、Scala、Java 和 R 的示例位于 examples/src/main 目录下。

要在 Python 解释器中交互式运行 Spark,请使用 bin/pyspark

./bin/pyspark --master "local[2]"

提供了 Python 编写的示例应用程序。例如:

./bin/spark-submit examples/src/main/python/pi.py 10

要运行其中一个 Scala 或 Java 示例程序,请在 Spark 顶层目录中使用 bin/run-example <class> [params]。(实际上,这会调用更通用的 spark-submit 脚本 来启动应用程序)。例如:

./bin/run-example SparkPi 10

您还可以通过修改版的 Scala shell 交互式运行 Spark。这是学习该框架的绝佳方式。

./bin/spark-shell --master "local[2]"

--master 选项用于指定 分布式集群的主节点 URL,或者使用 local 在本地以单线程运行,或使用 local[N] 在本地以 N 个线程运行。建议先从 local 开始进行测试。如需完整的选项列表,请使用 --help 选项运行 Spark shell。

自 1.4 版本起,Spark 提供了 R API(仅包含 DataFrame API)。要在 R 解释器中交互式运行 Spark,请使用 bin/sparkR

./bin/sparkR --master "local[2]"

同时也提供了 R 语言的示例应用程序。例如:

./bin/spark-submit examples/src/main/r/dataframe.R

使用 Spark Connect 在任意位置运行 Spark 客户端应用程序

Spark Connect 是 Spark 3.4 引入的一种全新的客户端-服务器架构,它将 Spark 客户端应用程序与服务端解耦,并允许远程连接到 Spark 集群。客户端与服务器的分离使得 Spark 及其开放生态系统可以被任何地方、任何应用程序所利用。在 Spark 3.4 中,Spark Connect 为 PySpark 提供了 DataFrame API 覆盖,并支持 Scala 中的 DataFrame/Dataset API。

要了解有关 Spark Connect 及其使用方法的更多信息,请参阅 Spark Connect 概述

在集群上启动

Spark 集群模式概述 解释了在集群上运行时的关键概念。Spark 既可以独立运行,也可以在多个现有的集群管理器之上运行。目前它提供了几种部署选项:

后续步骤

编程指南

API 文档

部署指南

其他文档

外部资源