CentOS系统下Spark单机部署全流程指南

一、部署前环境准备

1.1 系统版本要求

推荐使用CentOS 7.x或8.x版本,需确保系统已安装基础开发工具包。通过cat /etc/redhat-release命令可查看系统版本,建议使用最小化安装的纯净系统以避免组件冲突。

1.2 Java环境配置

Spark依赖Java运行环境,需安装OpenJDK 1.8或更高版本。安装步骤如下:

  1. # 安装OpenJDK 1.8
  2. sudo yum install -y java-1.8.0-openjdk-devel
  3. # 验证安装
  4. java -version
  5. # 设置JAVA_HOME环境变量
  6. echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc
  7. source ~/.bashrc

1.3 Scala环境准备(可选)

虽然Spark自带Scala库,但独立安装可便于开发调试。推荐安装Scala 2.12.x版本:

  1. # 下载Scala安装包
  2. wget https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz
  3. # 解压安装
  4. tar -xzvf scala-2.12.15.tgz -C /opt/
  5. # 设置环境变量
  6. echo "export SCALA_HOME=/opt/scala-2.12.15" >> ~/.bashrc
  7. echo "export PATH=\$PATH:\$SCALA_HOME/bin" >> ~/.bashrc
  8. source ~/.bashrc
  9. # 验证安装
  10. scala -version

二、Spark安装与配置

2.1 下载Spark发行版

从Apache官网下载预编译的Spark包,推荐选择与Hadoop兼容的版本(如”with-hadoop”后缀包):

  1. # 下载Spark 3.3.0预编译包
  2. wget https://dlcdn.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz
  3. # 解压到指定目录
  4. tar -xzvf spark-3.3.0-bin-hadoop3.tgz -C /opt/
  5. # 创建软链接便于管理
  6. ln -s /opt/spark-3.3.0-bin-hadoop3 /opt/spark

2.2 配置环境变量

编辑~/.bashrc文件添加Spark相关路径:

  1. echo "export SPARK_HOME=/opt/spark" >> ~/.bashrc
  2. echo "export PATH=\$PATH:\$SPARK_HOME/bin:\$SPARK_HOME/sbin" >> ~/.bashrc
  3. source ~/.bashrc

2.3 核心配置文件修改

2.3.1 spark-env.sh配置

复制模板文件并修改内存设置:

  1. cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh
  2. vi $SPARK_HOME/conf/spark-env.sh
  3. # 添加以下内容(根据实际内存调整)
  4. export SPARK_WORKER_MEMORY=4g
  5. export SPARK_DRIVER_MEMORY=2g
  6. export SPARK_EXECUTOR_MEMORY=2g

2.3.2 spark-defaults.conf配置

设置默认日志级别和并行度:

  1. cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
  2. vi $SPARK_HOME/conf/spark-defaults.conf
  3. # 添加以下配置
  4. spark.master local[4] # 使用4个本地线程
  5. spark.eventLog.enabled true
  6. spark.eventLog.dir file:///tmp/spark-events
  7. spark.serializer org.apache.spark.serializer.KryoSerializer

三、启动与验证

3.1 启动Spark服务

单机模式下直接启动Master和Worker:

  1. # 启动Master节点
  2. $SPARK_HOME/sbin/start-master.sh
  3. # 启动Worker节点(单机模式可省略,自动关联)
  4. $SPARK_HOME/sbin/start-worker.sh spark://$(hostname):7077

3.2 验证服务状态

通过Web UI和日志文件双重验证:

  1. # 查看Master日志
  2. tail -f $SPARK_HOME/logs/spark-*-org.apache.spark.deploy.master.Master-*.out
  3. # 访问Web界面(默认端口8080)
  4. firefox http://localhost:8080

正常界面应显示:

  • Spark Master URL: spark://hostname:7077
  • Workers数量: 1
  • 活跃应用: 0

3.3 运行测试程序

使用Spark自带的Pi计算示例验证功能:

  1. $SPARK_HOME/bin/spark-submit \
  2. --class org.apache.spark.examples.SparkPi \
  3. --master local[4] \
  4. $SPARK_HOME/examples/jars/spark-examples_*.jar \
  5. 1000

预期输出应包含类似:
Pi is roughly 3.141592653589793

四、常见问题处理

4.1 端口冲突解决

若8080等端口被占用,修改spark-defaults.conf

  1. spark.master.ui.port 8081
  2. spark.ui.port 4041

4.2 内存不足问题

调整JVM内存参数:

  1. # 修改spark-env.sh
  2. export SPARK_DAEMON_MEMORY=1g
  3. export SPARK_WORKER_OPTS="-Xms2g -Xmx2g"

4.3 权限问题处理

确保Spark目录权限正确:

  1. sudo chown -R $(whoami):$(whoami) /opt/spark
  2. sudo chmod -R 755 /opt/spark

五、优化建议

  1. 日志管理:配置log4j.properties文件控制日志级别

    1. # 修改$SPARK_HOME/conf/log4j.properties
    2. log4j.rootCategory=WARN, console
    3. log4j.appender.console=org.apache.log4j.ConsoleAppender
    4. log4j.appender.console.target=System.err
    5. log4j.appender.console.layout=org.apache.log4j.PatternLayout
    6. log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
  2. 历史服务器配置:启用作业历史记录

    1. # 修改spark-defaults.conf
    2. spark.history.fs.logDirectory file:///tmp/spark-events
    3. spark.history.ui.port 18080
    4. # 启动历史服务器
    5. $SPARK_HOME/sbin/start-history-server.sh
  3. 数据本地化:配置spark.locality.wait参数优化数据访问

    1. spark.locality.wait 30s
    2. spark.locality.wait.process 60s
    3. spark.locality.wait.node 30s
    4. spark.locality.wait.rack 5s

六、进阶配置

6.1 启用动态资源分配

spark-defaults.conf中添加:

  1. spark.dynamicAllocation.enabled true
  2. spark.shuffle.service.enabled true
  3. spark.dynamicAllocation.initialExecutors 1
  4. spark.dynamicAllocation.minExecutors 1
  5. spark.dynamicAllocation.maxExecutors 4

6.2 配置远程调试

修改spark-env.sh添加JVM调试参数:

  1. export SPARK_DAEMON_JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
  2. export SPARK_JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006"

通过以上步骤,开发者可在CentOS系统上完成完整的Spark单机环境部署。实际生产环境中,建议进一步配置监控告警系统(如Prometheus+Grafana)和备份机制,确保集群稳定运行。对于大数据量处理场景,可考虑逐步扩展为Standalone集群模式或对接YARN/K8s资源管理器。