Apache Spark 3.2.0 开发测试环境部署指南

发布于:2025-08-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

对于开发测试环境,我推荐使用 Standalone 集群模式 Local 模式 ,这两种部署方式最适合开发测试场景:

🚀 推荐部署模式:Standalone 集群模式

✅ 优势

  • 独立部署,不依赖其他系统
  • 配置简单,启动快速
  • 完全模拟分布式环境
  • 便于调试和监控
  • 资源占用可控

📋 详细部署步骤(基于 CentOS 7.5)

1. 环境准备(所有节点)

# 安装 JDK 11
sudo yum install -y java-11-openjdk-devel

# 设置 JAVA_HOME
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk' | sudo tee /etc/profile.d/java.sh
source /etc/profile.d/java.sh

2. 下载和解压 Spark

wget https://archive.apache.org/dist/spark/spark-3.2.0/spark-3.2.0-bin-hadoop3.2.tgz
tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /opt/
sudo ln -s /opt/spark-3.2.0-bin-hadoop3.2 /opt/spark

3. 配置环境变量

sudo tee /etc/profile.d/spark.sh << 'EOF'
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYSPARK_PYTHON=python3
EOF
source /etc/profile

4. 配置 Spark(在 Master 节点操作)

spark-env.sh
sudo cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
sudo tee -a $SPARK_HOME/conf/spark-env.sh << 'EOF'

# 基础配置
SPARK_MASTER_HOST=hadoop1
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=4
SPARK_WORKER_MEMORY=4g
SPARK_WORKER_PORT=8888

# 开发优化
SPARK_LOCAL_DIRS=/data/spark/tmp
SPARK_WORKER_DIR=/data/spark/work
SPARK_LOG_DIR=/data/spark/logs
SPARK_PID_DIR=/data/spark/pids

# 历史服务器
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop1:9000/spark-logs"
EOF
workers
sudo cp $SPARK_HOME/conf/workers.template $SPARK_HOME/conf/workers
sudo tee $SPARK_HOME/conf/workers << 'EOF'
hadoop2
hadoop3
EOF
spark-defaults.conf
sudo cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
sudo tee -a $SPARK_HOME/conf/spark-defaults.conf << 'EOF'

# 基础配置
spark.master                     spark://hadoop1:7077
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://hadoop1:9000/spark-logs
spark.history.fs.logDirectory    hdfs://hadoop1:9000/spark-logs

# 开发优化
spark.driver.memory              2g
spark.executor.memory            2g
spark.executor.cores             2
spark.default.parallelism        8
spark.sql.shuffle.partitions     8
spark.serializer                 org.apache.spark.serializer.KryoSerializer
spark.sql.catalogImplementation  hive
EOF

5. 创建数据目录(所有节点)

sudo mkdir -p /data/spark/{tmp,work,logs,pids}
sudo chown -R $(whoami):$(whoami) /data/spark

6. 配置 Hadoop 集成(可选)

# 设置 Hadoop 配置文件路径
echo 'export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop' | sudo tee -a $SPARK_HOME/conf/spark-env.sh

# 复制 Hadoop 配置文件
sudo cp /usr/local/hadoop/etc/hadoop/core-site.xml $SPARK_HOME/conf/
sudo cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml $SPARK_HOME/conf/

7. 分发 Spark 到所有节点

scp -r /opt/spark-3.2.0-bin-hadoop3.2 hadoop2:/opt/
scp -r /opt/spark-3.2.0-bin-hadoop3.2 hadoop3:/opt/

# 创建符号链接
ssh hadoop2 "ln -s /opt/spark-3.2.0-bin-hadoop3.2 /opt/spark"
ssh hadoop3 "ln -s /opt/spark-3.2.0-bin-hadoop3.2 /opt/spark"

# 分发环境变量
scp /etc/profile.d/spark.sh hadoop2:/etc/profile.d/
scp /etc/profile.d/spark.sh hadoop3:/etc/profile.d/

# 应用环境变量
ssh hadoop2 "source /etc/profile"
ssh hadoop3 "source /etc/profile"

8. 创建 HDFS 日志目录

hdfs dfs -mkdir -p /spark-logs
hdfs dfs -chmod 777 /spark-logs

🚦 启动 Spark 集群

1. 启动 Master

$SPARK_HOME/sbin/start-master.sh

2. 启动 Workers

$SPARK_HOME/sbin/start-workers.sh

3. 启动历史服务器

$SPARK_HOME/sbin/start-history-server.sh

🔍 验证集群状态

1. 检查进程

# Master 节点
jps | grep -E 'Master|HistoryServer'

# Worker 节点
jps | grep Worker

2. Web UI 访问

Master Web UI: http://192.168.16.219:8080
History Server: http://192.168.16.219:18080

3. 命令行验证

# 运行 Spark Shell
spark-shell --master spark://hadoop1:7077

# 在 Spark Shell 中运行
val data = 1 to 100
val rdd = sc.parallelize(data)
rdd.sum()

🔧 备选方案:Local 模式(快速开发测试)

✅ 适用场景

  • 单机快速验证
  • IDE 集成开发
  • 单元测试/调试

📋 使用方式

1. 命令行启动
spark-shell --master local[4]
2. IDE 集成(推荐)

在 IntelliJ/Eclipse 中添加依赖:

<!-- Maven 依赖 -->
<dependency>
    <groupid>org.apache.spark</groupid>
    <artifactid>spark-core_2.12</artifactid>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupid>org.apache.spark</groupid>
    <artifactid>spark-sql_2.12</artifactid>
    <version>3.2.0</version>
</dependency>

示例代码:

import org.apache.spark.sql.SparkSession

object LocalSparkApp {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("LocalSpark")
      .master("local[4]")
      .getOrCreate()
    
    import spark.implicits._
    val data = Seq(("Java", 20000), ("Python", 100000), ("Scala", 3000))
    val df = data.toDF("Language", "Users")
    
    df.show()
    spark.stop()
  }
}
3. PySpark 开发
# 启动 PySpark shell
pyspark --master local[4]

# 或直接运行 Python 脚本
spark-submit --master local[4] your_script.py

⚙️ 部署模式对比

模式 复杂度 资源需求 适用场景 生产可用
Standalone ★★☆☆☆ 中等 开发测试、小规模生产
Local ★☆☆☆☆ 本地开发调试
YARN ★★★★☆ 大规模生产
Kubernetes ★★★★☆ 云原生环境
Mesos ★★★★☆ 混合集群

🛠️ 开发测试环境优化配置

spark-defaults.conf 优化

# 内存优化
spark.driver.memory=2g
spark.executor.memory=2g
spark.memory.fraction=0.6

# 序列化优化
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.kryoserializer.buffer.max=256m

# 动态分配
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=1
spark.dynamicAllocation.maxExecutors=4

# SQL 优化
spark.sql.adaptive.enabled=true
spark.sql.shuffle.partitions=8

日志配置优化

# 修改 log4j.properties
sudo cp $SPARK_HOME/conf/log4j.properties.template $SPARK_HOME/conf/log4j.properties
sudo sed -i 's/INFO/WARN/g' $SPARK_HOME/conf/log4j.properties

💡 开发技巧

1. 使用 Spark Shell 交互开发

spark-shell --master spark://hadoop1:7077 --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.2.0

2. 使用 Spark SQL

val df = spark.read.json("hdfs://hadoop1:9000/data/sample.json")
df.createOrReplaceTempView("people")
val results = spark.sql("SELECT name, age FROM people WHERE age &gt; 20")
results.show()

3. 调试技巧

// 查看执行计划
df.explain(true)

// 检查分区
df.rdd.partitions.size

// 使用本地检查点
df.localCheckpoint()

🚨 注意事项

  1. 版本兼容性

    • Scala 版本需匹配(Spark 3.2.0 使用 Scala 2.12)
    • Hadoop 版本兼容(Hadoop 3.2+ 推荐)
  2. 内存配置

    # 在 spark-env.sh 中调整
    SPARK_DRIVER_MEMORY=4g
    SPARK_EXECUTOR_MEMORY=4g
    
  3. Python 环境

    # 安装 PySpark 依赖
    sudo yum install -y python3 python3-pip
    pip3 install pyspark==3.2.0 pandas pyarrow
    

🔄 集群管理命令

常用命令

# 启动集群
$SPARK_HOME/sbin/start-all.sh

# 停止集群
$SPARK_HOME/sbin/stop-all.sh

# 启动历史服务器
$SPARK_HOME/sbin/start-history-server.sh

# 停止历史服务器
$SPARK_HOME/sbin/stop-history-server.sh

作业提交

# 提交 Scala 作业
spark-submit --master spark://hadoop1:7077 \
  --class org.apache.spark.examples.SparkPi \
  $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0.jar

# 提交 Python 作业
spark-submit --master spark://hadoop1:7077 \
  $SPARK_HOME/examples/src/main/python/pi.py

🧪 测试示例

1. 运行 Spark Pi 示例

spark-submit --master spark://hadoop1:7077 \
  --class org.apache.spark.examples.SparkPi \
  $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0.jar 100

2. 运行 WordCount 示例

# 准备数据
hdfs dfs -put $SPARK_HOME/README.md /input/spark/README.md

# 提交作业
spark-submit --master spark://hadoop1:7077 \
  --class org.apache.spark.examples.JavaWordCount \
  $SPARK_HOME/examples/jars/spark-examples_2.12-3.2.0.jar \
  hdfs://hadoop1:9000/input/spark/README.md

📈 生产环境演进路径

开发测试环境(Standalone)
       ↓
小规模生产环境(Standalone)
       ↓
中大规模生产环境(YARN/Kubernetes)
       ↓
云原生环境(Kubernetes Operator)

🧹 卸载 Spark

# 停止服务
$SPARK_HOME/sbin/stop-all.sh
$SPARK_HOME/sbin/stop-history-server.sh

# 删除文件
sudo rm -rf /opt/spark-3.2.0-bin-hadoop3.2
sudo rm /opt/spark
sudo rm /etc/profile.d/spark.sh

# 清理数据
sudo rm -rf /data/spark
hdfs dfs -rm -r /spark-logs

对于开发测试环境, Standalone 集群模式 提供了最佳平衡点,既能模拟分布式环境,又保持了简单性。当需要快速迭代时,可结合 Local 模式 在 IDE 中直接调试。


网站公告

今日签到

点亮在社区的每一天
去签到