Linux环境下Spark单机模式部署全流程指南(适配Hadoop 3.1+)

一、环境准备与版本适配

1.1 基础环境要求

推荐使用CentOS 7/8、Ubuntu 20.04+或Rocky Linux 8等主流Linux发行版,需确保系统已安装以下组件:

  • Hadoop 3.1.x(已部署HDFS/YARN服务)
  • Java JDK 8或更高版本(建议OpenJDK)
  • 基础开发工具包(gcc、make等)
  • 网络配置:固定IP地址(示例使用192.168.0.110)

1.2 版本兼容性说明

Spark 3.1.2与Hadoop 3.1.x存在最佳兼容性,需特别注意:

  • Spark预编译包需选择”with Hadoop 3.2”版本(官方提供兼容性支持)
  • 避免使用Hadoop 2.x与Spark 3.x的组合
  • 推荐使用LTS(长期支持)版本降低维护成本

二、安装部署流程

2.1 下载与解压

通过官方镜像站获取安装包(示例使用wget模拟下载):

  1. # 创建安装目录
  2. sudo mkdir -p /opt/module
  3. cd /opt/module
  4. # 下载Spark二进制包(实际需替换为有效下载链接)
  5. wget https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz
  6. # 解压并重命名目录
  7. tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz
  8. mv spark-3.1.2-bin-hadoop3.2 spark-3.1.2

2.2 目录结构规范

建议采用标准化的目录布局:

  1. /opt/module/spark-3.1.2/
  2. ├── bin/ # 可执行脚本
  3. ├── conf/ # 配置文件
  4. ├── examples/ # 示例程序
  5. ├── jars/ # 依赖库
  6. ├── logs/ # 运行日志
  7. └── sbin/ # 管理脚本

三、系统配置优化

3.1 环境变量设置

编辑用户配置文件(~/.bashrc或~/.bash_profile):

  1. # Spark环境变量
  2. export SPARK_HOME=/opt/module/spark-3.1.2
  3. export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
  4. export HADOOP_CONF_DIR=/opt/module/hadoop/etc/hadoop # 重要:指定Hadoop配置路径
  5. # 使配置生效
  6. source ~/.bashrc

3.2 核心配置文件修改

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

添加以下关键参数:

  1. # 指定Java安装路径
  2. export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
  3. # Spark Master节点配置
  4. export SPARK_MASTER_HOST=192.168.0.110
  5. export SPARK_MASTER_PORT=7077
  6. export SPARK_MASTER_WEBUI_PORT=8080
  7. # Worker节点配置(单机模式可省略)
  8. # export SPARK_WORKER_CORES=2
  9. # export SPARK_WORKER_MEMORY=2g

slaves文件配置(单机模式)

  1. echo "localhost" > $SPARK_HOME/conf/slaves

3.3 日志配置优化

修改log4j.properties提升调试效率:

  1. # 修改日志级别为WARN
  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

四、服务启动与验证

4.1 启动流程

  1. # 启动Master节点
  2. $SPARK_HOME/sbin/start-master.sh
  3. # 启动Worker节点(单机模式)
  4. $SPARK_HOME/sbin/start-slave.sh spark://192.168.0.110:7077
  5. # 验证进程状态
  6. jps | grep -E 'Master|Worker'

4.2 Web监控界面

访问以下URL查看集群状态:

  1. http://192.168.0.110:8080

正常界面应显示:

  • Master节点状态(ALIVE)
  • 可用资源信息(CPU/内存)
  • Worker节点连接状态

4.3 运行测试任务

  1. # 进入Spark示例目录
  2. cd $SPARK_HOME/examples/jars
  3. # 运行计算π的示例
  4. $SPARK_HOME/bin/spark-submit \
  5. --class org.apache.spark.examples.SparkPi \
  6. --master spark://192.168.0.110:7077 \
  7. --executor-memory 512M \
  8. --total-executor-cores 2 \
  9. spark-examples_2.12-3.1.2.jar 1000

五、常见问题处理

5.1 端口冲突解决方案

端口 用途 冲突表现
7077 Master RPC Connection refused
8080 Web UI 页面无法加载
8081 Worker UI 404错误

处理步骤:

  1. 使用netstat -tulnp | grep <端口>检查占用
  2. 修改spark-env.sh中的对应端口参数
  3. 重启Spark服务

5.2 内存配置建议

根据机器配置调整以下参数:

  1. # spark-defaults.conf
  2. spark.driver.memory 2g
  3. spark.executor.memory 2g
  4. spark.executor.cores 2

5.3 Hadoop集成问题

若出现HDFS访问异常:

  1. 确认HADOOP_CONF_DIR路径正确
  2. 检查core-site.xml/hdfs-site.xml配置
  3. 验证Hadoop服务状态:hdfs dfsadmin -report

六、进阶配置建议

6.1 历史服务器配置

启用Spark History Server记录作业历史:

  1. # 修改spark-defaults.conf
  2. spark.eventLog.enabled true
  3. spark.eventLog.dir hdfs://namenode:8020/spark-logs
  4. spark.history.fs.logDirectory hdfs://namenode:8020/spark-logs
  5. # 启动历史服务
  6. $SPARK_HOME/sbin/start-history-server.sh

6.2 高可用部署

生产环境建议配置:

  1. 使用Zookeeper实现Master HA
  2. 配置多个Worker节点
  3. 启用动态资源分配:
    1. spark.dynamicAllocation.enabled true
    2. spark.shuffle.service.enabled true

6.3 性能调优参数

  1. # 序列化优化
  2. spark.serializer org.apache.spark.serializer.KryoSerializer
  3. # 数据本地化
  4. spark.locality.wait 3s
  5. # 广播变量优化
  6. spark.broadcast.blockSize 4M

七、卸载与清理

完整卸载流程:

  1. # 停止所有服务
  2. $SPARK_HOME/sbin/stop-all.sh
  3. # 删除安装目录
  4. sudo rm -rf /opt/module/spark-3.1.2
  5. # 清理环境变量
  6. vi ~/.bashrc # 删除相关export语句
  7. source ~/.bashrc

本文提供的部署方案经过实际环境验证,可帮助开发者快速搭建Spark单机开发环境。对于生产环境部署,建议在此基础上增加监控告警、备份恢复等企业级特性。实际开发中,可结合对象存储服务构建完整的大数据处理流水线,满足多样化的业务需求。