从单机到四节点集群:我的Hadoop 3.3.5与Spark 3.3.2 on YARN环境搭建全记录(含虚拟机克隆与互信配置)
从单机到四节点集群Hadoop 3.3.5与Spark 3.3.2 on YARN环境搭建实战当数据规模从GB级跃升至TB级单机处理能力逐渐捉襟见肘。去年在电商平台用户行为分析项目中我亲历了单机Spark崩溃的窘境——这促使我系统掌握了分布式集群搭建技术。本文将完整呈现从零构建四节点集群的全过程重点解析那些官方文档未曾明说的生存技巧。1. 基础环境准备单机到集群的基石选择CentOS 8.5作为操作系统并非偶然。相比Ubuntu对桌面环境的侧重CentOS在服务器领域的稳定性已得到时间验证。安装时建议勾选Server with GUI选项这为后续的Web界面监控保留了可能性。JDK 17的安装陷阱# 常见错误直接使用yum安装的OpenJDK可能缺少JCE组件 wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm rpm -ivh jdk-17_linux-x64_bpm --prefix/opt/java17环境变量配置需要特别注意JVM参数export JAVA_HOME/opt/java17 export PATH$PATH:$JAVA_HOME/bin export JAVA_OPTS--add-opens java.base/java.langALL-UNNAMED提示验证安装时java -version显示版本还不够需执行jconsole确认JMX功能正常2. 集群网络架构虚拟机克隆与SSH互信使用VMware的完整克隆功能时务必先执行以下操作清理原始虚拟机的MAC地址记录删除/etc/udev/rules.d/70-persistent-net.rules停止NetworkManager服务SSH免密登录的进阶配置# 生成密钥时指定更强加密算法 ssh-keygen -t ed25519 -a 100 # 修改sshd_config提高安全性 echo PasswordAuthentication no /etc/ssh/sshd_config主机名与IP映射的推荐方案主机角色HostnameIP地址推荐配置Masterhadoop01192.168.1.108GB内存Slave1hadoop02192.168.1.114GB内存Slave2hadoop03192.168.1.124GB内存Slave4hadoop04192.168.1.134GB内存3. Hadoop 3.3.5集群部署实战Hadoop配置文件的核心逻辑core-site.xml定义文件系统入口和临时目录hdfs-site.xml控制数据块复制策略yarn-site.xml配置资源调度参数关键配置示例!-- hdfs-site.xml -- property namedfs.blocksize/name value256m/value !-- 现代硬件建议值 -- /property !-- yarn-site.xml -- property nameyarn.nodemanager.resource.memory-mb/name value4096/value !-- 不超过物理内存80% -- /property启动顺序的注意事项首次必须格式化NameNodehdfs namenode -format先启动HDFSstart-dfs.sh再启动YARNstart-yarn.sh最后启动JobHistorymr-jobhistory-daemon.sh start historyserver4. Spark 3.3.2 on YARN集成策略Spark与Hadoop版本兼容性矩阵Spark版本Hadoop 3.3.xHadoop 3.2.xHadoop 2.7.x3.3.x完全支持兼容模式需要额外配置3.2.x需要调整完全支持兼容模式3.1.x不推荐需要调整完全支持Spark on YARN的两种模式对比特性Cluster模式Client模式Driver位置在YARN集群中运行在提交任务的客户端运行日志获取需要通过YARN Web UI查看直接输出到客户端控制台适合场景生产环境长期运行任务开发调试阶段资源释放任务结束自动释放需要手动终止Driver进程实战案例运行分布式圆周率计算# Cluster模式提交示例 spark-submit \ --master yarn \ --deploy-mode cluster \ --num-executors 3 \ --executor-memory 2G \ --class org.apache.spark.examples.SparkPi \ /opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar \ 10005. 集群调优与故障排查性能调优三要素内存分配比例参考值YARN容器物理内存的80%Spark ExecutorYARN容器的90%Executor堆外内存Executor内存的10%并行度计算公式理想分区数 max(集群总核数 × 2, HDFS块数 × 3)数据本地化策略优先选择PROCESS_LOCAL级别对热数据启用RDD.persist(StorageLevel.MEMORY_ONLY_SER)常见故障处理流程graph TD A[任务失败] -- B{查看YARN日志} B --|OOM错误| C[调整executor内存] B --|网络超时| D[检查防火墙设置] B --|数据丢失| E[验证HDFS副本数] C -- F[增加--executor-memory参数] D -- G[调整spark.network.timeout值] E -- H[检查DataNode状态]6. 生产环境增强方案安全加固 checklist[ ] 启用Kerberos认证[ ] 配置HDFS透明加密[ ] 设置YARN容器隔离[ ] 启用Spark事件日志审计监控体系搭建使用Prometheus Grafana监控Hadoop指标通过JMXExporter采集Spark指标启用MetricsSystem关键告警阈值DataNode磁盘使用率 85%NodeManager可用内存 1GB待处理Application 5个在最近一次618大促期间这套四节点集群平稳处理了超过2TB的用户点击流数据。特别提醒当HDFS使用量超过70%时务必提前扩展存储节点我们曾因忽视这个预警导致过长达6小时的服务降级。