CentOS环境下Spark单机部署全攻略:从环境准备到运行测试
一、部署前环境准备
1.1 系统版本选择
建议使用CentOS 7.x或8.x版本,这两个版本对大数据生态组件支持完善且社区资源丰富。通过cat /etc/redhat-release命令可查看当前系统版本。对于新项目,推荐使用CentOS 7.9 LTS版本,该版本具有5年生命周期支持,稳定性更有保障。
1.2 基础依赖安装
# 安装必要工具sudo yum install -y wget curl vim net-tools java-1.8.0-openjdk-devel# 验证Java安装java -version# 应输出类似:openjdk version "1.8.0_302"
Spark 3.x版本要求Java 8或11,建议使用Oracle JDK 8或OpenJDK 8。可通过alternatives --config java命令切换默认Java版本。
1.3 网络配置检查
确保服务器防火墙允许关键端口通信:
sudo firewall-cmd --permanent --add-port={7077/tcp,8080/tcp,6066/tcp}sudo firewall-cmd --reload
其中7077是集群模式默认端口,8080是Web UI端口,6066是历史服务器端口。单机部署时至少需要开放8080端口用于监控。
二、Spark安装与配置
2.1 下载与解压
从Apache官网获取最新稳定版Spark(建议3.3.x以上):
wget https://dlcdn.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgztar -xzvf spark-3.3.2-bin-hadoop3.tgzmv spark-3.3.2-bin-hadoop3 /opt/spark
注意选择与Hadoop版本匹配的Spark包,如使用Hadoop 3.x则选择带hadoop3后缀的版本。
2.2 环境变量配置
编辑~/.bashrc文件添加:
export SPARK_HOME=/opt/sparkexport PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinexport PYSPARK_PYTHON=/usr/bin/python3 # 如需使用PySpark
执行source ~/.bashrc使配置生效。可通过spark-shell --version验证安装。
2.3 核心配置优化
修改$SPARK_HOME/conf/spark-defaults.conf:
spark.master local[*]spark.eventLog.enabled truespark.eventLog.dir file:///tmp/spark-eventsspark.history.fs.logDirectory file:///tmp/spark-events
对于开发环境,建议配置:
spark.sql.shuffle.partitions 200 # 根据CPU核心数调整spark.driver.memory 4gspark.executor.memory 4g
三、启动与验证
3.1 启动Spark服务
# 启动历史服务器(可选)$SPARK_HOME/sbin/start-history-server.sh# 启动Spark shellspark-shell
正常启动后应看到类似输出:
Spark context Web UI available at http://<hostname>:4040
3.2 运行测试任务
在Spark shell中执行:
val data = 1 to 10000val rdd = sc.parallelize(data)rdd.filter(_ % 2 == 0).count()
应返回5000。可通过Web UI(默认4040端口)查看任务执行详情。
3.3 PySpark环境配置
如需使用Python接口:
pip install pyspark# 测试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空间:
sudo fallocate -l 4G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile
4.2 端口冲突问题
现象:Address already in use
解决方案:
- 修改
$SPARK_HOME/conf/spark-env.sh:export SPARK_MASTER_WEBUI_PORT=8081 # 修改Web UI端口export SPARK_WORKER_WEBUI_PORT=8082 # 修改Worker UI端口
4.3 数据倾斜处理
建议配置:
spark.sql.adaptive.enabled truespark.sql.adaptive.coalescePartitions.enabled truespark.sql.autoBroadcastJoinThreshold -1 # 禁用广播join
五、生产环境建议
- 日志管理:配置
log4j.properties文件,设置合理的日志级别 - 监控集成:通过Prometheus + Grafana监控Spark指标
- 数据备份:定期备份
$SPARK_HOME/work目录下的应用日志 - 安全配置:启用
spark.authenticate和spark.acls.enable进行权限控制
六、扩展功能
6.1 Jupyter Notebook集成
pip install pyspark findsparkjupyter notebook --ip=0.0.0.0 --port=8888
在Notebook中添加:
import findsparkfindspark.init()from pyspark.sql import SparkSessionspark = SparkSession.builder.getOrCreate()
6.2 Delta Lake支持
// 在spark-shell中spark.sql("CREATE DATABASE delta_db")spark.sql("USE delta_db")
通过以上步骤,开发者可以在CentOS系统上快速搭建功能完善的Spark单机开发环境。该环境既可用于本地调试,也可作为小型数据处理任务的运行平台。建议定期关注Apache Spark官方更新,及时升级到最新稳定版本以获得性能优化和新特性支持。