
简介Hadoop 3.2.4 安装包提供 Apache Hadoop 3.2.4 的完整程序与配套资源面向大数据初学者、集群运维人员以及网络受限环境下的部署需求。压缩包为 zip 格式整体约 505.9MB包含 2000 个文件。其中 1829 个 HTML 文档与 82 个 CSS 文件构成了丰富的界面与说明页面可脱离在线文档使用60 个 Shell 脚本主要用于服务启停与环境初始化10 个 SQL 脚本可用于数据表初始化或查询另有 XML、Properties、JS 等文件支撑核心配置与页面交互。已有 220 人学习/下载适合作为学习 Hadoop 组件原理的离线素材。获取后解压即可获得完整程序参考包内脚本与配置示例调整 nameNode、dataNode 等参数可快速搭建单机或伪分布式环境为后续大数据开发打好基础。1. 为什么还要折腾 hadoop-3.2.4 安装包生产环境里的真实答案先说结论直到现在很多线上集群跑的依然是 hadoop-3.2.4不是因为团队懒而是因为 3.2.x 是 JDK 1.8 与 Spark 2.4/3.x 兼容性最稳的分水岭。我见过不止一个团队把集群升到 3.3.x 后再降回来理由大同小异——新的 EC 纠删码和 Router 框架用不上倒是各组件之间的依赖冲突先冒出来了。如果你手里的任务是「在内网搭一套能跑的 Hadoop 测试环境」或「给生产集群做个版本兜底」那 hadoop-3.2.4 安装包就是最不容易翻车的那张牌。这篇文章不打算复读官方文档我会把「下载→校验→规划目录→改配置→起服务→验证」整条链路的关键动作拆开讲清楚每一步背后的考虑和常见翻车点。2. 先搞定安装包镜像站选择、校验与本地文件规划2.1 为什么不要用官网直链下载 hadoop-3.2.4官网的 Apache Download 页面会把你引导到某个随机镜像这本身没问题但问题出在两点一是部分镜像会清理老版本文件今天能下的链接下个月可能 404二是内网环境经常根本访问不到国外镜像。所以我的习惯是先打开清华 TUNA 或阿里云镜像站直接进apache/hadoop/common/hadoop-3.2.4/目录把hadoop-3.2.4.tar.gz和配套的hadoop-3.2.4.tar.gz.sha512一起拉下来。这里有一个很多人忽略的细节tar.gz 的校验文件官方同时提供.sha512和.mds两种但.sha512在 Linux 下用起来最省事不需要额外装工具。如果你在内网离线环境没有外部镜像可用那就需要找一台能出网的跳板机把安装包和 JDK 的 RPM 都下载好再通过scp传进内网。常见做法是把两者放到一个固定的软件仓库目录比如/data/software/后续所有机器都从这个目录分发。不要直接把安装包扔在/root/下因为 Hadoop 相关进程往往会用hdfs用户启动你需要保证这个用户对安装目录有读权限。2.2 用 sha512 校验安装包别跳过这 30 秒很多初学者会跳过校验直接解压等到集群跑起来后偶尔出现莫名其妙的 CRC 错误才回头找原因。正确的下载流程是# 下载安装包和校验文件 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz.sha512 # 校验输出 OK 表示文件完整 sha512sum -c hadoop-3.2.4.tar.gz.sha512参数说明sha512sum -c会读取.sha512文件里记录的哈希值和你刚下载的 tar.gz 做比对。返回OK就说明文件在传输过程中没有被截断或被篡改。如果返回FAILED不要抱侥幸心理重新下载一次常见原因是公司网络代理或 Wi-Fi 掉包导致文件损坏。另外一个隐含条件是 Hadoop 3.2.4 需要 JDK 1.8 才能正常编译运行这和 3.3.x 要求 JDK 11 不一样。你在规划安装包的同时需要确认机器的java -version输出的确实是 1.8。如果系统里装了多个 JDK在后续步骤里要特别注意JAVA_HOME到底指向哪里这是新手最容易踩的第一个坑。2.3 把安装包和配置目录分开给你的集群留一条后悔药解压动作本身没有任何技术含量但目录规划值得提前想清楚。我的建议是安装包放在/opt/下数据目录单独挂载不要混在系统盘里。具体做法# 解压到 /opt 目录 tar -xzf hadoop-3.2.4.tar.gz -C /opt/ # 创建软链方便后续切换版本 ln -s /opt/hadoop-3.2.4 /opt/hadoop # 数据目录独立于安装目录便于重装时保留数据 mkdir -p /data/hadoop/{namenode,datanode,tmp}这里的关键逻辑是Hadoop 的安装目录可以随时解压覆盖但namenode和datanode的数据目录一旦格式化就不能随便再格式化否则会丢元数据。把数据目录放在安装目录之外你就有了后悔药——哪怕安装包被误删数据还在/data/hadoop/下重新解压一份再指回去就能恢复。另外/data/hadoop/tmp对应core-site.xml里的hadoop.tmp.dir这个目录默认存放 HDFS 的临时文件和本地库也要保证足够的磁盘空间至少预留 20GB 以上取决于你的块大小配置和文件数量。3. 最小化单机部署从环境变量到 NameNode 格式化跑通3.1 环境变量必须由 hadoop-env.sh 兜底不能只改 /etc/profile很多教程会直接让你把HADOOP_HOME写进/etc/profile这没有错但有一个隐患Hadoop 的脚本在执行时某些守护进程比如 DataNode可能是通过hdfs用户启动的那个用户的 shell 环境里未必加载了/etc/profile。更稳妥的做法是在hadoop-env.sh里把JAVA_HOME写死同时把HADOOP_HOME也写进去# 编辑 /opt/hadoop/etc/hadoop/hadoop-env.sh export JAVA_HOME/usr/local/jdk1.8.0_202 export HADOOP_HOME/opt/hadoop export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop export HADOOP_OPTS-Djava.library.path$HADOOP_HOME/lib/native说明JAVA_HOME必须指向 JDK 的实际安装路径不能只写到/usr/local/jdk这种软链路径——有些版本的 Hadoop 脚本在解析软链时会出问题。HADOOP_OPTS里指定java.library.path是为了正确加载 Hadoop 的本地压缩库特别是当你后续要启用 Snappy 或 ZStandard 压缩时这一步少了会导致运行时报NativeCodeLoader警告。同时别忘记给hdfs用户配置免密 SSH这步不做你启动集群时会要求你手动输密码。常见做法# 用 hdfs 用户执行 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys-P 表示空密码这是 Hadoop 集群内部通信的基础。如果有多台机器把每台机器的id_rsa.pub都追加到所有机器的authorized_keys里。3.2 最简配置三份 XML 文件决定 HDFS 和 YARN 可用单机或单节点集群只需要重点关注core-site.xml和hdfs-site.xml如果你还要跑 MapReduce 或 Spark那yarn-site.xml也不能省。下面这套配置可以跑通最小链路!-- core-site.xml -- configuration property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property /configuration !-- hdfs-site.xml -- configuration property namedfs.namenode.name.dir/name valuefile:///data/hadoop/namenode/value /property property namedfs.datanode.data.dir/name valuefile:///data/hadoop/datanode/value /property property namedfs.replication/name value1/value /property /configuration !-- yarn-site.xml -- configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property /configuration参数说明fs.defaultFS是 HDFS 的入口地址localhost:9000表示 NameNode 的 RPC 端口实际生产环境要把localhost换成主机名并且要保证集群内所有机器都能解析这个主机名。dfs.replication设置为 1 是因为单机只有一份副本如果你强行配成 3DataNode 只有一台时其实也能启动但会有副本不足的告警。yarn.nodemanager.aux-services必须配mapreduce_shuffle否则后续跑 MR 作业时,Reducer 从 Map 端拉取数据会直接失败。hadoop.tmp.dir这个参数容易踩坑默认值是/tmp/hadoop-${user.name}很多人图省事不改结果系统重启后/tmp被清空NameNode 启动直接报NameNode is not formatted。把它指到挂载盘上的独立目录能避免这类「不明原因」的故障。3.3 格式化 NameNode然后一口气把服务全部拉起来格式化这一步是个分水岭很多新手在这一步犹豫不敢执行或者反复执行导致元数据出问题。注意两点一是格式化前确保/data/hadoop/namenode目录是空的二是格式化只能在 NameNode 上做一次后续如果集群已经写入过数据就不要再执行了否则相当于把整个 HDFS 清空重建。命令如下# 先设置免密再用 hdfs 用户执行 su - hdfs # 格式化输出 successfully formatted 才算成功 /opt/hadoop/bin/hdfs namenode -format格式化完成后先启动 HDFS 再启动 YARN顺序反过来也没问题但日志看起来会乱一些# 启动 HDFS进入 sbin 目录 cd /opt/hadoop/sbin ./start-dfs.sh # 启动 YARN ./start-yarn.sh启动脚本执行完不要急着高兴先用jps检查进程是否齐全。一个健康的单节点集群至少应该有四个进程NameNode、DataNode、ResourceManager、NodeManager。如果有进程缺失去对应的日志目录看日志不要反复重启后面第 4 章我会写最常见的几个失败原因。启动完成后浏览器打开http://服务器IP:9870能看到 NameNode 的 UI 界面3.2.4 的默认端口是 9870而不是老版本的 50070这个变化让不少人踩过坑。4. 安装部署最常见的 5 个坑现象、原因、解决办法4.1 JAVA_HOME is not set. 怎么改都不生效现象执行start-dfs.sh直接报错提示找不到 Java。但你在终端里echo $JAVA_HOME明明有值。原因Hadoop 的守护进程脚本在某些情况下不会继承你终端里的环境变量特别是通过su切换用户或者用 systemd 托管时。解决不要在/etc/profile里反复折腾直接把JAVA_HOME写进/opt/hadoop/etc/hadoop/hadoop-env.sh这是 Hadoop 专门预留的入口。写完后执行source $HADOOP_HOME/etc/hadoop/hadoop-env.sh再重试。4.2 Invalid maximum heap size: -Xmx 2048m现象NameNode 或 DataNode 启动失败日志里出现这个错误看起来像是内存不足但机器明明还有空闲内存。原因HADOOP_HEAPSIZE默认值在某些发行版是 2000m而 JVM 会根据机器内存自动计算一个最大堆上限如果你的 JDK 是 32 位版本或者系统物理内存较小默认值会直接超过上限。解决在hadoop-env.sh里显式设置export HADOOP_HEAPSIZE1024别用m后缀脚本会自动加。如果机器内存确实够大就按 2GB 或 4GB 来但不要让 NameNode 和其他服务争抢堆内存。4.3 Permission denied 或者 ssh: connect to host localhost port 22: Connection refused现象启动时卡在提示输入localhost的密码或者直接拒绝连接。原因这类问题几乎都是因为 SSH 免密没配好。很多教程让你把公钥写到authorized_keys但没有强调.ssh目录的权限是 700、authorized_keys文件权限是 600权限过宽会被 SSH 直接忽略。解决重新执行chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys然后手动ssh localhost验证一次确认不需要密码再跑启动脚本。4.4 Inconsistent clusterIDs 或 directory types do not match现象start-dfs.sh启动后DataNode 启动失败日志里报Inconsistent clusterIDs。原因这是一个典型的「重复格式化」造成的坑。你第一次用/tmp/hadoop初始化了 NameNode后来把dfs.namenode.name.dir改到了/data/hadoop/namenode但 DataNode 的数据目录/data/hadoop/datanode里已经存了旧的集群 ID。或者反过来删了 NameNode 目录重新格式化但 DataNode 目录没清。解决如果是全新集群清空所有数据目录再重新格式化一次如果集群里已经有数据靠这个办法找不回来的只能从快照或备份恢复。所以强调一下不要在生产环境随意格式化格式化前先把name.dir和data.dir的内容都列出来看清楚。4.5 Java.io.IOException: Failed to locate a valid executable for saslauthd现象启动 DataNode 时出现这个异常或者日志里提示 SASL 相关错误。原因Hadoop 3.x 里的 DataNode 和 NameNode 之间默认使用 SASL 认证需要系统里的saslauthd服务。很多精简版 Linux 没有预先安装这个服务。解决如果你只是内网测试环境可以在hdfs-site.xml里把dfs.data.transfer.protection设为空字符串或直接设成authentication但稳妥做法是安装cyrus-sasl相关包。常见发行版用yum install cyrus-sasl cyrus-sasl-plain或apt install libsasl2-2都能解决。5. 跑起来之后才是重点hadoop-3.2.4 的关键配置参数与调优5.1 内存与 CPU 参数给 YARN 分配多少才是「够用」服务能启动只是第一步接下来你要面对的是资源分配合理性。默认情况下YARN 的 NodeManager 只会使用系统可用内存的 80%上限这对一台专门跑 Hadoop 的机器可能还行但如果这台机器还跑着 HBase 或 Flink就必须手动收缩。核心参数在yarn-site.xml里property nameyarn.nodemanager.resource.memory-mb/name value8192/value /property property nameyarn.nodemanager.resource.cpu-vcores/name value4/value /property property nameyarn.scheduler.maximum-allocation-mb/name value2048/value /property property nameyarn.scheduler.minimum-allocation-mb/name value512/value /propertymemory-mb表示 NodeManager 能分配给所有容器的总内存注意要给操作系统和 DataNode 留 2-4GB 余量不要全部塞给 YARN。cpu-vcores设置的是虚拟核数理论上可以超过物理核数但在高并发下会造成频繁线程切换不建议超过物理核数的 1.5 倍。最大最小分配粒度决定了单个作业能拿到的最小内存如果你的作业普遍是轻量级的把最小值调低一些能提升并发度。5.2 HDFS 参数块大小、副本数、回收站和老生常谈的 NameNode 内存针对 hadoop-3.2.4我建议重点调这几个参数。首先是dfs.blocksize默认是 128MB如果数据文件普遍比较小比如日志文件、小对象可以降到 64MB 减少内存碎片如果跑的是大文件入库或 AI 训练读样本128MB 或 256MB 会更合适。其次是dfs.replication的默认值是 3单机测试环境必须改成 1但生产环境保持 2 即可如果机架感知没有配置3 份副本只会造成浪费。再强调一个被忽略的参数fs.trash.interval。默认值是 0表示删除文件不会进回收站直接彻底删除。这对做数据平台的人来说是致命的——误删一张 Hive 表如果没有快照恢复成本极高。我是这样设的property namefs.trash.interval/name value1440/value /property property namefs.trash.checkpoint.interval/name value120/value /property1440表示回收站里的文件保留 24 小时120表示每 2 小时检查一次过期文件。这给了你一天的「后悔药」时间又不至于让回收站无限膨胀。NameNode 的堆内存是另一个关键。每个文件、目录和块在 NameNode 内存中大约占 150 字节当你有 1000 万个文件时NameNode 堆至少要 4GB 以上。修改方式还是在hadoop-env.sh里加export HADOOP_NAMENODE_OPTS-Xmx4g -XX:UseParallelGC5.3 把常用脚本封装成软链治一治你记不住 bin 目录路径的毛病部署完 Hadoop 后你每天用的工具是hdfs、yarn、mapred这几个命令行。但每次都要输入/opt/hadoop/bin/hdfs dfs -ls /非常痛苦。我的做法是把这些命令软链到/usr/local/bin/下ln -s /opt/hadoop/bin/hdfs /usr/local/bin/hdfs ln -s /opt/hadoop/bin/yarn /usr/local/bin/yarn ln -s /opt/hadoop/bin/mapred /usr/local/bin/mapred这样一个hdfs dfs -ls /就能直接执行不用再source环境变量。注意软链是全局生效建议只有一台管理节点做这个操作避免在数据节点上装了命令却连不上 NameNode引起不必要的困惑。6. 安装后的验证与失效回滚用最小成本确认安装包真的可用服务全部启动后我会按下面这个顺序做验证每步都能定位到具体组件是否正常。先看进程再操作 HDFS再跑一个真实的 MR 作业最后检查 WEB UI 的节点状态。把这些固化成一道流程每次部署完都走一遍比什么检查都有效。# 1. 进程检查必须看到 4 个 Java 进程 jps # 2. 文件系统操作建目录、传文件、读回文件 hdfs dfs -mkdir /test hdfs dfs -put /etc/hosts /test/hosts hdfs dfs -cat /test/hosts # 3. 跑一个最小的 MapReduce 作业统计文件行数 hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /test /test-output # 4. 检查结果文件 hdfs dfs -cat /test-output/part-r-00000第 3 步的 wordcount 是最经典的验证作业如果它能顺利跑完说明 YARN 的资源调度、MapReduce 的 shuffle 机制、HDFS 的读写都正常。如果卡在map 100% reduce 0%不动优先检查 NodeManager 的资源是否充足以及yarn.nodemanager.aux-services是否配置正确。跑完后记得把/test-output目录删掉避免下次测试时因为目录已存在而报错不使用-rm -r的话会直接 FAILED。关于失效回滚很多人不重视。我的习惯是每次改动配置文件前先把当前能正常跑的配置目录打一个 tar 包cp -r /opt/hadoop/etc/hadoop /opt/hadoop/etc/hadoop.bak.$(date %Y%m%d)如果改完配置后服务起不来直接用备份目录恢复再重启。这比你在那里一行行注释试错高效得多。另外如果升级或替换了 hadoop-3.2.4 的安装包不要直接覆盖老目录先解压到新目录用软链切过去。有问题就把软链指回旧版本启动一下就能回滚不需要动数据。最后说一个我自己栽过的跟头当时以为「不校验安装包、不备份配置」这种事不会发生在自己身上直到某次数据节点报 CRC 错误、同时配置被同事误改排查半天才发现是安装包在传输时损坏了。从那以后我每次部署任何东西都会先想清楚「出问题了怎么退回去」。一个不给自己留退路的集群方案迟早会让你在半夜被电话叫醒。希望这篇基于 hadoop-3.2.4 安装包的实战笔记能帮到你祝你的集群一次跑通。本文还有配套的精品资源点击获取