简介Hadoop 3.2.4安装包面向需要搭建大数据基础环境的学习者与开发者适合离线部署、版本验证及教学实训等场景解决官方下载缓慢或集群安装准备繁琐的问题。压缩包为zip格式整体约505.9MB文件总数达2000个其中以1829个HTML文档与82个CSS样式文件为主便于本地查阅官方说明60个Shell脚本、10个SQL文件及XML、properties等配置样例则覆盖环境启动、配置修改和基础SQL操作等常见任务。目前已有225人学习下载包内目录结构完整包含文档、脚本、配置示例与少量C头文件基本对应Hadoop发行版的典型组织方式。借助这份安装包可快速获得完整Hadoop 3.2.4版本内容减少外网下载时间也能对照HTML文档和Shell脚本梳理组件配置与启动流程适合作为离线环境搭建和版本研究的参考资料。对于需要离线安装或反复重装环境的团队省去外部依赖下载环节后整套部署流程会显得更加可控和高效。 在离线内网和等保环境里hadoop-3.2.4安装包几乎是绕不开的一个版本它兼容 JDK 1.8生态组件基本都能对上网上能搜到的踩坑文档也最全。很多人第一件事就是找这个安装包但装完才发现问题不在下载而在环境准备和那四个 XML 配置。这篇就按一线部署的顺序把这套安装过程拆开讲清楚新手能照着敲老手可以跳过基础步骤直接看参数和排错。2. 装 Hadoop 3.2.4 之前环境检查与版本选型的三项准备2.1 先看 JDK 版本Hadoop 3.2.4 与 JDK 1.8 的兼容边界Hadoop 本身是用 Java 写的安装前第一件事不是解压而是确认 JDK。Hadoop 3.2.4 官方对 Java 的要求是 8 或 11但生产环境里跑得最稳的基本都是 JDK 1.8。很多发行版自带的是 OpenJDK版本可能是 11 甚至 17直接拿来启动 NameNode 大概率会在日志里看到各种类加载异常。先执行以下命令确认当前 Java 环境java -version echo $JAVA_HOME which java输出里如果没有JAVA_HOME或者版本不是 1.8就需要先装 JDK 1.8 并配置环境变量。常见做法是在/etc/profile里追加export JAVA_HOME/opt/jdk1.8.0_202 export PATH$JAVA_HOME/bin:$PATH注意Hadoop 的启动脚本会直接读取JAVA_HOME如果你只在终端里临时 export重启机器后就会失效。建议在/etc/profile和hadoop-env.sh两处都设置后面第 3 章会再强调一次。另一个容易忽略的点是jps命令。它来自 JDK不在 Hadoop 安装包内。如果jps提示找不到命令说明 JDK 的 bin 目录没进 PATH后续检查进程时就会很被动。2.2 规划安装用户、目录与三张表hosts / 免密 / 防火墙Hadoop 集群不能用 root 跑这是分布式组件的通用惯例。用 root 启动 DataNode 虽然能跑起来但后续做权限管理、日志清理、kerberos 接入时都会出问题。我一般会建一个专用用户useradd hadoop mkdir -p /opt/hadoop-3.2.4 mkdir -p /data/hadoop/tmp mkdir -p /data/hadoop/dfs/name mkdir -p /data/hadoop/dfs/data chown -R hadoop:hadoop /opt/hadoop-3.2.4 /data/hadoop目录规划的核心原则是程序目录和数据目录分离。程序放/opt数据放/data这样的独立分区避免系统盘被 HDFS 的块数据写满。伪分布式可能感觉不明显但到了集群阶段NameNode 元数据和 DataNode 数据混在系统盘翻车是迟早的事。接下来是/etc/hosts和 SSH 免密。机器少的时候靠 IP 也能跑但 HDFS 内部会做主机名到 IP 的解析建议把主机名写进 hosts192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3SSH 免密是分布式安装的硬条件start-dfs.sh 启动时需要通过 SSH 到各节点执行命令。生成密钥并分发ssh-keygen -t rsa -b 4096 -P -f ~/.ssh/id_rsa ssh-copy-id hadoopnode1 ssh-copy-id hadoopnode2 ssh-copy-id hadoopnode3最后是防火墙。很多新手在虚拟机里装好 HadoopWeb UI 却打不开最后发现是 firewalld 没放行端口。要么直接关闭要么放行 Hadoop 相关端口。systemctl stop firewalld systemctl disable firewalld2.3 下载校验从官网与镜像站拿到安装包后先做这两步hadoop-3.2.4 安装包的下载渠道主要是 Apache 官方发布页和各高校的开源镜像站。下载页面里通常会有几个文件需要区分清楚hadoop-3.2.4.tar.gz是二进制发行包直接用来部署hadoop-3.2.4-src.tar.gz是源码包只有需要重新编译时才下载另外还有一个.sha512后缀的校验文件。下载完成后第一步必须校验完整性。压缩包在传输过程中可能损坏不校验直接解压经常在启动时报各种奇怪的类找不到错误这种情况下排查半天结果往往是安装包本身坏了。sha512sum hadoop-3.2.4.tar.gz cat hadoop-3.2.4.tar.gz.sha512两边输出的哈希值要完全一致。这一步不能偷懒血泪经验里有一半的“NameNode 起不来”问题都能在这道工序上提前拦截。第二步是检查解压后的目录结构。执行tar -xzf hadoop-3.2.4.tar.gz -C /opt ls -l /opt/hadoop-3.2.4正常会看到bin、sbin、etc、share、lib这几个目录。如果目录名不是你期望的主机名目录说明解压时没指定-C文件被散落在当前目录了这时候重新整理路径就行不用把安装包删了重下。3. 最小安装路径单机伪分布式跑通 hadoop-3.2.43.1 解压安装与目录规划环境变量与 bin 目录单机伪分布式是理解 Hadoop 工作原理最直接的方式也是后续集群部署的底子。把安装包解压到规划好的路径后建议做一个软链接让当前版本指向稳定的路径这样以后升级 3.2.5、3.3.x 时不用改一堆配置。ln -s /opt/hadoop-3.2.4 /usr/local/hadoop echo export HADOOP_HOME/usr/local/hadoop /etc/profile echo export PATH$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH /etc/profile source /etc/profile接着修改hadoop-env.sh显式指定 JAVA_HOME。这个文件在$HADOOP_HOME/etc/hadoop/目录下默认是空注释状态Hadoop 启动时会尝试自动探测 JDK 路径但自动探测在很多精简系统上不准。cd $HADOOP_HOME/etc/hadoop echo export JAVA_HOME/opt/jdk1.8.0_202 hadoop-env.sh echo export HADOOP_PID_DIR/data/hadoop/pids hadoop-env.sh mkdir -p /data/hadoop/pidsHADOOP_PID_DIR指定进程 PID 文件的存放位置。默认放在/tmp下系统清理临时目录时PID 文件被清掉后续执行 stop-dfs.sh 会找不到进程导致重复进程堆积。这个参数提前设好集群阶段能省很多麻烦。3.2 伪分布式核心配置4 个 XML 先改哪几项单机伪分布式不需要把四个 XML 全部写满只改最小必要项就能把 HDFS 和 YARN 跑起来。第一个是core-site.xmlconfiguration property namefs.defaultFS/name valuehdfs://node1:9820/value /property property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property /configurationfs.defaultFS是 HDFS 的入口地址这里填主机名加端口。注意 Hadoop 3.x 的 NameNode RPC 默认端口是 9820不是 2.x 时代的 8020照着 2.x 文档填 8020 是常见的坑。hadoop.tmp.dir是所有中间文件的根目录不设置的话默认落在/tmp/hadoop-${user.name}重启机器全部丢失。接着是hdfs-site.xml伪分布式下核心是告诉 DataNode 在哪个目录落盘以及把副本数调成 1configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/data/hadoop/dfs/name/value /property property namedfs.datanode.data.dir/name value/data/hadoop/dfs/data/value /property /configuration伪分布式只有一个节点副本数写 3 是纯浪费还会让 DataNode 在启动时报管道错误。dfs.namenode.name.dir和dfs.datanode.data.dir分别指定元数据和块数据的落盘位置这两个目录必须手动创建如果目录不存在格式化时虽然不报错但启动时会发现找不到路径直接退出。3.3 免密登录与本机互信格式化之前必须要做的事伪分布式虽然没有跨节点但 start-dfs.sh 启动时依然会尝试 SSH 到本机执行命令。如果不配置本机免密启动脚本会卡在提示输入密码的地方或者直接失败退出。先确认能否免密登录本机ssh node1 hostname如果能直接返回主机名说明本机互信已经建立。方法很简单cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys这里有个值得注意的细节执行这条命令前要确认是在 hadoop 用户的家目录下操作。很多人在 root 下生成了密钥然后 su 到 hadoop 用户SSH 免密失效卡在这一步半天查不出原因。免密没问题之后第一次启动前还需要格式化 NameNode。这一步是 Hadoop 新手的第一个“玄学”操作格式化不是随便点一下它会清空 NameNode 元数据目录并生成新的集群 ID。hdfs namenode -format看到输出里有Storage directory /data/hadoop/dfs/name has been successfully formatted才算成功。格式化完成后检查一下元数据目录如果current目录下生成了VERSION文件说明格式化成功。4. 集群部署时的关键配置core-site.xml / hdfs-site.xml / yarn-site.xml 参数拆解4.1 core-site.xmlfs.defaultFS 与临时目录的坑伪分布式跑通之后做集群部署时core-site.xml 要填的内容会更多。fs.defaultFS决定了客户端访问 HDFS 时的默认地址集群里所有节点必须保持一致否则客户端在某台机器上拿到的是别的 NameNode 地址数据读写就会找错门。hadoop.tmp.dir也要重新审视。默认情况下HDFS 的元数据和日志都会在建在这个临时目录下如果这个目录在系统盘根分区很容易被占满。我一般会在数据盘单独建一个/data/hadoop/tmp并确保权限归属是 hadoop 用户。configuration property namefs.defaultFS/name valuehdfs://node1:9820/value /property property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property property namefs.trash.interval/name value1440/value /property property nameha.zookeeper.quorum/name valuenode1:2181,node2:2181,node3:2181/value /property /configurationfs.trash.interval是回收站保留时间单位是分钟。设置成 1440 表示删除的文件在回收站里保留一天这样可以避免误删文件后无法找回的尴尬。这个参数容易被忽略但生产环境里真的很实用相当于给了自己一个“后悔药”。ha.zookeeper.quorum是给 HA 集群预留的配置单机或非 HA 集群可以不填。但如果打算后续做 NameNode 高可用建议在一开始就把 ZooKeeper 的地址写进去后续切换配置时可以少改一个文件。4.2 hdfs-site.xml副本数、块大小与 NameNode 目录隔离集群模式下hdfs-site.xml 是配置量最大的文件。dfs.replication在 3 节点集群里可以保持默认的 3这样任意一个节点宕机数据块都有两个副本可以恢复。但如果磁盘紧张可以先改成 2等数据量上来之后再调回 3副本数在运行时通过命令动态调整并不需要重启集群这一点比很多参数都要灵活。NameNode 的元数据目录建议配置多个用逗号分隔。两个目录最好落在不同的物理磁盘上这样一块磁盘坏了另一块还有完整的元数据备份。DataNode 的数据目录同样可以配置多个磁盘让 HDFS 自动做块分布。configuration property namedfs.namenode.name.dir/name value/data/hadoop/dfs/name,/backup/hadoop/namenode/value /property property namedfs.datanode.data.dir/name value/data/hadoop/dfs/data,/data2/hadoop/dfs/data/value /property property namedfs.namenode.handler.count/name value100/value /property property namedfs.blocksize/name value134217728/value /property /configurationdfs.namenode.handler.count是 NameNode 处理请求的线程数。默认值是 10对密集的元数据访问来说偏低。这个值一般是按集群规模估算的集群节点数在 10 台以内时设为 100 就能撑住大多数场景。dfs.blocksize默认 128MB即 134217728 字节除非业务有特殊需求比如小文件特别多否则不建议动它。调大块大小可以减少元数据数量但会让小文件浪费更多磁盘空间。4.3 yarn-site.xml资源调度与容器内存的配比YARN 的资源管理核心在yarn-site.xml这里面的参数直接决定集群能同时跑多少个任务。最容易踩坑的是内存配置NodeManager 默认认为物理机器有 8GB 可用内存如果机器实际是 64GB任务一多资源利用率就会很低。反之如果机器只有 8GB 内存而配置了 16GBNodeManager 起不来日志里直接报虚拟机内存不足。常见的一个配置组合是configuration property nameyarn.resourcemanager.hostname/name valuenode1/value /property property nameyarn.nodemanager.resource.memory-mb/name value16384/value /property property nameyarn.scheduler.minimum-allocation-mb/name value1024/value /property property nameyarn.scheduler.maximum-allocation-mb/name value8192/value /property property nameyarn.nodemanager.vmem-check-enabled/name valuefalse/value /property /configurationyarn.nodemanager.resource.memory-mb是每台机器的总可用内存要留出操作系统和 Hadoop 自身进程的内存通常设置为物理内存的 70%-80%。yarn.scheduler.minimum-allocation-mb是单个容器的最小内存申请单位默认 1024MB一般不需要改。maximum-allocation-mb是单容器上限如果跑 Spark 或 Flink这个值要足够大否则大任务申请不到足够的 Executor 内存。yarn.nodemanager.vmem-check-enabled是一个很隐蔽的坑。YARN 默认会做虚拟内存检查某些 JVM 应用会申请大量虚拟内存实际物理内存占用不高但检查一开容器被误杀任务跑一会就失败。生产环境里很多人选择把它关掉或用yarn.nodemanager.vmem-pmem-ratio调整比例新手建议先关掉跑通了再按压力情况逐步拧紧。4.4 mapred-site.xmlMapReduce 框架与历史服务的联动到了 Hadoop 3.xmapred-site.xml的配置量已经很少了。核心配置是告诉 MapReduce 框架运行在 YARN 上configuration property namemapreduce.framework.name/name valueyarn/value /property property namemapreduce.jobhistory.address/name valuenode1:10020/value /property property namemapreduce.jobhistory.webapp.address/name valuenode1:19888/value /property /configurationmapreduce.jobhistory.address是 JobHistory Server 的 RPC 地址19888 是它的 Web 页面地址。如果这两个不配置作业跑完后去 YARN 的 Web UI 上看不到历史任务记录排查问题时会很痛苦。各种参数汇总如下方便部署时对照文件名参数推荐值或方向说明core-site.xmlfs.defaultFShdfs://namenode主机名:9820HDFS 入口地址core-site.xmlfs.trash.interval1440回收站保留分钟数hdfs-site.xmldfs.replication2 / 3数据副本系数hdfs-site.xmldfs.namenode.handler.count100NameNode 并发线程数yarn-site.xmlyarn.nodemanager.resource.memory-mb机器内存 70%-80%单节点可用内存yarn-site.xmlyarn.scheduler.maximum-allocation-mb视任务而定单个容器最大内存mapred-site.xmlmapreduce.jobhistory.addressnode1:10020历史任务服务器5. 启动验证与排错Hadoop 3.2.4 安装后最常见的 5 个坑5.1 现象一NameNode 启动即退出日志里只有 NullPointerException启动start-dfs.sh后用jps检查发现没有 NameNode去$HADOOP_HOME/logs/目录下看日志看到类似java.lang.NullPointerException或Could not find or load main class org.apache.hadoop.hdfs.server.namenode.NameNode的输出。原因八成是hadoop-env.sh里的JAVA_HOME没有真正指向 JDK 路径或者 PATH 里的 java 指向的不是同一个 JDK。Hadoop 的启动脚本不会主动读取系统的JAVA_HOME它优先找hadoop-env.sh中的设置。解决打开$HADOOP_HOME/etc/hadoop/hadoop-env.sh确认JAVA_HOME那一行是被设置的而不是注释状态。不要写export JAVA_HOME$(which java)这种间接引用直接写死路径export JAVA_HOME/opt/jdk1.8.0_202修改后执行stop-all.sh清理掉半启动的进程再重新执行start-dfs.sh这是这类问题的标准起步操作。5.2 现象二datanode 起不来报 incompatible namespaceIDDataNode 进程反复退出日志里有类似compatible with namespaceID或Storage directory ... is already formatted的报错。原因伪分布式模式下很多人格式化 NameNode 不止一次或者改了dfs.namenode.name.dir的路径后没有清理旧数据目录。DataNode 启动时检测到dfs.datanode.data.dir里的 namespaceID 和 NameNode 元数据里的不一致拒绝启动。解决先把整个集群停下来清理所有节点上的数据目录再统一格式化stop-all.sh rm -rf /data/hadoop/tmp /data/hadoop/dfs/name /data/hadoop/dfs/data rm -rf /backup/hadoop/namenode hdfs namenode -format start-dfs.sh注意格式化之前必须确认没有在跑的 DataNode 和 NameNode 进程否则一边格式化一边写入元数据会被写花。这一步我每次都提醒自己“先停干净再动手”。5.3 现象三9870 端口打不开Web UI 无法访问NameNode 进程在jps能看到进程但浏览器访问http://node1:9870超时。原因要么防火墙把端口挡了要么fs.defaultFS配置的端口和实际监听端口不一致。Hadoop 3.x 的 NameNode Web UI 端口是 9870如果你在文档里看到 50070那是 Hadoop 2.x 的写法照搬必翻车。解决先确认监听端口是否存在。netstat -anp | grep 9870没输出就是端口没监听检查 core-site.xml 里的fs.defaultFS端口号。端口监听中就检查防火墙firewall-cmd --list-all firewall-cmd --add-port9870/tcp --permanent firewall-cmd --reload这里端口还涉及 DataNode 的 9864、YARN ResourceManager 的 8088建议在防火墙上一起放行或统一关闭防火墙避免逐个排查。5.4 现象四格式化后发现数据目录里多出陌生目录格式化之后去/data/hadoop/dfs/name下面看发现除了current之外还有previous.tmp或image/fsimage_*这些不认识的文件担心是不是格式化出了问题。原因这是 Hadoop 的 fsimage 合并机制产生的正常文件。NameNode 会把最近一次检查点的数据放在previous目录再次格式化时才会清理。只要current/VERSION文件里的 namespaceID 是新的且和 DataNode 一致就不用管这些目录。解决执行hdfs dfsadmin -report和hdfs dfsadmin -safemode get只要 Storage 信息能正常打印出来集群实际是健康的不用为了“看着干净”再去动数据目录。随便删previous目录反而可能破坏 NameNode 的恢复能力。5.5 现象五NodeManager 起不来容器内存超过物理内存启动start-yarn.sh后NodeManager 一直在跑但任务提交就失败logs目录里的日志报Container [...] exceeds physical memory limits或NodeManager is running on the wrong node。原因物理内存或者虚拟内存超限。出现这种情况要么是yarn.nodemanager.resource.memory-mb配置值超过机器实际可用内存要么是虚拟内存检查误判。解决先执行free -g查看物理内存总量再对比yarn-site.xml中的yarn.nodemanager.resource.memory-mb。如果配置没问题就在 yarn-site.xml 里临时关闭虚拟内存检查property nameyarn.nodemanager.vmem-check-enabled/name valuefalse/value /propertyvmem-check-enabled这只“黑匣子”很多运维第一次碰到的时候都怀疑是 JVM 参数的问题其实根源在 YARN 的虚拟内存估算逻辑上。调整后重启 YARN 集群任务一般就能恢复正常。6. 安装完成之后三项验证与一个顺手做的事集群启动完之后不要急着提交业务作业先做三项基础验证把安装质量兜底。第一步是看进程是否齐全。执行jps在 NameNode 节点上应该能看到NameNode、SecondaryNameNode、ResourceManager在 DataNode 节点上应该看到DataNode、NodeManager。缺哪个就回到第 5 章对应的问题里排查。第二步是检查 HDFS 的存储状态hdfs dfsadmin -report输出里Live datanodes的数量要和实际节点数一致Configured Capacity对应的总容量符合预期。如果 Live 节点数量不对大概率是 DataNode 数据目录的 namespaceID 不一致回到 5.2 处理。第三步是跑一个自带的示例作业验证计算链路。Hadoop 安装包自带 mapreduce 示例最经典的是一个圆周率计算任务hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar pi 5 100能正常输出结果说明 HDFS 读写、YARN 调度、MapReduce 执行这条链路是通的。如果卡在 WAIT 状态观察一段时间看容器能否被分配分配不了就回到 5.5 调整内存参数。验证通过后顺手要做的一件事是调整日志级别并确认日志目录。Hadoop 的默认日志级别是 INFO调试时不够细排查问题时要临时切到 DEBUGhdfs dfsadmin -safemode leave这个命令常用于集群刚启动且处于安全模式时释放写入权限也经常被用来测试一条链路是否健康。配合tail -f $HADOOP_HOME/logs/hadoop-hadoop-namenode-*.log动态查看日志能很快定位问题。我形成的一个习惯是每次装完 Hadoop 3.2.4都会在/etc/profile里补一次环境变量、在hadoop-env.sh里写死 JDK 路径、然后建一个check.sh脚本一次性输出 jps、磁盘空间、内存使用和 9870/8088 端口监听状态。这套三步自查的动作后来帮我省下了不少半夜排查集群问题的时间。希望帮到你。本文还有配套的精品资源点击获取