一、部署前环境准备
1.1 系统版本要求
推荐使用CentOS 7.x或8.x版本,需确保系统已安装基础开发工具包。通过cat /etc/redhat-release命令可查看系统版本,建议使用最小化安装的纯净系统以避免组件冲突。
1.2 Java环境配置
Spark依赖Java运行环境,需安装OpenJDK 1.8或更高版本。安装步骤如下:
# 安装OpenJDK 1.8sudo yum install -y java-1.8.0-openjdk-devel# 验证安装java -version# 设置JAVA_HOME环境变量echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrcsource ~/.bashrc
1.3 Scala环境准备(可选)
虽然Spark自带Scala库,但独立安装可便于开发调试。推荐安装Scala 2.12.x版本:
# 下载Scala安装包wget https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz# 解压安装tar -xzvf scala-2.12.15.tgz -C /opt/# 设置环境变量echo "export SCALA_HOME=/opt/scala-2.12.15" >> ~/.bashrcecho "export PATH=\$PATH:\$SCALA_HOME/bin" >> ~/.bashrcsource ~/.bashrc# 验证安装scala -version
二、Spark安装与配置
2.1 下载Spark发行版
从Apache官网下载预编译的Spark包,推荐选择与Hadoop兼容的版本(如”with-hadoop”后缀包):
# 下载Spark 3.3.0预编译包wget https://dlcdn.apache.org/spark/spark-3.3.0/spark-3.3.0-bin-hadoop3.tgz# 解压到指定目录tar -xzvf spark-3.3.0-bin-hadoop3.tgz -C /opt/# 创建软链接便于管理ln -s /opt/spark-3.3.0-bin-hadoop3 /opt/spark
2.2 配置环境变量
编辑~/.bashrc文件添加Spark相关路径:
echo "export SPARK_HOME=/opt/spark" >> ~/.bashrcecho "export PATH=\$PATH:\$SPARK_HOME/bin:\$SPARK_HOME/sbin" >> ~/.bashrcsource ~/.bashrc
2.3 核心配置文件修改
2.3.1 spark-env.sh配置
复制模板文件并修改内存设置:
cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.shvi $SPARK_HOME/conf/spark-env.sh# 添加以下内容(根据实际内存调整)export SPARK_WORKER_MEMORY=4gexport SPARK_DRIVER_MEMORY=2gexport SPARK_EXECUTOR_MEMORY=2g
2.3.2 spark-defaults.conf配置
设置默认日志级别和并行度:
cp $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.confvi $SPARK_HOME/conf/spark-defaults.conf# 添加以下配置spark.master local[4] # 使用4个本地线程spark.eventLog.enabled truespark.eventLog.dir file:///tmp/spark-eventsspark.serializer org.apache.spark.serializer.KryoSerializer
三、启动与验证
3.1 启动Spark服务
单机模式下直接启动Master和Worker:
# 启动Master节点$SPARK_HOME/sbin/start-master.sh# 启动Worker节点(单机模式可省略,自动关联)$SPARK_HOME/sbin/start-worker.sh spark://$(hostname):7077
3.2 验证服务状态
通过Web UI和日志文件双重验证:
# 查看Master日志tail -f $SPARK_HOME/logs/spark-*-org.apache.spark.deploy.master.Master-*.out# 访问Web界面(默认端口8080)firefox http://localhost:8080
正常界面应显示:
- Spark Master URL:
spark://hostname:7077 - Workers数量: 1
- 活跃应用: 0
3.3 运行测试程序
使用Spark自带的Pi计算示例验证功能:
$SPARK_HOME/bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master local[4] \$SPARK_HOME/examples/jars/spark-examples_*.jar \1000
预期输出应包含类似:Pi is roughly 3.141592653589793
四、常见问题处理
4.1 端口冲突解决
若8080等端口被占用,修改spark-defaults.conf:
spark.master.ui.port 8081spark.ui.port 4041
4.2 内存不足问题
调整JVM内存参数:
# 修改spark-env.shexport SPARK_DAEMON_MEMORY=1gexport SPARK_WORKER_OPTS="-Xms2g -Xmx2g"
4.3 权限问题处理
确保Spark目录权限正确:
sudo chown -R $(whoami):$(whoami) /opt/sparksudo chmod -R 755 /opt/spark
五、优化建议
-
日志管理:配置
log4j.properties文件控制日志级别# 修改$SPARK_HOME/conf/log4j.propertieslog4j.rootCategory=WARN, consolelog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.target=System.errlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH
ss} %p %c{1}: %m%n
-
历史服务器配置:启用作业历史记录
# 修改spark-defaults.confspark.history.fs.logDirectory file:///tmp/spark-eventsspark.history.ui.port 18080# 启动历史服务器$SPARK_HOME/sbin/start-history-server.sh
-
数据本地化:配置
spark.locality.wait参数优化数据访问spark.locality.wait 30sspark.locality.wait.process 60sspark.locality.wait.node 30sspark.locality.wait.rack 5s
六、进阶配置
6.1 启用动态资源分配
在spark-defaults.conf中添加:
spark.dynamicAllocation.enabled truespark.shuffle.service.enabled truespark.dynamicAllocation.initialExecutors 1spark.dynamicAllocation.minExecutors 1spark.dynamicAllocation.maxExecutors 4
6.2 配置远程调试
修改spark-env.sh添加JVM调试参数:
export SPARK_DAEMON_JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"export SPARK_JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5006"
通过以上步骤,开发者可在CentOS系统上完成完整的Spark单机环境部署。实际生产环境中,建议进一步配置监控告警系统(如Prometheus+Grafana)和备份机制,确保集群稳定运行。对于大数据量处理场景,可考虑逐步扩展为Standalone集群模式或对接YARN/K8s资源管理器。