在你的 3 台服务器(16 核、128GB 内存,1TB SSD 和 4TB SATA)上部署 Spark 集群是一个非常合适的选择。以下是如何安装和配置 Spark 集群的步骤,使用 Standalone 模式Spark on YARN 模式运行。


1. Spark 集群规划

在 Spark 集群中,通常包含以下组件:

  1. Spark Master:负责调度任务、管理 Worker 节点。
  2. Spark Worker:负责运行实际的任务(Executor)并与 Master 通信。
  3. Client:提交 Spark 作业的客户端。

规划角色

在你的 3 台服务器上,可以按照以下规划:

你也可以将 Spark Master 配置为高可用(HA),但这里以标准的单 Master 模式为例。


2. 安装 Spark

以下是 Spark 集群安装和配置的详细步骤。

2.1 准备工作

安装 Java

Spark 需要 Java 环境(建议使用 OpenJDK 11):

sudo apt update
sudo apt install openjdk-11-jdk -y

验证 Java 安装:

java -version

安装 Scala

Spark 依赖 Scala 运行时库:

sudo apt install scala -y

验证 Scala 安装:

scala -version

安装 Python(可选)

如果你需要运行 PySpark 作业:

sudo apt install python3 python3-pip -y


2.2 下载 Spark

下载 Spark 二进制文件

从 Apache 官方网站下载 Spark:

wget https://downloads.apache.org/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz

解压并移动到 /opt

tar -xvzf spark-3.4.1-bin-hadoop3.tgz
sudo mv spark-3.4.1-bin-hadoop3 /opt/spark

设置环境变量

编辑 ~/.bashrc 文件:

nano ~/.bashrc

添加以下内容:

export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

使环境变量生效:

source ~/.bashrc

注意:以上步骤需要在所有 3 台服务器上执行。


2.3 配置 Spark

Spark 的配置文件位于 /opt/spark/conf 目录下。

配置 spark-env.sh

复制模板文件:

cp /opt/spark/conf/spark-env.sh.template /opt/spark/conf/spark-env.sh

编辑 spark-env.sh

nano /opt/spark/conf/spark-env.sh

添加以下内容:

export SPARK_MASTER_HOST=server1_ip   # 替换为 Spark Master 的 IP
export SPARK_WORKER_CORES=8          # 每个 Worker 使用 8 核心
export SPARK_WORKER_MEMORY=64g       # 每个 Worker 使用 64GB 内存
export SPARK_WORKER_DIR=/opt/spark/work

注意SPARK_MASTER_HOST 只需要在 Master 节点(Server 1)上设置,其他配置需在所有节点上设置。

配置 slaves 文件

复制模板文件:

cp /opt/spark/conf/slaves.template /opt/spark/conf/slaves

编辑 slaves 文件:

nano /opt/spark/conf/slaves

添加 Worker 节点的 IP 地址(每行一个):

server1_ip
server2_ip
server3_ip


2.4 启动 Spark 集群

启动 Spark Master

在 Server 1 上启动 Spark Master:

start-master.sh

启动 Spark Workers

在所有 3 台服务器上启动 Spark Worker:

start-worker.sh spark://server1_ip:7077

说明spark://server1_ip:7077 是 Spark Master 的地址。


3. 验证 Spark 集群

3.1 检查 Web UI

Spark 提供了 Web 界面来监控集群状态:


3.2 提交 Spark 作业

提交示例作业

Spark 自带的示例程序可以用于测试集群:

/opt/spark/bin/spark-submit --master spark://server1_ip:7077 \
    --class org.apache.spark.examples.SparkPi \
    /opt/spark/examples/jars/spark-examples_2.13-3.4.1.jar 100

运行 PySpark

如果你需要运行 Python 作业,可以使用 PySpark:

pyspark --master spark://server1_ip:7077

在 PySpark shell 中测试:

sc.parallelize(range(1, 101)).sum()


4. 高可用配置(可选)

为了提高集群的容错能力,可以配置 Spark Master 的高可用(HA)。需要使用 Zookeeper 来管理 Master 的选举。以下是简单的步骤:

  1. 安装 Zookeeper 集群(参考 Kafka 部署中的 Zookeeper 部分)。

  2. 修改 spark-env.sh 文件:

    export SPARK_MASTER_HOST=server1_ip,server2_ip,server3_ip
    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER \
        -Dspark.deploy.zookeeper.url=server1_ip:2181,server2_ip:2181,server3_ip:2181 \
        -Dspark.deploy.zookeeper.dir=/spark"
    
    
  3. 启动多个 Spark Master。


5. 磁盘存储规划

在你的服务器中有两块硬盘(1TB SSD 和 4TB SATA),你可以规划如下:

  1. 1TB SSD:用于存储 Spark 的临时工作目录(/opt/spark/work),提高任务执行 I/O 性能。
  2. 4TB SATA:用于存储持久化数据(如 HDFS 或其他分布式存储系统)。

spark-env.sh 中指定工作目录:

export SPARK_WORKER_DIR=/mnt/ssd/spark/work


6. 总结

通过上述步骤,你可以成功在 3 台服务器上部署一个高性能的 Spark 集群:

  1. Spark Master:运行在 Server 1。
  2. Spark Workers:运行在所有节点上。
  3. 验证集群:通过 Web UI 或提交示例作业测试集群是否正常工作。

如果你需要更高的容错能力,可以通过配置 Zookeeper 实现 Spark Master 的高可用。此部署适用于开发、测试和生产环境,具有良好的扩展性和性能。