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

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

下载

从项目网站的 下载页面 获取 Spark。本文档适用于 Spark 版本 3.5.1。Spark 使用 Hadoop 的客户端库来访问 HDFS 和 YARN。下载包预先打包了几个流行的 Hadoop 版本。用户也可以下载“Hadoop 免费”二进制文件,并通过 扩展 Spark 的类路径 来使用任何版本的 Hadoop 运行 Spark。Scala 和 Java 用户可以使用 Maven 坐标将 Spark 包含在他们的项目中,而 Python 用户可以从 PyPI 安装 Spark。

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

Spark 可以在 Windows 和类 Unix 系统(例如 Linux、Mac OS)上运行,它应该可以在运行支持的 Java 版本的任何平台上运行。这应该包括 x86_64 和 ARM64 上的 JVM。在单台机器上本地运行非常容易 - 您只需要在系统 PATH 中安装 java,或者将 JAVA_HOME 环境变量指向 Java 安装目录。

Spark 运行在 Java 8/11/17、Scala 2.12/2.13、Python 3.8+ 和 R 3.5+ 上。从 Spark 3.5.0 开始,版本 8u371 之前的 Java 8 支持已弃用。使用 Scala API 时,应用程序必须使用与编译 Spark 所用的 Scala 版本相同的版本。例如,使用 Scala 2.13 时,请使用为 2.13 编译的 Spark,并将代码/应用程序也编译为 Scala 2.13。

对于 Java 11,需要设置 -Dio.netty.tryReflectionSetAccessible=true 才能使用 Apache Arrow 库。这可以防止在 Apache Arrow 在内部使用 Netty 时出现 java.lang.UnsupportedOperationException: sun.misc.Unsafe or java.nio.DirectByteBuffer.(long, int) not available 错误。

运行示例和 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 文档

部署指南

其他文档

外部资源