【Spark】CentOS7集群环境Spark多模式部署实战:从Local到On Hive的完整配置与验证
·
1. 环境准备与前置条件
在CentOS7集群上部署Spark前,需要先搭建好基础环境。我建议使用3台配置相同的物理机或虚拟机,内存建议8GB以上,每台机器分配至少2个CPU核心。这里以feilink1作为主节点,feilink2和feilink3作为从节点。
关键组件版本选择很重要,我踩过版本不兼容的坑。经过多次测试,推荐以下组合:
- Hadoop 3.3.4(与Spark 3.x兼容性最佳)
- JDK 1.8(OpenJDK或Oracle JDK均可)
- MySQL 8.0.29(用于Hive元数据存储)
- Python 3.8+(建议通过Anaconda管理)
先在所有节点上配置SSH免密登录,这个步骤不能省:
# 在主节点执行
ssh-keygen -t rsa
ssh-copy-id feilink1
ssh-copy-id feilink2
ssh-copy-id feilink3
2. Local模式部署与验证
Local模式最适合快速验证和开发测试。我通常先用这个模式检查基础环境是否正常。
安装步骤:
- 下载Spark二进制包(注意选对Hadoop版本):
wget https://dlcdn.apache.org/spark/spark-3.5.7/spark-3.5.7-bin-hadoop3.tgz -P /export/server
- 解压并配置环境变量:
tar -zxvf spark-3.5.7-bin-hadoop3.tgz
mv spark-3.5.7-bin-hadoop3 spark
- Python环境配置有个坑要注意:PySpark对Python版本很敏感。我建议用Anaconda创建独立环境:
conda create -n pyspark python=3.8
conda activate pyspark
pip install pyspark numpy pandas
验证Local模式:
/export/server/spark/bin/pyspark
>>> rdd = sc.parallelize(range(100))
>>> rdd.mean() # 应该返回49.5
WebUI默认在http://主节点IP:4040,如果看不到界面,检查防火墙:
firewall-cmd --zone=public --add-port=4040/tcp --permanent
firewall-cmd --reload
3. StandAlone集群模式实战
StandAlone模式是Spark自带的集群管理器,适合中小规模部署。我在生产环境发现几个关键配置点:
关键配置文件:
- workers文件(原slaves文件):
feilink1
feilink2
feilink3
- spark-env.sh需要特别注意内存分配:
# 每个Worker可用内存(根据机器配置调整)
SPARK_WORKER_MEMORY=4g
# 事件日志目录(必须先创建HDFS目录)
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://feilink1:8020/sparklog"
集群启动顺序很重要:
- 先启动HDFS:
su - hadoop
start-dfs.sh
hadoop fs -mkdir /sparklog
- 再启动Spark集群:
/export/server/spark/sbin/start-all.sh
/export/server/spark/sbin/start-history-server.sh
验证集群状态:
- Master WebUI: http://feilink1:8080
- History Server: http://feilink1:18080
提交测试任务时,我习惯用这种命令:
spark-submit --master spark://feilink1:7077 \
--class org.apache.spark.examples.SparkPi \
/export/server/spark/examples/jars/spark-examples_2.12-3.5.7.jar 100
4. Spark On Yarn深度配置
Yarn模式适合已有Hadoop集群的场景。这里有几个我总结的优化点:
必须配置:
- 在yarn-site.xml中增加:
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
- spark-defaults.conf关键参数:
spark.yarn.jars hdfs://feilink1:8020/spark/jars/*
spark.shuffle.service.enabled true
spark.dynamicAllocation.enabled true
部署模式选择:
- Client模式(适合调试):
spark-submit --master yarn --deploy-mode client ...
- Cluster模式(生产推荐):
spark-submit --master yarn --deploy-mode cluster ...
资源调优经验:
# 每个executor内存(实际会超出约10%)
--executor-memory 2G
# 每个executor核心数(建议不超过5个)
--executor-cores 2
# 动态分配参数
--conf spark.dynamicAllocation.minExecutors=2
--conf spark.dynamicAllocation.maxExecutors=10
5. Spark On Hive集成实战
与Hive集成后可以用SparkSQL直接查询Hive表。我遇到过的元数据问题最多,分享下解决方案:
关键配置步骤:
- 必须将hive-site.xml复制到Spark的conf目录:
cp /export/server/hive/conf/hive-site.xml /export/server/spark/conf/
- MySQL驱动放置位置有讲究:
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.29/mysql-connector-java-8.0.29.jar
mv mysql-connector-java-8.0.29.jar /export/server/spark/jars/
- 启动Hive元数据服务(必须先启动MySQL):
nohup hive --service metastore > /var/log/metastore.log 2>&1 &
验证集成是否成功:
spark-sql
> show databases; # 应该能看到hive的数据库
> create table test(id int);
> insert into test values(1);
性能优化技巧:
- 使用Tez引擎加速:
set hive.execution.engine=tez;
- 分区表查询优化:
-- 建表时指定分区
CREATE TABLE logs (id INT) PARTITIONED BY (dt STRING);
-- 查询时带上分区条件
SELECT * FROM logs WHERE dt='2023-01-01';
6. 多模式切换与日常维护
在实际项目中,我经常需要切换不同模式。分享几个实用技巧:
模式快速切换:
- 通过环境变量控制:
export SPARK_MASTER=yarn
# 或者
export SPARK_MASTER=spark://feilink1:7077
- 在代码中指定:
spark = SparkSession.builder \
.appName("MyApp") \
.config("spark.master", "yarn") \
.enableHiveSupport() \
.getOrCreate()
日常维护命令:
- 查看运行中的应用:
yarn application -list
- 杀死异常任务:
yarn application -kill application_123456789_0001
- 日志查看技巧:
# 直接查看日志
yarn logs -applicationId application_123456789_0001
# 导出日志到文件
yarn logs -applicationId application_123456789_0001 > app.log
监控建议:
- 配置Prometheus监控:
# 在spark-defaults.conf添加
spark.metrics.conf.*.sink.prometheusServlet.class=org.apache.spark.metrics.sink.PrometheusServlet
spark.metrics.conf.*.sink.prometheusServlet.path=/metrics/prometheus
- 关键指标监控:
- Executor内存使用率
- Shuffle读写吞吐量
- 任务排队时间
更多推荐
所有评论(0)