基于JDK17构建Hadoop 3.3.5与Spark 3.3.2的Yarn集群:从零开始的实战部署指南
1. 环境准备与基础配置搭建大数据集群的第一步是准备合适的硬件和操作系统环境。我建议使用至少4台虚拟机来模拟真实生产环境主节点配置建议4核CPU、8GB内存、100GB存储从节点可以适当降低配置。操作系统选择CentOS Stream 8或9这是目前最稳定的企业级Linux发行版之一。安装完基础系统后首先需要配置SSH免密登录。这个步骤看似简单但我在实际部署中遇到过不少坑。比如密钥权限设置不当会导致认证失败正确的做法是确保.ssh目录权限为700authorized_keys文件权限为600。还有个容易忽略的点是SELinux如果遇到连接问题可以临时用setenforce 0命令将其设为宽容模式测试。2. JDK17安装与调优JDK17作为长期支持版本相比JDK8有显著的性能提升。我实测在Hadoop集群上同样的计算任务JDK17能减少约15%的执行时间。安装时推荐使用Oracle官方RPM包安装路径保持默认的/usr/lib/jvm/最为稳妥。环境变量配置需要特别注意JVM参数调优。在/etc/profile中添加以下内容export JAVA_HOME/usr/lib/jvm/jdk-17 export PATH$PATH:$JAVA_HOME/bin export JAVA_OPTS-Xms2g -Xmx4g -XX:UseG1GC这些参数中-Xms和-Xmx设置堆内存初始值和最大值建议比例为1:2。G1垃圾回收器在大内存场景下表现优异能有效减少GC停顿时间。配置完成后记得用java -version验证安装是否成功。3. Hadoop 3.3.5集群部署Hadoop安装包解压后需要重点配置以下几个文件core-site.xml中要设置默认文件系统地址和临时目录property namefs.defaultFS/name valuehdfs://master:9000/value /property property namehadoop.tmp.dir/name value/opt/hadoop/tmp/value /propertyhdfs-site.xml需要配置副本数和Web UI端口property namedfs.replication/name value3/value /property property namedfs.namenode.http-address/name valuemaster:9870/value /property特别提醒Hadoop 3.x版本默认Web端口从50070改为了9870这个变化让不少老手都踩过坑。配置完成后首次启动前必须执行hdfs namenode -format格式化操作但切记这个命令只能执行一次重复执行会导致数据丢失。4. YARN资源管理配置YARN的配置主要集中在yarn-site.xml文件property nameyarn.resourcemanager.hostname/name valuemaster/value /property property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.resource.memory-mb/name value8192/value /property内存配置需要根据实际机器配置调整一般建议保留20%给系统进程。启动后可以通过yarn node -list命令检查节点注册情况。如果发现节点未正常注册常见原因包括防火墙未关闭、主机名解析错误等。5. Spark 3.3.2集成部署Spark on YARN模式需要特别注意Hadoop类路径的配置。在spark-env.sh中添加export HADOOP_CONF_DIR/opt/hadoop/etc/hadoop export SPARK_DIST_CLASSPATH$(/opt/hadoop/bin/hadoop classpath)spark-defaults.conf中要正确设置事件日志目录spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/spark-logs我在实际部署中发现Spark 3.3.2对JDK17的兼容性很好但需要额外添加--add-opens参数来避免模块系统警告。可以通过在spark-defaults.conf中添加以下配置解决spark.driver.extraJavaOptions --add-opensjava.base/java.langALL-UNNAMED spark.executor.extraJavaOptions --add-opensjava.base/java.langALL-UNNAMED6. 集群验证与测试完成所有安装后建议按以下步骤验证集群启动HDFS和YARNstart-dfs.sh start-yarn.sh运行HDFS测试hdfs dfs -mkdir /test hdfs dfs -put localfile /test hdfs dfs -cat /test/localfile提交Spark Pi示例作业spark-submit --master yarn \ --deploy-mode cluster \ --class org.apache.spark.examples.SparkPi \ /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 100查看作业输出时如果遇到Web UI无法访问的情况可能是防火墙或SELinux导致。我通常会用curl http://localhost:8088先在服务器本地测试连通性。7. 性能调优与问题排查集群正常运行后还需要进行一些优化调整。对于HDFS建议调整以下参数dfs.datanode.handler.count默认10建议设为CPU核数的4倍dfs.namenode.handler.count默认10建议设为CPU核数的8倍YARN方面关键参数包括yarn.scheduler.minimum-allocation-mb单个容器最小内存默认1GByarn.scheduler.maximum-allocation-mb单个容器最大内存建议设为节点物理内存的80%常见问题排查命令hdfs dfsadmin -report查看HDFS状态yarn application -list查看运行中的YARN应用jps检查Java进程是否正常启动我在生产环境遇到过DataNode无法注册的问题最终发现是网络MTU设置不一致导致的。这类网络问题可以通过ping -s 8972 master测试大包传输来排查。