尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Hadoop 3.2.4 伪分布式安装全流程:从环境配置到故障排查

Hadoop 3.2.4 伪分布式安装全流程:从环境配置到故障排查 简介Hadoop 3.2.4 安装包面向大数据集群搭建与组件部署场景适合需要离线安装或本地学习的运维工程师与开发者。压缩包提供完整的发行内容共约2000个文件其中1800余个HTML文档用于组件说明与接口参考配套CSS样式便于本地浏览另有Shell管理脚本、SQL初始化脚本、XML/Properties配置文件及少量文本说明可满足安装配置、服务启停与后续调优查阅需求。整个zip包约505.9MB目录结构符合Hadoop官方发布布局下载后可直接用于环境准备或版本升级。目前已有214人学习下载适合作为离线镜像或教学环境中稳定可复现的安装介质。文件内还涵盖常见组件配置示例帮助使用者减少初次部署时的摸索成本。 做大数据运维这些年凡是来问我 Hadoop 怎么装的人十个里有八个都卡在同一个点上安装包倒是下载好了照着网上教程配完环境服务却怎么都起不来。这篇文章就拿 hadoop-3.2.4 这个版本完整走一遍从选型理由讲起一直讲到启动验证和常见故障排查全部按照我实际在项目里操作过的流程来写。如果你正准备搭一套测试环境、研发环境或者想弄个学习用的伪分布式集群这篇可以直接照着抄作业。1. 为什么我把 Hadoop 集群停在 3.2.4 这个版本项目里一提到版本选型总有人问现在 3.3.x 甚至更新的版本都出来了怎么还盯住 3.2.4 不放这个问题我每次都得解释一遍干脆在这里把思路说清楚。我的理由很直接3.2 系列是 3.x 分支里被生产环境验证得最充分的版本线而 3.2.4 又是这条版本线里最后一个修复版本。很多在 3.2.0、3.2.1 上暴露过的问题到了 3.2.4 基本不会再犯。做集群排障这些年我见过太多为了追新功能一头扎进兼容性泥潭的项目所以选型这件事我是真不只看版本号新不新。3.2.4 发布时修复了一批比较关键的问题包括 HDFS 在异常节点切换场景下的块同步超时、YARN 容量调度器在极端队列配置下的资源计算异常还有若干和 S3A、Ozone 相关的兼容性修复。对大多数跑离线批处理、数仓 ETL 的中型集群来说这些修复比新增一个不太用得到的特性有价值得多。再看生态这边CDH、HDP 这些商业发行版后来都把底座方案落在 3.2 系列说明这个版本在周边生态兼容性上足够有说服力。你后面想接 Hive、Spark、Flink用 3.2.4 做底座基本不会遇到组件版本互相打架的情况。要是你的目标是快速上手、搭一套稳定的学习或测试环境3.2.4 尤其合适。它不会像 3.1 时代那样有不少早期功能坑也不会像刚发布的版本那样需要等周边组件慢慢适配。更重要的是网上针对 3.2.4 的踩坑案例和经验沉淀非常丰富遇到问题基本都能搜到答案这对新手来说比那点版本号上的新鲜感重要得多。接下来我从安装包获取开始一步步讲。2. 下载安装包之前先把环境清单列清楚很多新手在环境准备这一步就翻车要么 JDK 装成了 1.7要么把源码包当二进制包下载下来解压以后根本没法直接跑。我先把环境准备阶段的几件事列清楚免得后面忙活半天最后发现是基础环境的问题。2.1 JDK 版本8 还是 11不能凭感觉装Hadoop 3.2.4 官方要求 Java 8 或者 Java 11不要拿更高版本硬试。我有同事图省事装了 JDK 17结果启动 NameNode 的时候直接报 UnsupportedClassVersionError查了半天才发现问题出在 Java 版本上。建议直接用 OpenJDK 8这个版本在大数据生态里兼容性最稳后面接 Hive、Spark、Flink 基本不会因为 JDK 版本产生额外问题。装完以后先确认版本java -version同时要把 JAVA_HOME 写进 hadoop-env.sh。这里有个很容易忽略的细节即使你已经在 /etc/profile 里配好了 JAVA_HOMEHadoop 的守护进程脚本也未必会读取它必须在 Hadoop 自己的配置目录里显式指定。不然启动时会看到 JAVA_HOME is not set 的报错。这个坑我见得太多了每次都得提醒一遍。2.2 SSH 免密登录伪分布式也要配虽然伪分布式只是单机但 Hadoop 的 start-dfs.sh 脚本仍会通过 SSH 去连接 localhost所以本机免密登录必须提前配好。配置命令不复杂ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys配置完以后一定执行 ssh localhost 验证一遍能直接登录再往下走。很多人的问题出在 .ssh 目录权限不对或者 authorized_keys 权限是 644导致 SSH 拒绝读取。权限这块我建议直接按上面命令里的来别自己乱改。2.3 用户和目录规划别用 root 裸跑Hadoop 服务不建议用 root 账户运行一是权限模型容易出奇怪问题二是测试环境也用 root 的话后续验证权限相关功能时结果会被污染。我习惯单独建一个系统用户比如 hadoop然后把安装目录放在 /opt/hadoop-3.2.4数据目录放在 /data/hadoop 下。目录规划这事看着不起眼后面集群扩容、磁盘迁移、换数据盘的时候就知道它的价值了。创建用户和数据目录的操作也顺手做了useradd -m hadoop mkdir -p /data/hadoop chown -R hadoop:hadoop /data/hadoop把安装包的解压目录和数据目录的所有权交给这个用户后续所有操作都用这个身份执行。3. 从解压到跑起来单机伪分布式安装实录准备阶段结束后进入核心安装流程。这一部分我用最完整的顺序来写每个关键操作后面都会说明为什么这么做避免你知其然不知其所以然。3.1 解压安装包并配置环境变量拿到安装包之后我习惯统一解压到 /opt 目录然后做软链接把带版本号的目录和通用路径分离。这样以后升级版本时不用改一堆脚本里的路径引用。tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ ln -s /opt/hadoop-3.2.4 /opt/hadoop然后添加环境变量我建议单独建一个 /etc/profile.d/hadoop.sh而不是直接改 /etc/profile。vim /etc/profile.d/hadoop.sh写入export HADOOP_HOME/opt/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop保存后执行 source /etc/profile.d/hadoop.sh 或者重新登录终端然后验证hadoop version能看到 Hadoop 3.2.4 版本信息说明 Java 环境和安装包路径都是正常的可以进入配置阶段。3.2 手写四个核心配置Hadoop 的配置集中在 $HADOOP_HOME/etc/hadoop 目录下。伪分布式模式主要改四个文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml还有一个 hadoop-env.sh。初次接触的人会被模板文件里的大量注释吓到其实需要改的关键参数就那么几个。先改 core-site.xml。这里最重要的是 fs.defaultFS 和 hadoop.tmp.dir。fs.defaultFS 是文件系统入口地址我习惯用 hdfs://localhost:9000hadoop.tmp.dir 是 NameNode 和 DataNode 存放元数据、数据块的根目录默认指向 /tmp这个必须改否则系统重启后临时文件被清理集群状态会直接丢。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。伪分布式下副本数设置为 1同时把 NameNode 和 DataNode 的目录写到独立位置。注意两个目录不能重叠我第一次偷懒都指向同一个目录DataNode 起来后一直报目录权限冲突。configuration property namedfs.replication/name value1/value /property property namedfs.namenode.name.dir/name value/data/hadoop/name/value /property property namedfs.datanode.data.dir/name value/data/hadoop/data/value /property /configuration然后是 mapred-site.xml。这个文件默认叫 mapred-site.xml.template需要先重命名再编辑。里面要指定计算框架为 YARN如果不设置MapReduce 作业默认走 local 模式你看不到完整的分布式执行效果。mv mapred-site.xml.template mapred-site.xmlconfiguration property namemapreduce.framework.name/name valueyarn/value /property /configuration最后是 yarn-site.xml关键是配 aux-services。YARN 的 NodeManager 需要知道用哪个 shuffle 服务中转 Map 和 Reduce 之间的数据默认没有配置不写的话作业会一直卡在 RUNNING 状态Reduce 阶段永远起不来。configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.aux-services.mapreduce_shuffle.class/name valueorg.apache.hadoop.mapred.ShuffleHandler/value /property /configuration还有 hadoop-env.sh 里需要显式设置 JAVA_HOME。打开文件找到 export JAVA_HOME 那一行把值改成 JDK 实际安装路径。这一步很多人以为系统环境变量里有了就行实际上 Hadoop 的守护进程脚本会单独读这个配置缺失时仍然报错。3.3 格式化 NameNode注意启动顺序首次启动前必须格式化 HDFS 的元数据目录。这一步会生成空文件系统镜像相当于给一块新硬盘做格式化。命令行hdfs namenode -format看到 successfully formatted 字样才算成功。格式化完成后再启动服务顺序是先 HDFS 后 YARNstart-dfs.sh start-yarn.sh顺序不能反因为 YARN 的 NodeManager 启动时需要向 NameNode 注册HDFS 没起来的话日志里全是连接超时。这个顺序我见过不少人搞混单独拎出来提醒一句。4. 安装完先验证这四件事服务启动成功不等于集群真的能用。我见过太多案例jps 一看进程都在但 Web UI 打不开、作业跑不了。所以安装结束后这四项验证一定要做全。4.1 进程检查jps 必须看到五个进程伪分布式完整启动后在 hadoop 用户下执行 jps应该能看到这五个进程NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager。少任何一个都说明有问题。经常被忽略的是 SecondaryNameNode很多人不明白它存在的意义其实它在 HDFS 元数据合并机制里承担着定期合并 fsimage 和 edits 的职责随手 kill 掉会让元数据恢复时间变长。4.2 Web UI两个管理页面都要能打开3.2.4 的 NameNode Web UI 端口是 9870不是老的 50070。浏览器打开 http://localhost:9870 能看到集群健康状态、DataNode 列表和 HDFS 容量。YARN 的 ResourceManager 页面在 http://localhost:8088能看到正在运行和已经完成的作业。这一步能筛掉大部分进程在但端口没监听的问题。如果页面打不开先用 ss -lntp 或者 netstat -anp 查一下端口有没有真的在监听别急着怀疑防火墙。4.3 跑一次官方 WordCount 示例MapReduce 是否真的可用跑一次自带的 wordcount 就知道了。先建一个测试目录传一个文本文件进去hadoop fs -mkdir /input echo hello hadoop hello world | hadoop fs -put - /input/test.txt hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount /input /output跑完之后用 hadoop fs -cat /output/part-r-00000 查看结果正常情况下能看到每个单词的出现次数。执行过程中如果卡在 60% 左右不动大概率是 aux-services 没配好回到 yarn-site.xml 检查 shuffle 配置。4.4 HDFS 存储报告确认数据节点真正健康最后再用 hdfs dfsadmin -report 确认底层存储健康状态。这个命令会输出 DataNode 是否在线、可用存储空间、块数量等信息。看到 Live datanodes (1): 且状态正常说明 HDFS 的读写链路是通的。如果报告显示 0 个 live datanode基本可以断定 DataNode 注册有问题去翻 DataNode 日志里有关 clusterID 或 storageID 的报错。5. 我在 3.2.4 上踩过的坑以及排查链路最后这部分重点写故障。和安装步骤相比这些坑才是真正拉开经验差距的地方。我把几个高频问题的排查思路完整写出来让你不只是拿到答案还知道怎么一步步找到答案。5.1 NameNode 反复格式化后无法启动最经典的坑我第一次装的时候格式化后启动成功后来想再看一遍格式化流程于是又执行了一次结果 DataNode 怎么都起不来日志里报 Incompatible clusterIDs。原因是每次格式化都会生成新的集群 IDDataNode 数据目录里保留的还是旧集群 ID两边对不上就会拒绝注册。解决办法不是只清 DataNode 目录而是把 NameNode 和 DataNode 的数据目录全部清空再重新格式化。但也是因为这次教训我后来在真实环境里非常谨慎——集群一旦跑起来绝对不随便格式化。这个习惯比任何命令都重要。5.2 DataNode 进程在但 Web UI 显示 Not in Service另一个常见情况是 DataNode 进程活着Web UI 里却显示 Not in Service。排查链路通常是先看 NameNode 日志找到 DataNode 上报的 storageID 和注册信息不一致的记录一般是数据目录残留了旧版本文件。处理方式还是先停服务把 /data/hadoop/data 下的旧文件清理干净再启动。这里要特别提醒不要在运行状态下直接 rm 数据目录否则可能引发文件句柄异常那时候就不仅仅是集群状态的问题了。5.3 日志里提示 Unable to load native-hadoop library这个警告在 Hadoop 3.2.4 里很常见它的意思是本地 native 库没加载成功Hadoop 会退回使用内置的 Java 实现。严格来说不是致命问题但会影响数据压缩和某些 IO 路径的效率。排查顺序是确认系统有没有装 zlib、snappy、openssl 这些依赖然后把 Hadoop 的 native 库路径加到 LD_LIBRARY_PATH。我在 CentOS 和 Ubuntu 上都试过把依赖补齐之后日志里就不再刷这个警告了。如果只是学习用暂时忽略也可以不影响功能验证。5.4 定位问题的习惯先看日志再改配置最后说一个通用习惯任何异常先去翻 $HADOOP_HOME/logs/ 目录而不是马上改配置。NameNode、DataNode、YARN 的日志都按角色和日期分文件报错信息里通常直接写着根因。比如 HDFS 目录权限不够日志会明确提示 Permission denied内存不足日志会提示 Java heap space。还有一个实用技巧启动服务时用 start-dfs.sh 前台跑输出其实有限但日志文件是实时的用 tail -f 盯着对应角色的日志看定位问题的速度会快很多。我处理过的大多数集群问题最后都是靠日志找到答案的配置文件猜测法反而浪费了不少时间。本文还有配套的精品资源点击获取
返回列表