2026/9/1 10:35:35

Hadoop 3.2.4集群部署实战:从环境配置到WordCount跑通全流程

Hadoop 3.2.4集群部署实战:从环境配置到WordCount跑通全流程 简介Hadoop 3.2.4安装包面向大数据运维与开发人员用于在Linux环境中快速部署分布式计算集群适合正在搭建实验环境或规划生产系统的团队。压缩包整体约505.9MB共包含2000个文件其中网页文档1829个可离线查阅官方组件说明样式表82个用于文档本地展示Shell脚本60个承担集群启停、数据节点管理等常用操作SQL脚本10个和XML配置9个对数据库初始化、Hadoop及生态组件参数调整具有直接参考价值其余少量属性文件、文本文件和头文件可补充查看版本细节。整套资料完整保留了Hadoop发行版的目录结构与原生配置下载解压后即可获得标准安装布局。读者可依据实际集群规模修改核心配置再配合脚本快速启动服务大幅降低环境搭建的试错成本。目前已有214人学习下载对需要离线安装包和官方文档对照使用的技术人员尤其实用。 搞大数据这行Hadoop 是个绕不开的坎。就算现在各种云原生、数据湖方案满天飞传统数仓也好离线计算也好Hadoop 依然是很多企业数据平台的底座。最近正好要用 Hadoop 3.2.4 搭一套测试环境顺便把踩过的坑和整个部署过程整理出来从下载安装包开始到配置、启动、跑通第一个 WordCount一篇讲清楚。这篇东西适合刚接触 Hadoop 的运维和开发同学也适合好久没摸 Hadoop、想快速捡起来的老手。很多人觉得装 Hadoop 就是解压个包改几个配置文件的事真上手了才发现坑不少JDK 版本不对起不来、SSH 免密没配好节点起不全、内存参数不调好 YARN 直接罢工。这些坑我在下面的内容里都会讲到直接照着做基本能一路绿灯。1. 版本选型与安装包获取为什么是 hadoop-3.2.41.1 版本选型背后的考量Hadoop 3.x 系列里3.2.4 算是一个非常微妙的版本。它不是最新的3.3.x 甚至 3.4.x 都出了但在很多企业内部3.2.4 是经过大量生产验证的稳定版本。我个人的经验是选 Hadoop 版本不能只追新还得看你配套的生态组件版本。比如 Hive、Spark、Flink 这些它们对不同 Hadoop 版本的支持力度不一样。Hive 3.1.3 对 Hadoop 3.2.x 支持得就很好Spark 3.x 也官方支持 Hadoop 3.2协调成本最低。另一个重要原因是 CDH 6.3.x 之后Cloudera 的大版本基本跑在 Hadoop 3.x 内核上而 3.2.4 在社区版里和 CDH 的兼容性测试做得最充分。对于想自己在纯社区版环境里复刻一套接近生产环境的同学来说3.2.4 是性价比很高的选择。JDK 版本上Hadoop 3.2.4 官方推荐 JDK 8而且实测下来 JDK 8 确实最稳。你非要拿 JDK 11 去跑编译和运行的时候经常会冒出一些奇奇怪怪的问题比如某些反射调用受限、SSL 相关的类找不到排查起来非常浪费时间。所以我的建议很直接老老实实用 JDK 8不要为了新而新。1.2 安装包从哪里下载安装包获取渠道优先考虑 Apache 官方镜像站。Apache 的下载页面会列出一堆镜像源国内用户选清华源或者阿里源速度会快很多直接从默认官方源下载经常只有几十 KB 每秒真心熬不住。# 清华源的地址格式通常是这样 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz下载的时候注意一下Hadoop 发行包有.tar.gz也有.src.tar.gz。别下错了src开头的是源码包我们部署只要二进制包就行。还有对应的.md5或者.sha512校验文件也顺手下载下来验证一下包是否完整虽然镜像源一般不会出问题但这个习惯养成之后遇到诡异问题能少一个排查方向。# 校验MD5确保包完整 md5sum hadoop-3.2.4.tar.gz cat hadoop-3.2.4.tar.gz.md5包大小大概是 500MB 左右下载完后先别急着解压把接下来的环境准备工作做扎实。2. 环境准备JDK、SSH 免密与系统参数2.1 JDK 8 的安装与配置在准备 JDK 的时候我踩过最大的坑是 PATH 配置问题。很多教程只让你配JAVA_HOME但 Hadoop 的一些脚本会直接调java命令如果你的PATH里没有包含 JDK 的 bin 目录启动时经常报 “command not found”。所以/etc/profile里三个东西一个都不能少export JAVA_HOME/usr/local/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar配好之后source /etc/profile然后java -version检查一下。要注意JAVA_HOME的路径不要指到/usr/bin/java这种软链接上一定要指到 JDK 实际的解压目录否则 Hadoop 的hadoop-env.sh里$JAVA_HOME会解析出问题。2.2 SSH 免密登录配置SSH 免密是很多新手最容易忽略的一步。如果你只打算在单机上跑伪分布式能不能免密影响不大因为localhost当前用户自己登录自己密码基本是自动过的。但一旦想扩展成多节点集群或者在三台虚拟机之间做完全分布式测试SSH 免密不配start-dfs.sh会在每台机器上停住等密码输入超级痛苦。# 生成密钥如果之前没有 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # 把公钥分发到各节点包括自己 ssh-copy-id $(whoami)localhost ssh-copy-id hadoop01 ssh-copy-id hadoop02配好后一定要逐个测试ssh hadoop01不需要输入密码才能算完事。这里还有一个细节不同发行版的 sshd 配置可能会影响免密是否生效比如某些系统上~/.ssh目录权限太宽松会导致不接受密钥需要chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys。2.3 系统参数与目录规划Hadoop 在跑大规模任务的时候文件句柄不够会直接抛 IOException所以/etc/security/limits.conf里最好把nofile调大。单机测试的话不调也能跑但如果是服务器环境建议直接放开* soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536目录规划方面我习惯在/data或者/opt下建一个统一目录来放数据和软件比如/opt/module放 Hadoop 安装包的解压目录/opt/data放 HDFS 的 NameNode 和 DataNode 数据。这样的好处是以后迁移或备份时路径清晰不用到处找。很多人喜欢把数据直接丢在/tmp重启一次数据全没了这是非常危险的。3. 核心配置文件详解手把手改出可用的 Hadoop3.1 解压与 hadoop-env.sh解压这一步很简单把包放到规划好的目录解压后重命名成不带版本号的目录方便以后配置脚本路径tar -zxvf hadoop-3.2.4.tar.gz -C /opt/module/ mv /opt/module/hadoop-3.2.4 /opt/module/hadoop进到/opt/module/hadoop/etc/hadoop里就能看到一堆配置文件。首先改hadoop-env.sh找到JAVA_HOME那一行把注释去掉并修改成你机器上的 JDK 路径。这里我之前提到过建议写成绝对路径不要用$(readlink -f /usr/bin/java)这种动态方式虽然也能工作但某些脚本环境下会解析失败。export JAVA_HOME/usr/local/jdk1.8.0_2023.2 HDFS 核心配置core-site.xml 与 hdfs-site.xmlcore-site.xml定义了集群的默认文件系统地址和临时目录。fs.defaultFS写的是hdfs://主机名:8020这个主机名就是你 NameNode 所在的那台机器。如果你的机器做了 hosts 映射用主机名没问题如果没有建议直接写 IP省得解析出问题。configuration property namefs.defaultFS/name valuehdfs://hadoop01:8020/value /property property namehadoop.tmp.dir/name value/opt/data/hadoop/tmp/value /property /configurationhadoop.tmp.dir这个参数很多人不注意默认值是/tmp/hadoop-${user}系统一重启就给你清空NameNode 的元数据全没了到时候你只能重新格式化之前的数据全部作废。所以我强烈建议改成自己规划的数据目录。hdfs-site.xml里最关键的是副本数dfs.replication。单机伪分布式的环境只建议配 1三节点集群可以配 2 或者 3。配太高而节点数不够DataNode 会一直处于 under-replicated 状态看着很吓人其实只是副本数达不到预期而已。configuration property namedfs.replication/name value2/value /property property namedfs.namenode.name.dir/name valuefile:///opt/data/hadoop/namenode/value /property property namedfs.datanode.data.dir/name valuefile:///opt/data/hadoop/datanode/value /property /configuration3.3 YARN 与 MapReduce 配置yarn-site.xml里基本要改的就两个一个是yarn.nodemanager.aux-services这个是 NodeManager 跑 MapReduce 任务时必须的辅助服务不配根本跑不了 MapReduce 作业另一个是yarn.resourcemanager.hostname指定 ResourceManager 在哪个节点。单机测试的话主机名指向自己就行。configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.resourcemanager.hostname/name valuehadoop01/value /property /configurationmapred-site.xml这个文件在 Hadoop 3.x 里默认是不存在的需要从模板复制过来再修改cp mapred-site.xml.template mapred-site.xml它只需要配置一个mapreduce.framework.name为yarn意思是 MapReduce 任务跑在 YARN 上。如果你不配任务默认跑在 local 模式记录都写在本地文件系统根本不会走集群。configuration property namemapreduce.framework.name/name valueyarn/value /property /configuration3.4 workers 文件与格式化文件系统在 Hadoop 3.x 中原来 2.x 的slaves文件改名成了workers。在这个文件里写入所有 DataNode 节点的主机名每行一个。单机伪分布就写自己的主机名多节点就写多行。配置完成后第一次启动前必须执行格式化操作初始化 NameNode 的元数据目录。这个命令只需要执行一次以后除非换机器或者想重新初始化否则不要重复执行。重复执行会导致 NameNode 的 namespace ID 和 DataNode 的不一致集群起不来。hdfs namenode -format看到输出末尾有successfully formatted字样说明初始化成功。格式化完成后检查一下/opt/data/hadoop/namenode目录里有没有current目录如果有说明元数据目录已经就绪。4. 启动服务与验证核心功能4.1 启动 HDFS 与 YARN启动之前先确认一下当前机器的 hosts 文件里有没有把自己映射到局域网 IP。很多人在测试环境里不配 hosts直接用 localhost单机没问题但多节点通信全靠主机名解析不配置之后会有奇怪的问题。cat /etc/hosts EOF 192.168.1.101 hadoop01 192.168.1.102 hadoop02 192.168.1.103 hadoop03 EOF然后进入 Hadoop 的 sbin 目录执行启动脚本start-dfs.sh start-yarn.sh如果你JAVA_HOME没配好、SSH 免密不过关脚本执行时会报错或者卡住。启动完成后用jps命令查看 Java 进程单机模式应该能看到这些进程NameNodeDataNodeSecondaryNameNodeResourceManagerNodeManager少了哪个进程就说明哪一块配置有问题排查方向就很明确了。4.2 Web UI 与常见资源地址Hadoop 3.x 的 Web 端口跟 2.x 不一样了2.x 时代 NameNode 的 50070 端口已经废弃3.x 改成了 9870YARN 的 ResourceManager 还是 8088但 Timeline Server 变成了 8188。浏览器访问http://hadoop01:9870能看到 HDFS 的文件系统状态访问http://hadoop01:8088能看到 YARN 的节点列表和正在跑的作业。如果你发现端口不通第一反应应该是检查防火墙systemctl stop firewalld systemctl disable firewalld测试环境直接关防火墙最省事生产环境则建议只放行对应端口。4.3 跑通第一个 WordCount 作业启动完成后可以先往 HDFS 里放一个测试文件然后跑官方自带的 WordCount 示例用来验证整个链路是否真的通。# 建目录 hdfs dfs -mkdir -p /user/root/input # 放测试文件 echo hello hadoop hello world test.txt hdfs dfs -put test.txt /user/root/input/ # 跑示例程序 hadoop jar /opt/module/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /user/root/input /user/root/output # 查看结果 hdfs dfs -cat /user/root/output/part-r-00000如果输出能看到hadoop 1、hello 2、world 1这样的统计结果说明整个 Hadoop 集群已经完全可用了。这个作业本身不难但如果 YARN 配置有问题比如aux-services没配好就会一直卡在ACCEPTED状态或者直接报No such method之类的异常这时候就要回到配置文件排查。5. 高频踩坑与排查技巧5.1 NameNode 起不来元数据目录权限与重复格式化NameNode 起不来最常见的两个原因第一个是hadoop.tmp.dir指向的目录没有写权限。你如果用 root 安装可能没有这个问题但用普通用户装的时候目录权限不足会让 NameNode 报Permission denied。第二个原因是重复格式化。每次格式化都会生成新的集群 ID但 DataNode 的存储目录里已经记录着旧的集群 ID两者对不上DataNode 就注册不上来。解决办法是格式化之前先把namenode和datanode目录下的数据全部清空再重新格式化rm -rf /opt/data/hadoop/namenode/* rm -rf /opt/data/hadoop/datanode/* hdfs namenode -format这个操作会丢失已经存在 HDFS 里的所有数据生产环境务必先确认数据已经做好备份。5.2 DataNode 起不来内存与磁盘容量如果你给虚拟机分配的内存太少DataNode 和 NameNode 可能因为堆内存分配不足而反复重启。Hadoop 的脚本默认会读取/etc/hadoop/hadoop-env.sh里的HADOOP_HEAPSIZE默认值一般是 1000MB。单机测试的话可以调小一点export HADOOP_HEAPSIZE512 export HADOOP_NAMENODE_OPTS-Xmx512m export HADOOP_DATANODE_OPTS-Xmx512m磁盘容量也要注意DataNode 目录所在磁盘满的话节点会直接挂掉。5.3 本地库 warning 与跨平台兼容启动 Hadoop 时经常会看到一行警告WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable这行警告的意思是 Hadoop 没有加载到本地 C 库。在 3.2.4 版本中它主要是影响压缩解压性能比如用 Snappy、LZ4 这些压缩格式的时候性能会打折扣但不影响正常使用。很多刚上手的人看到这个 warning 就慌了其实它可以先放着不管等后面真正需要调优了再解决。5.4 YARN 作业卡住或失败内存配置与 aux-servicesWordCount 一直卡在 RUNNING 状态大概率是 YARN 的内存配置不满足 ApplicationMaster 的要求。YARN 默认每个容器分配的内存是 1024MB但测试机器内存不够的时候容器一直申请不到资源。这时候在yarn-site.xml里显式调小property nameyarn.nodemanager.resource.memory-mb/name value4096/value /property property nameyarn.scheduler.minimum-allocation-mb/name value512/value /property另外mapreduce_shuffle这个 aux-service 没配的话Map 和 Reduce 之间传输数据会失败报错基本就是Shuffle connection closed。这个问题排查起来非常隐蔽因为 YARN 本身看起来是正常的只有跑 MapReduce 任务时才会暴露。6. 伪分布式升级到完全分布式6.1 从单机伪分布式到多节点集群单机伪分布式能通只能说明你的配置基本正确离真正的分布式集群还有几步路。把单机扩展成多节点需要做的事情其实不多但每一步都不能漏第一确保每台节点都装好 JDK 8第二每台节点都下载好相同的 Hadoop 安装包并解压到相同路径第三在 NameNode 上配好到所有 DataNode 的 SSH 免密第四workers文件里填上所有 DataNode 的主机名第五把core-site.xml、hdfs-site.xml、yarn-site.xml这些配置文件分发到所有节点的对应目录。分发配置简单的办法是 scp如果不想手动敲写一个简单的 for 循环脚本也可以for host in hadoop02 hadoop03; do scp -r /opt/module/hadoop/etc/hadoop/* $host:/opt/module/hadoop/etc/hadoop/ done6.2 集群规划建议我个人比较推荐的最小集群是三台一台跑 NameNode ResourceManager另外两台跑 DataNode NodeManager。如果你控制一台机器没法完整模拟集群间的通信和资源调度行为尤其在高可用测试的时候单机更加是捉襟见肘。如果是真正想学 HDFS 高可用就得准备至少三台机器跑 ZooKeeper再加两台机器做 NameNode 的 Active/Standby 切换。这部分内容相对进阶一点但把 3.2.4 的单机部署跑熟之后再过渡不会有太大障碍。6.3 重启集群的注意事项Hadoop 3.2.4 开发测试过程中经常需要重启集群。很多人在频繁重启的过程里把集群搞坏基本都是因为手贱多敲了一次hdfs namenode -format。格式化操作在集群初始化时只需要做一次之后不管你怎么重启都只需要执行start-dfs.sh和start-yarn.sh就行。如果实在记不住哪个节点是 NameNode可以用hdfs getconf -namenodes命令查看当前集群的 NameNode 列表不要盲目去格式化任何节点。我用这个命令排查过好多次因为分不清节点角色导致的启动失败问题很实用。最后再分享一个我自己的习惯每次装完 Hadoop 之后我会把core-site.xml、hdfs-site.xml、yarn-site.xml这三个文件的所有修改项整理到一份独立的笔记里连同下载链接和踩坑记录放一起。下次要换机器或者重新部署的时候不需要再去查一堆博客和文档直接照着自己的笔记就能在十几分钟内把环境搭好。这个习惯看起来不起眼但在你手上同时管理几套集群的时候能省下大量抓头发的时间。本文还有配套的精品资源点击获取