CentOS环境下Spark单机部署全攻略:从环境准备到运行测试

CentOS环境下Spark单机部署全攻略:从环境准备到运行测试

一、部署前环境准备

1.1 系统版本选择

建议使用CentOS 7.x或8.x版本,这两个版本对大数据生态组件支持完善且社区资源丰富。通过cat /etc/redhat-release命令可查看当前系统版本。对于新项目,推荐使用CentOS 7.9 LTS版本,该版本具有5年生命周期支持,稳定性更有保障。

1.2 基础依赖安装

  1. # 安装必要工具
  2. sudo yum install -y wget curl vim net-tools java-1.8.0-openjdk-devel
  3. # 验证Java安装
  4. java -version
  5. # 应输出类似:openjdk version "1.8.0_302"

Spark 3.x版本要求Java 8或11,建议使用Oracle JDK 8或OpenJDK 8。可通过alternatives --config java命令切换默认Java版本。

1.3 网络配置检查

确保服务器防火墙允许关键端口通信:

  1. sudo firewall-cmd --permanent --add-port={7077/tcp,8080/tcp,6066/tcp}
  2. sudo firewall-cmd --reload

其中7077是集群模式默认端口,8080是Web UI端口,6066是历史服务器端口。单机部署时至少需要开放8080端口用于监控。

二、Spark安装与配置

2.1 下载与解压

从Apache官网获取最新稳定版Spark(建议3.3.x以上):

  1. wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
  2. tar -xzvf spark-3.3.2-bin-hadoop3.tgz
  3. mv spark-3.3.2-bin-hadoop3 /opt/spark

注意选择与Hadoop版本匹配的Spark包,如使用Hadoop 3.x则选择带hadoop3后缀的版本。

2.2 环境变量配置

编辑~/.bashrc文件添加:

  1. export SPARK_HOME=/opt/spark
  2. export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
  3. export PYSPARK_PYTHON=/usr/bin/python3 # 如需使用PySpark

执行source ~/.bashrc使配置生效。可通过spark-shell --version验证安装。

2.3 核心配置优化

修改$SPARK_HOME/conf/spark-defaults.conf

  1. spark.master local[*]
  2. spark.eventLog.enabled true
  3. spark.eventLog.dir file:///tmp/spark-events
  4. spark.history.fs.logDirectory file:///tmp/spark-events

对于开发环境,建议配置:

  1. spark.sql.shuffle.partitions 200 # 根据CPU核心数调整
  2. spark.driver.memory 4g
  3. spark.executor.memory 4g

三、启动与验证

3.1 启动Spark服务

  1. # 启动历史服务器(可选)
  2. $SPARK_HOME/sbin/start-history-server.sh
  3. # 启动Spark shell
  4. spark-shell

正常启动后应看到类似输出:

  1. Spark context Web UI available at http://<hostname>:4040

3.2 运行测试任务

在Spark shell中执行:

  1. val data = 1 to 10000
  2. val rdd = sc.parallelize(data)
  3. rdd.filter(_ % 2 == 0).count()

应返回5000。可通过Web UI(默认4040端口)查看任务执行详情。

3.3 PySpark环境配置

如需使用Python接口:

  1. pip install pyspark
  2. # 测试
  3. python -c "from pyspark.sql import SparkSession; print(SparkSession.builder.getOrCreate().version)"

四、常见问题解决方案

4.1 内存不足错误

现象:Container killed by YARN for exceeding memory limits
解决方案:

  • 调整spark-defaults.conf中的内存参数
  • 减少spark.executor.instances数量
  • 增加系统swap空间:
    1. sudo fallocate -l 4G /swapfile
    2. sudo chmod 600 /swapfile
    3. sudo mkswap /swapfile
    4. sudo swapon /swapfile

4.2 端口冲突问题

现象:Address already in use
解决方案:

  • 修改$SPARK_HOME/conf/spark-env.sh
    1. export SPARK_MASTER_WEBUI_PORT=8081 # 修改Web UI端口
    2. export SPARK_WORKER_WEBUI_PORT=8082 # 修改Worker UI端口

4.3 数据倾斜处理

建议配置:

  1. spark.sql.adaptive.enabled true
  2. spark.sql.adaptive.coalescePartitions.enabled true
  3. spark.sql.autoBroadcastJoinThreshold -1 # 禁用广播join

五、生产环境建议

  1. 日志管理:配置log4j.properties文件,设置合理的日志级别
  2. 监控集成:通过Prometheus + Grafana监控Spark指标
  3. 数据备份:定期备份$SPARK_HOME/work目录下的应用日志
  4. 安全配置:启用spark.authenticatespark.acls.enable进行权限控制

六、扩展功能

6.1 Jupyter Notebook集成

  1. pip install pyspark findspark
  2. jupyter notebook --ip=0.0.0.0 --port=8888

在Notebook中添加:

  1. import findspark
  2. findspark.init()
  3. from pyspark.sql import SparkSession
  4. spark = SparkSession.builder.getOrCreate()

6.2 Delta Lake支持

  1. // 在spark-shell中
  2. spark.sql("CREATE DATABASE delta_db")
  3. spark.sql("USE delta_db")

通过以上步骤,开发者可以在CentOS系统上快速搭建功能完善的Spark单机开发环境。该环境既可用于本地调试,也可作为小型数据处理任务的运行平台。建议定期关注Apache Spark官方更新,及时升级到最新稳定版本以获得性能优化和新特性支持。