本节介绍如何下载并安装Spark。
普通安装是最常见的安装方式,在官方下载安装包,进行配置即可。以下为普通安装的步骤。
访问Spark的官方网站:https://spark.apache.org/downloads.html,如图2-1所示,找到需要的版本(在这个例子中是3.5.1版本)并下载预构建的二进制包(通常是.tgz或.zip文件,取决于你的操作系统)。如果使用的是Linux或macOS系统,可以下载.tgz文件;如果使用的是Windows系统,可以下载.zip文件。
图2-1 下载页面
在图2-1的下载页面中,Choose a package type指的是选择适合你的安装环境和需求的Spark软件包类型。Spark提供了多种预构建和源码类型的软件包,以满足不同用户的需求。
具体来说,可以选择的包类型说明如下。
· Pre-built for Apache Hadoop x.y and later:这是基于特定Hadoop版本的预先编译版。例如,Pre-built for Apache Hadoop 3.3 and later就是基于Hadoop 3.3或更高版本的预先编译版。需要确保你的环境中已经安装了Hadoop 3.3或更高版本,以便能够正确运行该安装包。
· Pre-built for Apache Hadoop x.y and later (Scala x.y):这个描述在前者的基础上,进一步指定了Scala的版本需求。例如,Pre-built for Apache Hadoop 3.3 and later (Scala 2.13)说明该安装包不仅为Hadoop 3.3及以后版本预编译好,而且是用Scala 2.13版本预编译的。因此,需要确保你的环境中同时安装了Hadoop 3.3或更高版本和Scala 2.13版本,以便能够正常运行该安装包。Spark 3通常是使用Scala 2.12预构建的,Spark 3.2+使用Scala 2.13提供了额外的预构建发行版。
· Pre-built with user-provided Apache Hadoop:这是一个Hadoop free版,它可以与任意Hadoop版本一起使用。这种类型的包提供了与Hadoop的兼容性,但需要自己提供Hadoop库。
· Source code:这是Spark的源代码,需要自行编译才能使用。这通常适用于那些需要定制Spark或对其内部机制有深入了解的用户。
根据你的具体情况和需求,选择合适的包类型。如果只是想在本地环境中快速体验Spark,并且已经安装了与预构建包相匹配的Hadoop版本,那么Pre-built for Hadoop x.x and later可能是最简单的选择。如果需要定制Spark或对其内部机制有深入了解,那么源代码包可能更适合你。
下载Spark之后,解压下载的文件到指定的目录。
将Spark的bin目录添加到你的PATH环境变量中。如果是Linux或macOS操作系统,则可以通过编辑Shell配置文件(如.bashrc或.zshrc)来实现这一点。
例如,在.bashrc中添加以下行:
export SPARK_HOME=/path/to/spark-3.5.1-bin-hadoop3.2 export PATH=$PATH:$SPARK_HOME/bin
然后,运行source ~/.bashrc来使更改生效。
如果是Windows操作系统,则在“系统属性”的“环境变量”部分添加一个新的系统变量SPARK_HOME,其值为Spark安装目录的路径。然后,编辑Path变量并添加%SPARK_HOME%。
通过以下命令来启动Standalone集群的主节点服务器:
start-master.sh
正常启动后,主节点服务器将会打印出<spark://HOST:PORT>这样的URL,以便工作节点来连接。也可以在主节点服务器的Web界面看到这个URL,Web界面默认网址是http://localhost:8080。
通过Docker镜像安装Spark是一个相对简单且高效的方法,它允许开发者在隔离的环境中快速部署和测试Spark。下面将详细描述使用Docker镜像安装Spark的步骤,并解释其中的关键概念和注意事项。
Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,并在任何Docker环境中运行。Docker镜像是一个轻量级的、可执行的独立软件包,它包含运行应用程序所需的一切:代码、运行时、系统工具、库和配置。
首先,在Docker Hub或其他Docker镜像仓库中查找Spark的官方或社区维护的Docker镜像。这些镜像可能已经预先配置了与Hadoop、Scala等组件的兼容性,因此可以直接使用它们来部署Spark集群。
如果还没有安装Docker,需要先在你的机器上安装Docker。安装过程因操作系统而异,但通常包括下载Docker安装包、运行安装程序并按照提示进行操作。安装完成后,需要确保Docker服务正常运行。
一旦找到了合适的Spark Docker镜像,便可以使用Docker命令行工具来拉取它。例如,如果找到了一个名为apache/spark:3.5.1的镜像,可以使用以下命令来拉取它:
docker pull apache/spark:3.5.1
这个命令会从Docker Hub下载并安装指定的Spark Docker镜像。
拉取镜像后,可以使用Docker命令行工具来运行Spark容器。但是,由于Spark是一个分布式计算框架,通常需要多个容器来组成一个集群。因此,可能需要使用Docker Compose或其他容器编排工具来管理多个容器。
以下是一个简单的示例,展示如何使用Docker命令行工具运行一个单独的Spark主节点容器:
docker run -it --name spark-master \ -p 7077:7077 -p 8080:8080 \ -e "SPARK_CONF_DIR=/conf" \ -e "SPARK_LOCAL_IP=127.0.0.1" \ -v /path/to/your/spark-conf:/conf \ apache/spark:3.5.1 spark-class org.apache.spark.deploy.master.Master
以上命令会启动一个名为spark-master的容器,并将容器的7077和8080端口映射到宿主机的相应端口。它还设置了一些环境变量,并将宿主机的/path/to/your/spark-conf自定义目录挂载到容器的/conf目录,以便可以自定义Spark的配置文件。
如果需要部署一个完整的Spark集群,包括多个工作节点和从节点,则需要使用Docker Compose或其他容器编排工具来定义和管理这些容器。可以编写一个Docker Compose文件来描述集群架构和配置,然后使用Docker Compose命令行工具来启动和停止集群。
以下是一个简单的Docker Compose文件示例,用于设置包含一个Spark Master节点和两个Spark Worker节点的集群:
services: spark-master-1: image: bitnami/spark:3.5.1 # 可替换为适合自己环境的Spark镜像 environment: - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) - SPARK_MODE=master # Spark集群模式为master ports: - '8080:8080' # Spark Web UI - '7077:7077' # Spark Master端口 volumes: - /data/spark/share/app:/opt/bitnami/spark/app # 存放应用的目录,所有节点都能共 享访问 spark-worker-1: image: bitnami/spark:3.5.1 environment: - TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间) - SPARK_MODE=worker # Spark集群模式为worker - SPARK_MASTER_URL=spark://spark-master-1:7077 # master的URL - SPARK_WORKER_MEMORY=1G # 分配给Worker的内存大小 - SPARK_WORKER_CORES=1 # 分配给Worker的CPU核心数 volumes: - /data/spark/share/app:/opt/bitnami/spark/app spark-worker-2: image: bitnami/spark:3.5.1 environment: - TZ=Asia/Shanghai - SPARK_MODE=worker - SPARK_MASTER_URL=spark://spark-master-1:7077 - SPARK_WORKER_MEMORY=1G - SPARK_WORKER_CORES=1 volumes: - /data/spark/share/app:/opt/bitnami/spark/app
在上述配置中:
请将bitnami/spark:3.5.1替换为实际的Spark Master和Worker镜像名称和标签。
根据项目实际的环境和需求,可以调整CPU核心数(SPARK_WORKER_CORES)和内存大小(SPARK_WORKER_MEMORY)等配置。
volumes用于配置多个节点共享同一个目录。这个目录一般用于放置自己开发的Spark应用程序或数据文件。如果希望应用输出文件,则需要对该目录进行授权,例如sudo chmod -R 777/data/spark/share。
注意,上面只是一个基本的示例,用于演示如何使用Docker Compose来描述Spark集群。在实际应用中,可以根据具体的需求和环境进行更多的配置和定制。
一旦Spark容器或集群已经运行起来,可以使用Spark的命令行工具(如spark-shell)或编写Spark应用程序来测试和验证安装是否成功。
例如,打开一个新的命令行窗口,并运行以下命令来验证Spark是否已正确安装:
spark-shell
如果一切正常,可以看到控制台会输出Spark的欢迎信息和一些版本信息,代码如下:
$ spark-shell Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 24/05/08 07:53:26 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Spark context Web UI available at http://313c7a702976:4040 Spark context available as 'sc' (master = local[*], app id = local- 1715154806551). Spark session available as 'spark'. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 3.5.1 /_/ Using Scala version 2.12.18 (OpenJDK 64-Bit Server VM, Java 17.0.11) Type in expressions to have them evaluated. Type :help for more information. scala>
然后开始使用Spark的交互式Shell。
也可以通过连接到Spark主节点的Web UI界面(http://主节点IP:8080/)来查看集群的状态和详细信息,如图2-2所示。
图2-2 通过Web界面查看集群