logo

Spark CentOS单机部署指南:从环境配置到应用实践

作者:Nicky2025.09.12 11:09浏览量:3

简介:本文详细介绍在CentOS系统上部署Spark单机的完整流程,涵盖环境准备、安装配置、验证测试及常见问题解决,助力开发者快速搭建本地化Spark开发环境。

一、部署前环境准备与注意事项

1.1 系统版本与依赖要求

CentOS 7/8是当前主流选择,需确保系统为最小化安装以减少冲突。关键依赖包括:

  • Java JDK 8/11(Spark 3.x推荐JDK 11)
  • Python 3.6+(如需PySpark支持)
  • SSH服务(用于远程管理)
  • 网络防火墙配置(开放7077、8080等端口)

验证依赖是否就绪的命令:

  1. # Java版本检查
  2. java -version
  3. # Python版本检查
  4. python3 --version
  5. # 防火墙状态检查
  6. systemctl status firewalld

1.2 硬件资源规划

单机部署建议配置:

  • 内存:≥8GB(生产环境建议16GB+)
  • CPU:≥4核(现代处理器即可)
  • 磁盘:≥50GB可用空间(用于数据缓存)

通过free -hlscpu命令可查看当前资源情况。若资源紧张,需在spark-env.sh中调整内存参数(如SPARK_WORKER_MEMORY=4g)。

二、Spark安装与配置详解

2.1 下载与解压

从Apache官网获取稳定版Spark(推荐3.5.0 LTS版本):

  1. wget https://dlcdn.apache.org/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
  2. tar -xzvf spark-3.5.0-bin-hadoop3.tgz -C /opt/
  3. ln -s /opt/spark-3.5.0-bin-hadoop3 /opt/spark # 创建软链接便于管理

2.2 核心配置文件修改

2.2.1 环境变量配置

编辑/etc/profile或用户级.bashrc

  1. export SPARK_HOME=/opt/spark
  2. export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
  3. export HADOOP_HOME=/opt/hadoop # 如需Hadoop支持

2.2.2 spark-env.sh配置

复制模板并修改关键参数:

  1. cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh

添加内容示例:

  1. # 指定JVM内存
  2. export SPARK_DAEMON_MEMORY=2g
  3. export SPARK_WORKER_MEMORY=6g
  4. # 启用历史服务器(可选)
  5. export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=5"

2.2.3 slaves文件配置

单机部署时$SPARK_HOME/conf/slaves文件内容应为:

  1. localhost

2.3 启动与验证

2.3.1 启动集群

  1. # 启动Master和Worker
  2. $SPARK_HOME/sbin/start-all.sh
  3. # 检查进程
  4. jps | grep -E "Master|Worker"

2.3.2 Web UI验证

访问http://<服务器IP>:8080,应看到:

  • Spark Master状态为ALIVE
  • 1个Worker注册(localhost)
  • 资源分配情况显示

2.3.3 运行测试任务

提交一个计算π的示例:

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

预期输出应包含近似π值(如3.141592653)。

三、常见问题解决方案

3.1 端口冲突处理

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

  1. spark.master.ui.port 8081
  2. spark.worker.ui.port 8082

3.2 内存不足错误

典型错误日志

  1. Container killed by YARN for exceeding memory limits. 3.5 GB of 3.5 GB physical memory used

解决方案:

  • 调整spark-env.sh中的SPARK_WORKER_MEMORY
  • 在代码中设置spark.executor.memory参数

3.3 版本兼容性问题

Hadoop 3.x与Spark 3.x需确保:

  • 使用spark-3.5.0-bin-hadoop3.tgz版本
  • 若使用本地HDFS,需配置core-site.xmlhdfs-site.xml到Spark的conf目录

四、优化建议与最佳实践

4.1 性能调优参数

  • spark.sql.shuffle.partitions=200(根据数据量调整)
  • spark.default.parallelism=12(CPU核心数×2~3)
  • spark.serializer=org.apache.spark.serializer.KryoSerializer

4.2 数据本地化策略

spark-defaults.conf中配置:

  1. spark.locality.wait=30s
  2. spark.locality.wait.process=60s
  3. spark.locality.wait.node=120s

4.3 日志管理

配置log4j.properties(位于$SPARK_HOME/conf/):

  1. # 设置为WARN减少日志量
  2. log4j.rootCategory=WARN, console
  3. log4j.appender.console=org.apache.log4j.ConsoleAppender
  4. log4j.appender.console.target=System.err

五、扩展应用场景

5.1 本地开发模式

通过--master local[*]参数运行:

  1. spark-submit --master local[4] ... # 使用4个本地线程

5.2 与Jupyter集成

安装PySpark内核:

  1. # 在Jupyter Notebook中
  2. import os
  3. os.environ["SPARK_HOME"] = "/opt/spark"
  4. os.environ["PYSPARK_DRIVER_PYTHON"] = "jupyter"
  5. os.environ["PYSPARK_DRIVER_PYTHON_OPTS"] = "notebook"

5.3 定时任务调度

结合Cron实现每日数据处理:

  1. # 每天凌晨2点执行
  2. 0 2 * * * /opt/spark/bin/spark-submit --class com.example.DailyJob /path/to/job.jar

六、卸载与清理

完整卸载步骤:

  1. # 停止服务
  2. $SPARK_HOME/sbin/stop-all.sh
  3. # 删除安装目录
  4. rm -rf /opt/spark*
  5. # 清理环境变量
  6. sed -i '/SPARK_HOME/d' /etc/profile
  7. # 清理临时文件
  8. rm -rf /tmp/spark-*

通过以上步骤,开发者可在CentOS系统上快速构建稳定的Spark单机环境,既可用于学习测试,也能支撑中小规模的数据处理任务。实际部署时建议先在测试环境验证配置,再迁移到生产环境。

相关文章推荐

发表评论