当前位置: 首页 > news >正文

基于JDK17的Hadoop 3.3.5与Spark 3.3.2 on Yarn集群部署实战

1. 环境准备与基础配置

在开始部署Hadoop和Spark集群之前,我们需要先搭建好基础环境。我选择使用CentOS 8.5作为操作系统,因为它在企业级应用中表现稳定,且与JDK17、Hadoop 3.3.5和Spark 3.3.2的兼容性良好。建议准备至少4台虚拟机,配置为4GB内存和20GB存储空间,这样可以模拟真实的生产环境。

首先需要安装JDK17,这是整个集群运行的基础。我推荐从Oracle官网下载JDK17的RPM包,安装过程非常简单:

rpm -ivh jdk-17_linux-x64_bin.rpm

安装完成后,配置环境变量是关键一步。打开/etc/profile文件,添加以下内容:

export JAVA_HOME=/usr/lib/jvm/jdk-17 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存后执行source /etc/profile使配置生效。验证安装是否成功可以运行java -version,应该能看到JDK17的版本信息。

2. 虚拟机集群配置与互信设置

集群环境下,各节点间的无障碍通信至关重要。我采用了一主三从的架构,主机名为master,从机名为vice1、vice2和vice3。首先需要确保所有节点的hostname正确设置:

hostnamectl set-hostname master # 在主节点执行 hostnamectl set-hostname vice1 # 在从节点1执行 # 其他节点同理

接下来配置SSH免密登录,这是Hadoop和Spark集群管理的基础。在每个节点上执行:

ssh-keygen -t rsa # 连续按三次回车

然后将所有节点的公钥收集到一个authorized_keys文件中,并分发到各节点的~/.ssh目录下。这个过程可以确保集群节点间无需密码即可互相访问。

最后,配置所有节点的/etc/hosts文件,添加类似以下内容:

192.168.1.100 master 192.168.1.101 vice1 192.168.1.102 vice2 192.168.1.103 vice3

3. Hadoop 3.3.5集群部署

Hadoop的安装需要特别注意配置文件的正确定义。下载Hadoop 3.3.5后,解压到/opt目录,然后开始关键配置文件的修改。

首先是core-site.xml,这是Hadoop的核心配置文件:

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop-3.3.5/tmp</value> </property> </configuration>

hdfs-site.xml配置HDFS相关参数:

<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.http-address</name> <value>master:9870</value> </property> </configuration>

yarn-site.xml配置YARN资源管理:

<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> </configuration>

配置完成后,将Hadoop目录复制到所有从节点相同位置,并确保环境变量一致。首次启动前需要在主节点执行:

hdfs namenode -format

然后使用start-all.sh启动集群。验证集群状态可以通过jps命令查看进程,或者在浏览器访问http://master:9870查看HDFS状态。

4. Spark 3.3.2 on YARN集成

Spark的YARN模式部署需要特别注意与Hadoop版本的兼容性。我选择下载不包含Hadoop的Spark版本(spark-3.3.2-bin-without-hadoop.tgz),这样可以避免潜在的冲突。

解压Spark到/opt目录后,关键的配置在spark-env.sh中:

export JAVA_HOME=/usr/lib/jvm/jdk-17 export HADOOP_CONF_DIR=/opt/hadoop-3.3.5/etc/hadoop export SPARK_DIST_CLASSPATH=$(/opt/hadoop-3.3.5/bin/hadoop classpath)

spark-defaults.conf需要配置YARN相关参数:

spark.master yarn spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/spark-eventlog spark.serializer org.apache.spark.serializer.KryoSerializer

在HDFS中创建事件日志目录:

hdfs dfs -mkdir /spark-eventlog

启动Spark集群只需要在Hadoop运行状态下执行Spark的sbin/start-all.sh。验证Spark on YARN是否成功,可以提交一个测试任务:

spark-submit --master yarn --class org.apache.spark.examples.SparkPi \ /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 100

任务执行完成后,可以在YARN的Web界面(http://master:8088)查看结果,如果能看到计算出的π值近似值,说明整个集群部署成功。

5. 常见问题排查与优化建议

在实际部署过程中,我遇到过几个典型问题。首先是权限问题,解决方案是在/etc/profile中添加:

export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root

另一个常见问题是Java模块系统导致的错误,需要在spark-defaults.conf中添加:

spark.executor.extraJavaOptions --add-opens java.base/java.lang=ALL-UNNAMED spark.driver.extraJavaOptions --add-opens java.base/java.lang=ALL-UNNAMED

对于性能优化,建议根据集群规模调整以下参数:

  1. yarn-site.xml中配置NodeManager的本地目录:
<property> <name>yarn.nodemanager.local-dirs</name> <value>/opt/localdir1,/opt/localdir2</value> </property>
  1. 根据可用内存调整Spark内存分配:
spark.driver.memory 4g spark.executor.memory 8g
  1. 对于大集群,考虑启用动态资源分配:
spark.dynamicAllocation.enabled true spark.shuffle.service.enabled true

集群监控也不容忽视,除了自带的Web UI外,可以考虑集成Prometheus和Grafana进行更全面的监控。

http://www.jsqmd.com/news/609949/

相关文章:

  • 2026 年洁净车间装修服务商综合评测与推荐 各领域优质企业技术选型指南 - 品牌策略主理人
  • 快速了解智能体
  • **需求分析** → **概念设计(E-R建模)** → **逻辑设计(E-R转关系模式+规范化)** → **物理设计(索引、存储、分区等)**,逐层抽象与细化
  • ESP32实战:从零构建物联网项目的完整路径
  • RK3568-11.0 WiFi热点ping测试丢包率
  • [Python3高阶编程] - Gunicorn 源代码阅读四:深入主控逻辑- Gunicorn是如何管理woker的(Arbiter + 进程管理)
  • 计算机毕业设计:Python天气数据爬取及可视化展示系统 Flask框架 数据分析 可视化 爬虫 气象数据分析(建议收藏)✅
  • 图像格式:灰度图、RGB、HSV、Bayer、YUV
  • 抖音高效批量下载全攻略:无水印视频自动化管理工具使用指南
  • 和内镜的报告接口
  • 5分钟搞定PySide2串口助手:从QT Designer到Python打包全流程
  • YugabyteDB 性能团队如何利用 AI 的力量
  • Windows系统的MBR磁盘分区
  • LeetCode HOT100 - 滑动窗口最大值
  • 九齐NY8B062F 定时器0 中断函数配置
  • 【Agent面试题大揭秘】50道高频题深度解析,助你拿下Offer!
  • 从光栅条纹到三维点云:MATLAB实现多频外差相位展开全流程
  • AI辅助论文引用生成的六种智能文献管理策略解析
  • 虚拟磁链在直接功率控制Simulink仿真中的应用及其整流器、逆变器仿真 —— 基于vf-dp...
  • Mask2Former的‘掩码注意力’到底强在哪?手把手带你用PyTorch实现核心模块
  • 2026.4.8总结
  • CANoe Log 在线回放实操指南
  • 大模型之Linux服务器部署大模型斜
  • OpenCV小项目(2)——人脸识别打卡
  • 从拉普拉斯变换到凯莱-哈密顿:矩阵指数函数计算方法的“前世今生”与选择指南
  • 为什么你的架构设计总被老板驳回?GB/T 8567 标准解读
  • C语言学习的第一周
  • Vue3项目中iframe通信实战:手把手教你实现跨项目消息传递
  • 机器学习笔记(9): L-smooth 假设
  • 显式 + 隐式特征交叉融合模型