从零到精通:CentOS7上Spark 3.5.7全模式部署实战指南
当你第一次面对一台全新的CentOS7服务器,想要部署Spark进行大数据处理时,是否感到无从下手?本文将带你从最基础的Local模式开始,逐步深入到StandAlone集群部署,最终实现与Hadoop YARN环境的无缝集成。无论你是运维工程师还是数据开发新手,这份手把手的实战指南都能让你少走弯路。
1. 环境准备与基础配置
在开始部署之前,我们需要确保系统环境满足Spark运行的基本要求。一台干净的CentOS7服务器是最理想的起点,这样可以避免各种依赖冲突问题。
1.1 系统基础环境检查
首先确认系统版本和内核信息:
cat /etc/redhat-release uname -r建议使用最小化安装的CentOS7系统,这样可以减少不必要的软件冲突。如果系统已经安装了一些组件,建议先进行清理:
# 检查已安装的Java版本 java -version # 如有旧版本Java,建议卸载 yum remove java-*1.2 依赖组件安装
Spark运行需要Java环境,推荐使用JDK8:
yum install -y java-1.8.0-openjdk-devel验证Java安装是否成功:
java -version javac -version对于Python支持,建议使用Anaconda创建独立环境:
wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh bash Anaconda3-2023.07-2-Linux-x86_64.sh -b -p /opt/anaconda32. Local模式部署与验证
Local模式是Spark最简单的运行方式,适合快速验证和开发测试。
2.1 Spark安装与配置
下载Spark 3.5.7二进制包:
wget https://dlcdn.apache.org/spark/spark-3.5.7/spark-3.5.7-bin-hadoop3.tgz -P /opt tar -zxvf /opt/spark-3.5.7-bin-hadoop3.tgz -C /opt ln -s /opt/spark-3.5.7-bin-hadoop3 /opt/spark配置环境变量:
echo 'export SPARK_HOME=/opt/spark' >> /etc/profile echo 'export PATH=$PATH:$SPARK_HOME/bin' >> /etc/profile source /etc/profile2.2 Python环境隔离
为避免Python包冲突,创建专用环境:
conda create -n pyspark python=3.9 -y conda activate pyspark pip install pyspark numpy pandas配置PySpark使用特定Python环境:
echo 'export PYSPARK_PYTHON=/opt/anaconda3/envs/pyspark/bin/python' >> /etc/profile source /etc/profile2.3 Local模式测试
启动PySpark shell:
pyspark在交互式环境中运行简单测试:
data = [1, 2, 3, 4, 5] distData = sc.parallelize(data) print(distData.map(lambda x: x*x).collect())访问Web UI验证运行状态:
http://<服务器IP>:40403. StandAlone集群部署
StandAlone模式是Spark自带的集群管理模式,适合中小规模部署。
3.1 多节点环境准备
假设我们有三台服务器:
- master: 192.168.1.101
- worker1: 192.168.1.102
- worker2: 192.168.1.103
在所有节点上配置hosts文件:
echo "192.168.1.101 master 192.168.1.102 worker1 192.168.1.103 worker2" >> /etc/hosts配置SSH免密登录(在master节点执行):
ssh-keygen -t rsa ssh-copy-id master ssh-copy-id worker1 ssh-copy-id worker23.2 Spark集群配置
编辑workers文件:
echo "worker1 worker2" > $SPARK_HOME/conf/workers配置spark-env.sh:
cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh echo 'export SPARK_MASTER_HOST=master export SPARK_MASTER_PORT=7077 export SPARK_WORKER_CORES=4 export SPARK_WORKER_MEMORY=4g' >> $SPARK_HOME/conf/spark-env.sh3.3 集群启动与管理
启动Master节点:
$SPARK_HOME/sbin/start-master.sh启动Worker节点(会自动根据workers文件启动):
$SPARK_HOME/sbin/start-workers.sh集群管理命令对比:
| 命令 | 功能 | 适用场景 |
|---|---|---|
| start-master.sh | 启动Master进程 | 首次启动 |
| start-workers.sh | 启动所有Worker | 集群扩展 |
| start-all.sh | 启动Master和Worker | 全新启动 |
| stop-all.sh | 停止所有进程 | 维护关闭 |
访问Master Web UI:
http://master:80804. YARN模式集成
YARN模式允许Spark作为Hadoop集群的一个应用运行,充分利用现有资源。
4.1 Hadoop环境准备
确保Hadoop集群正常运行,并检查YARN配置:
yarn node -list配置Spark使用YARN:
echo 'export HADOOP_CONF_DIR=/etc/hadoop/conf export YARN_CONF_DIR=/etc/hadoop/conf' >> $SPARK_HOME/conf/spark-env.sh4.2 YARN模式提交应用
客户端模式(适合交互式开发):
spark-submit --master yarn --deploy-mode client \ --num-executors 2 \ --executor-memory 2G \ --executor-cores 2 \ /path/to/your/app.py集群模式(适合生产环境):
spark-submit --master yarn --deploy-mode cluster \ --num-executors 4 \ --executor-memory 4G \ --executor-cores 2 \ /path/to/your/app.py4.3 资源调优建议
YARN模式下资源配置参考表:
| 参数 | 建议值 | 说明 |
|---|---|---|
| --num-executors | 集群节点数×2-3 | 执行器数量 |
| --executor-memory | 节点内存的60-70% | 单执行器内存 |
| --executor-cores | 节点核数的70% | 单执行器核数 |
| spark.yarn.executor.memoryOverhead | executor-memory的10-15% | 堆外内存 |
5. 生产环境优化与监控
5.1 日志与历史服务器配置
配置事件日志记录:
echo 'spark.eventLog.enabled true spark.eventLog.dir hdfs://master:8020/spark-logs spark.history.fs.logDirectory hdfs://master:8020/spark-logs' > $SPARK_HOME/conf/spark-defaults.conf启动历史服务器:
$SPARK_HOME/sbin/start-history-server.sh5.2 安全配置建议
- 使用专用用户运行Spark,避免root权限
- 配置Kerberos认证
- 限制Web UI访问IP
- 定期清理日志和临时文件
5.3 性能调优技巧
常见性能问题排查表:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 任务执行慢 | 数据倾斜 | 重分区或加盐 |
| Executor丢失 | 内存不足 | 增加内存或调整分区 |
| Driver OOM | 收集数据过多 | 使用分布式操作替代collect |
| 网络超时 | 序列化效率低 | 使用Kryo序列化 |
6. 常见问题与解决方案
在实际部署过程中,难免会遇到各种问题。以下是几个典型问题的解决方法:
问题1:Python版本冲突
症状:PySpark执行时报错找不到Python模块
解决:
# 明确指定Python路径 export PYSPARK_PYTHON=/path/to/your/python问题2:端口冲突
症状:Master或Worker启动失败
解决:
# 查看端口占用 netstat -tulnp | grep 8080 # 修改默认端口 export SPARK_MASTER_WEBUI_PORT=8081问题3:HDFS权限问题
症状:YARN模式无法读取HDFS数据
解决:
# 确保Spark用户有HDFS访问权限 hadoop fs -chmod -R 777 /user/spark问题4:内存不足
症状:任务频繁失败或被终止
解决:
# 调整内存配置 spark-submit --executor-memory 8G ...在部署Spark集群时,建议按照Local→StandAlone→YARN的顺序逐步验证,每个阶段都做好测试和文档记录。遇到问题时,首先检查日志文件(通常在$SPARK_HOME/logs目录下),大多数错误信息都能在那里找到线索。