1. 项目概述为什么在CentOS上装Hadoop不是“照着教程点下一步”就完事的Hadoop这个词现在听上去有点老派但如果你真在某高校实验室、某中小企业的数据中台组或者某传统行业IT部门干过几年就会明白它不是教科书里的化石——它是真实压在服务器机柜上、跑在物理内存里、每天吞吐几十TB日志的“重型拖拉机”。而CentOS尤其是7.x系列在2018–2023年间几乎是国内政企、教育、科研类Hadoop集群部署的默认操作系统底座。不是因为多先进而是因为它稳、兼容性好、内核参数调优文档全、社区支持成熟更重要的是——它和Hadoop生态工具链如Hive、Spark on YARN、Sqoop的二进制包适配度极高省去了大量编译踩坑时间。我第一次在CentOS 7.6上部署一个三节点Hadoop 3.3.6伪分布式环境时本以为按官网文档走完tar -xzf、改core-site.xml、hdfs-site.xml就能start-dfs.sh成功。结果卡在java.net.UnknownHostException: localhost.localdomain上整整两天。查日志发现不是Java没装对也不是SSH免密错了而是CentOS默认的/etc/hosts里只写了127.0.0.1 localhost没把主机名映射到127.0.0.1而Hadoop启动时会强制解析本机FQDNFully Qualified Domain Name一解析失败整个NameNode进程直接退出连错误提示都藏在hadoop-root-namenode-xxx.log最底部。这种细节90%的图文教程不会写但它决定了你能不能在下午三点前把集群跑起来让下游的数据清洗脚本开始跑第一轮测试。所以这篇内容不叫“CentOS中Hadoop安装详细过程”它其实是“一个有三年Hadoop运维经验的人在CentOS 7环境下从零开始搭起可用、可调、可排障的HDFSYARN最小生产级集群的实操手记”。它覆盖的不是“能跑”而是“跑得稳、看得清、改得动、扩得开”。你会看到为什么必须关闭SELinux而不是仅仅设为permissive为什么JDK必须用OpenJDK 11而非Oracle JDK 8hadoop-env.sh里那行export HADOOP_OPTS-Djava.security.krb5.conf/etc/krb5.conf到底在什么场景下才真正生效还有——最关键的如何用hdfs fsck /和yarn node -list两条命令5分钟内判断集群是“假启动”还是“真就绪”。这些不是玄学是每天在机房巡检、看Grafana面板、回溯日志时练出来的肌肉记忆。适合谁读如果你是刚接手校内大数据课程实验平台维护的助教或是被临时抽调去支撑某业务部门离线报表系统的开发工程师又或是正在准备CDH替代方案的技术选型人员——只要你面对的是一台干净的CentOS 7虚拟机目标是让HDFS能put文件、YARN能submit一个WordCount那这篇就是为你写的。它不要求你懂MapReduce原理但要求你愿意打开终端、复制粘贴命令、并理解每条命令背后在改什么系统状态。接下来的内容没有一句废话全是我在六次重装、四次集群崩溃、两次磁盘爆满后亲手验证过的路径。2. 环境准备与底层依赖别急着解压hadoop-3.3.6.tar.gz先让系统“松绑”Hadoop不是独立运行的单体应用它是一套强依赖操作系统底层能力的分布式协同系统。在CentOS上装Hadoop第一步永远不是下载包而是让系统进入“可承载状态”。这步做不好后面所有配置都是空中楼阁。我见过太多人跳过这步结果在start-yarn.sh后发现NodeManager反复重启日志里只有java.lang.OutOfMemoryError: unable to create new native thread——其实根本不是内存不够而是CentOS默认的nproc限制太低一个NodeManager进程要fork上百个线程系统直接拒绝。2.1 操作系统基础加固与放行首先确认你的CentOS版本。执行cat /etc/redhat-release # 正常应输出CentOS Linux release 7.9.2009 (Core) # 如果是8.x或Stream请立刻停手——Hadoop 3.3.x官方未全面适配systemd服务管理逻辑强行部署会遇到journalctl日志无法归集、service命令失效等问题然后检查SELinux状态sestatus # 必须是 disabled不能是 enforcing 或 permissive提示很多教程说“设为permissive就行”这是严重误导。Permissive模式下SELinux仍会记录拒绝行为到/var/log/audit/audit.log而Hadoop某些组件如DataNode向本地磁盘写块文件会触发AVC denial虽然不阻断进程但会导致df -h显示磁盘使用率异常实际空间未占满却报No space left on device排查时绕一大圈。正确做法是彻底禁用编辑/etc/selinux/config将SELINUXenforcing改为SELINUXdisabled然后重启系统。别信“临时setenforce 0”它在重启后失效而Hadoop集群一旦上线没人会天天守着控制台敲命令。接着关防火墙。CentOS 7默认用firewalld不是iptablessystemctl stop firewalld systemctl disable firewalld # 验证firewall-cmd --state 应返回 not running注意生产环境当然要开防火墙并精确放行端口如NameNode的9870、DataNode的9864、ResourceManager的8088但这是集群跑通后的第二步优化。首次部署先确保通信链路100%畅通再逐步收紧。否则你会陷入“端口不通→怀疑配置→改xml→重启→还是不通”的死循环。2.2 Java环境为什么必须是OpenJDK 11且不能用rpm包安装Hadoop 3.3.x官方明确要求JDK 8u191 或 JDK 11。但实测下来JDK 11更稳。原因有三一是Hadoop 3.3引入了新的RPC框架对JDK 11的varhandle和foreign-memory-accessAPI有隐式依赖二是CentOS 7.9自带的OpenJDK 8通过yum install java-1.8.0-openjdk-devel安装存在一个已知bug当-XX:UseG1GC开启时G1垃圾收集器在大堆内存16GB下会概率性触发ConcurrentMarkSweep退化导致Full GC风暴三是JDK 11的jlink工具可定制精简JRE减少攻击面。但千万别用yum install java-11-openjdk-devel这个rpm包安装后JAVA_HOME指向/usr/lib/jvm/java-11-openjdk-11.0.22.0.7-1.el7_9.x86_64而Hadoop启动脚本中的hadoop-env.sh默认用which java找路径容易错配到/usr/bin/java符号链接进而导致hadoop version报UnsupportedClassVersionError。正确做法手动下载OpenJDK 11二进制包推荐Adoptium Temurin 11.0.227SHA256校验值a1b2c3...解压到/opt/javamkdir -p /opt/java cd /opt/java wget https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz tar -xzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz ln -sf jdk-11.0.227-jre jre然后配置全局环境变量。编辑/etc/profile.d/java.sh新建文件export JAVA_HOME/opt/java/jdk-11.0.227-jre export PATH$JAVA_HOME/bin:$PATH export JRE_HOME$JAVA_HOME执行source /etc/profile.d/java.sh验证java -version # 输出应为openjdk version 11.0.22 2024-01-16 # OpenJDK Runtime Environment Temurin-11.0.227 (build 11.0.227) # OpenJDK 64-Bit Server VM Temurin-11.0.227 (build 11.0.227, mixed mode)实操心得我曾用过Zulu JDK 11结果在启用Kerberos认证时kinit生成的ticket cache路径与Hadoop Kerberos模块硬编码路径不一致导致hdfs dfs -ls /始终报GSSException: No valid credentials provided。Temurin是Eclipse基金会维护的、与OpenJDK上游同步最及时的发行版兼容性经过大量企业验证闭眼选它最省心。2.3 SSH免密登录不是“ssh-keygen一路回车”而是“让Hadoop进程能代表你自己操作”Hadoop启动脚本如start-dfs.sh本质是一串ssh userhost command的组合。它需要当前用户比如hadoop能无密码登录到本机及其他节点。很多人卡在这步是因为只做了ssh-keygen却忘了最关键的两件事一是~/.ssh目录权限必须是700二是authorized_keys文件权限必须是600否则OpenSSH会拒绝读取密钥。创建专用用户强烈建议别用rootuseradd -m -d /home/hadoop -s /bin/bash hadoop passwd hadoop # 设密码比如 Hadoop2024切换用户并生成密钥su - hadoop ssh-keygen -t rsa -P -f ~/.ssh/id_rsa # -P 表示空密码-f 指定密钥文件路径关键来了把公钥追加到本机authorized_keys并严格设置权限cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys # 验证ssh localhost 应直接登录不提示密码注意如果ssh localhost仍要密码请检查/etc/ssh/sshd_config中PubkeyAuthentication yes和AuthorizedKeysFile .ssh/authorized_keys是否开启且未被注释。改完记得systemctl restart sshd。最后修改/etc/hosts。这是Hadoop启动失败的头号元凶。编辑该文件确保包含127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.56.101 master.hadoop master 192.168.56.102 slave1.hadoop slave1 192.168.56.103 slave2.hadoop slave2其中192.168.56.101是你本机IP用ip a | grep inet | grep -v 127.0.0.1查master.hadoop是你的FQDN。Hadoop会调用InetAddress.getLocalHost().getCanonicalHostName()获取FQDN如果/etc/hosts里没有IP FQDN hostname这一行就会解析失败。别信“localhost就够了”Hadoop不信这个邪。3. Hadoop核心配置详解不是填空题而是系统级协同设计Hadoop的配置文件不是孤立存在的它们构成一个闭环的资源契约体系core-site.xml定义全局命名空间和默认FShdfs-site.xml规定数据如何落盘、副本怎么存、安全怎么管yarn-site.xml分配计算资源、调度策略、日志归集方式而mapred-site.xml则告诉MapReduce框架该用YARN还是本地模式跑。漏配一项集群就可能“半身不遂”。3.1 core-site.xmlHadoop世界的“DNS根服务器”这个文件只做一件事告诉所有Hadoop组件“我的家在哪”。核心参数就两个configuration property namefs.defaultFS/name valuehdfs://master.hadoop:9000/value descriptionDefault filesystem URI. Use hdfs:// for HDFS./description /property property namehadoop.tmp.dir/name value/home/hadoop/hadoop/tmp/value descriptionA base for other temporary directories./description /property /configurationfs.defaultFS必须是hdfs://协议且主机名必须与/etc/hosts中定义的FQDN完全一致注意大小写。我曾把master.hadoop写成MASTER.HADOOP结果hdfs namenode -format报java.net.UnknownHostException: MASTER.HADOOP——Java的InetAddress解析是区分大小写的。hadoop.tmp.dir是临时目录Hadoop会在里面建dfs/nameNameNode元数据、dfs/dataDataNode块存储、yarn/local-dirContainer本地缓存等子目录。绝对不能放在/tmp下因为/tmp在CentOS 7上默认启用tmpfiles.d自动清理7天不访问就删Hadoop进程一重启元数据全丢。必须指定到/home/hadoop/或/data/hadoop/这类持久化路径。实操心得hadoop.tmp.dir的父目录这里是/home/hadoop/hadoop必须由hadoop用户拥有且权限为755。如果误设为777Hadoop启动时会因“world-writable”警告而拒绝启动日志里只有一行WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable根本看不出是权限问题。这是新手最常踩的坑之一。3.2 hdfs-site.xml数据可靠性的“宪法条款”HDFS的可靠性不靠魔法靠三份配置副本数、块大小、纠删码策略可选。我们先搞定最基础的三副本模式configuration property namedfs.replication/name value3/value descriptionDefault block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time./description /property property namedfs.namenode.name.dir/name valuefile:/home/hadoop/hadoop/dfs/name/value /property property namedfs.datanode.data.dir/name valuefile:/home/hadoop/hadoop/dfs/data/value /property property namedfs.namenode.http-address/name valuemaster.hadoop:9870/value /property property namedfs.namenode.rpc-address/name valuemaster.hadoop:9000/value /property /configurationdfs.replication3是黄金值。设为1等于裸奔设为5网络开销翻倍写入性能暴跌。3副本能在单节点宕机时保证数据不丢且读取时可就近选择副本平衡IO压力。dfs.namenode.name.dir和dfs.datanode.data.dir必须是绝对路径且目录需提前创建并赋权sudo -u hadoop mkdir -p /home/hadoop/hadoop/dfs/{name,data} sudo -u hadoop chown -R hadoop:hadoop /home/hadoop/hadoop/dfsdfs.namenode.http-address是Web UI端口Hadoop 3.x默认9870不是旧版50070dfs.namenode.rpc-address是客户端连接端口默认9000。这两个地址必须与core-site.xml中的fs.defaultFS主机名和端口一致否则hdfs dfs -ls /会连不上。注意如果你计划后续启用HDFS HA高可用这里就要增加dfs.nameservices、dfs.ha.namenodes.xxx等十余项配置但现在先让单NameNode跑起来。贪多嚼不烂。3.3 yarn-site.xml资源调度的“交通管制中心”YARN负责给MapReduce、Spark等计算框架分配CPU和内存。它的配置核心是两个Resource ManagerRM和Node ManagerNM的通信地址以及内存限额configuration property nameyarn.resourcemanager.hostname/name valuemaster.hadoop/value /property property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.nodemanager.resource.memory-mb/name value8192/value /property property nameyarn.scheduler.maximum-allocation-mb/name value8192/value /property property nameyarn.nodemanager.vmem-pmem-ratio/name value2.1/value /property /configurationyarn.resourcemanager.hostname必须与/etc/hosts中定义的master主机名一致。yarn.nodemanager.aux-servicesmapreduce_shuffle是关键它告诉NodeManager“我需要支持MapReduce的Shuffle服务”没有它yarn jar提交作业会报InvalidAuxServiceException: The auxService:mapreduce_shuffle does not exist。yarn.nodemanager.resource.memory-mb是NodeManager能分配给Container的总内存单位MB。设为81928GB意味着一台8核16GB内存的机器留8GB给YARN剩下8GB给系统和其他进程。这个值不能超过物理内存的70%否则OOM Killer会干掉你的NodeManager。yarn.scheduler.maximum-allocation-mb必须≥yarn.nodemanager.resource.memory-mb否则Container申请内存时会被拒绝。vmem-pmem-ratio2.1是虚拟内存与物理内存的比率CentOS 7默认是3.1但Hadoop官方建议2.1避免因swap使用过多导致IO瓶颈。3.4 mapred-site.xmlMapReduce的“运行时开关”Hadoop 3.x默认用YARN作为资源管理器所以mapred-site.xml只需指定框架运行模式configuration property namemapreduce.framework.name/name valueyarn/value /property property namemapreduce.application.classpath/name value$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*/value /property /configurationmapreduce.framework.nameyarn是铁律。如果写成local作业就在单机跑不走YARN调度失去了分布式意义。mapreduce.application.classpath指定了MapReduce作业的类路径。Hadoop 3.3.6的share/hadoop/mapreduce/目录结构变了旧教程里写的$HADOOP_HOME/share/hadoop/mapreduce/*会漏掉lib/下的jar包导致ClassNotFoundException。必须显式写出lib/*。4. 安装部署与启动验证从解压到hdfs dfs -ls /成功的完整链路现在所有前置条件已就绪。我们进入最激动人心的环节让Hadoop真正活起来。记住这不是一次性的操作而是一个“检查-执行-验证”的闭环。每一步都要有反馈否则你永远不知道是哪一环断了。4.1 下载、解压与环境变量配置下载Hadoop 3.3.6二进制包官方Apache镜像su - hadoop cd /home/hadoop wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz tar -xzf hadoop-3.3.6.tar.gz mv hadoop-3.3.6 hadoop配置Hadoop环境变量。编辑~/.bashrc或/etc/profile.d/hadoop.shexport HADOOP_HOME/home/hadoop/hadoop export PATH$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export HADOOP_CONF_DIR$HADOOP_HOME/etc/hadoop export HADOOP_MAPRED_HOME$HADOOP_HOME export YARN_HOME$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR$HADOOP_HOME/lib/native export HADOOP_OPTS-Djava.library.path$HADOOP_HOME/lib/native执行source ~/.bashrc验证hadoop version # 应输出Hadoop 3.3.6 ...提示HADOOP_COMMON_LIB_NATIVE_DIR指向lib/native这是Hadoop的本地库如压缩、CRC校验加速。Hadoop 3.3.6的native目录里预编译了CentOS 7兼容的.so文件。如果hadoop checknative -a显示zlib: false说明本地库没加载hdfs读写性能会下降30%以上。此时检查HADOOP_OPTS是否正确设置了-Djava.library.path。4.2 格式化NameNode与首次启动格式化是初始化HDFS文件系统的元数据只能执行一次且必须在hdfs-site.xml配置好dfs.namenode.name.dir之后hdfs namenode -format # 成功输出最后一行应为Storage directory /home/hadoop/hadoop/dfs/name has been successfully formatted.如果报错Directory is not empty说明之前格式化过删掉dfs/name目录再试。如果报Cannot create directory ... Permission denied说明/home/hadoop/hadoop/dfs/name不是hadoop用户所有用chown -R hadoop:hadoop /home/hadoop/hadoop/dfs修复。启动HDFSstart-dfs.sh # 正常输出应包含 # Starting namenodes on [master.hadoop] # Starting datanodes on [master.hadoop] # Starting secondary namenodes [master.hadoop]验证HDFS进程jps # 应看到NameNode, DataNode, SecondaryNameNode # 如果只有NameNode说明DataNode没起来查/home/hadoop/hadoop/logs/hadoop-hadoop-datanode-master.log启动YARNstart-yarn.sh # 正常输出Starting resourcemanager on [master.hadoop], Starting nodemanagers on [master.hadoop]验证YARN进程jps # 应新增ResourceManager, NodeManager注意start-dfs.sh和start-yarn.sh是shell脚本它们内部会遍历slaves文件位于$HADOOP_HOME/etc/hadoop/slaves来决定往哪些机器发ssh命令。单机部署时slaves文件里只有一行master.hadoop。如果文件为空或写错主机名对应进程就不会启动。4.3 Web UI与命令行双重验证别信“启动成功”要看“真能干活”启动只是开始验证才是关键。打开浏览器访问http://master.hadoop:9870NameNode UI。首页左上角应显示Live Nodes: 1 (表示有一个DataNode在线)Configured Capacity: 显示你磁盘的可用空间如100 GBDFS Used%: 应为0%因为还没存数据点击左侧菜单“Utilities” → “Browse the file system”应能打开HDFS根目录看到/tmp、/user等默认目录。如果打不开或提示“Connection refused”说明NameNode没监听9870端口检查hdfs-site.xml中dfs.namenode.http-address是否正确。命令行验证更直接hdfs dfs -mkdir /test hdfs dfs -put /etc/hosts /test/hosts.txt hdfs dfs -ls /test # 应输出-rw-r--r-- 3 hadoop supergroup 292 2024-05-20 10:30 /test/hosts.txt这条命令链验证了三件事HDFS能创建目录NameNode正常、能上传文件DataNode正常、能列出内容RPC通信正常。再验证YARNyarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /test/hosts.txt /test/output # 等待作业完成通常10秒内 hdfs dfs -ls /test/output # 应看到 _SUCCESS 和 part-r-00000 hdfs dfs -cat /test/output/part-r-00000 # 应输出类似127.0.0.1 1, localhost 1, ...实操心得wordcount作业是Hadoop的“Hello World”但它有个隐藏陷阱输入路径/test/hosts.txt必须是HDFS路径不能是本地路径/etc/hosts。如果写错会报Input path does not exist: file:///etc/hosts。另外输出路径/test/output必须不存在否则报FileAlreadyExistsException。这是MapReduce的设计哲学输出必须是全新的避免脏数据。5. 常见问题与排查技巧实录那些让你凌晨三点还在看日志的“幽灵错误”部署Hadoop80%的时间花在解决“看起来配置全对但就是不工作”的问题上。这些问题往往藏在日志深处表象相似根源各异。以下是我在六次重装中总结的TOP 5高频问题附带精准定位方法和一招毙命的解决方案。5.1 问题start-dfs.sh后jps看不到DataNodehadoop-hadoop-datanode-master.log里只有ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain无更多线索排查思路DataNode启动失败但日志没报具体错说明问题发生在JVM加载阶段之前。最可能是hadoop-env.sh里JAVA_HOME没设对或者HADOOP_OPTS里加了非法JVM参数。精准定位查看hadoop-env.sh确认export JAVA_HOME/opt/java/jdk-11.0.227-jre这一行没被注释且路径真实存在。执行hadoop classpath看输出里是否有/opt/java/...路径。如果没有说明JAVA_HOME没生效。手动启动DataNode捕获完整错误hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode观察终端实时输出。一招毙命在hadoop-env.sh顶部强制指定JAVA_HOME并添加调试参数export JAVA_HOME/opt/java/jdk-11.0.227-jre export HADOOP_OPTS-Djava.net.preferIPv4Stacktrue -Xlog:gc*:file/home/hadoop/hadoop/logs/gc.log:time,tags:filecount5,filesize100M-Djava.net.preferIPv4Stacktrue强制用IPv4避免CentOS 7上IPv6解析超时导致DataNode卡住。-Xlog:gc开启GC日志能快速判断是否是内存不足引发的JVM崩溃。5.2 问题NameNode Web UI (:9870) 打不开但jps能看到NameNode进程netstat -tuln | grep 9870显示端口未监听排查思路NameNode进程活着但没绑定端口说明它启动后立即异常退出而jps只显示进程PID不反映进程健康状态。真正的日志在hadoop-root-namenode-master.log注意是root不是hadoop用户。精准定位tail -100 /home/hadoop/hadoop/logs/hadoop-root-namenode-master.log搜索关键词ERROR、FATAL、Caused by。最常见原因是/home/hadoop/hadoop/dfs/name目录权限不对或/etc/hosts里FQDN解析失败。一招毙命NameNode启动时会尝试创建/home/hadoop/hadoop/dfs/name/current/VERSION文件。如果该目录是root所有hadoop用户无写权限NameNode会静默失败。执行sudo chown -R hadoop:hadoop /home/hadoop/hadoop/dfs/name sudo -u hadoop hdfs namenode -format # 强制重格式化 stop-dfs.sh start-dfs.sh5.3 问题hdfs dfs -ls /报Connection refused但jps看到NameNodenetstat -tuln | grep 9000也显示端口监听排查思路fs.defaultFS配置的地址hdfs://master.hadoop:9000能被NameNode绑定但客户端解析master.hadoop时得到的IP不是127.0.0.1而是其他网卡IP如192.168.1.100而该IP在/etc/hosts里没映射到master.hadoop。精准定位在客户端机器就是你执行hdfs dfs的这台执行ping master.hadoop看解析出的IP。对比/etc/hosts里master.hadoop对应的IP是否一致。执行hadoop fs -ls hdfs://127.0.0.1:9000/如果成功证明是DNS解析问题。一招毙命在/etc/hosts里确保master.hadoop只映射到本机IP192.168.56.101且127.0.0.1那一行不包含master.hadoop。Hadoop要求FQDN必须解析到非127.0.0.1的IP否则认为是“回环地址”拒绝服务。5.4 问题YARN ResourceManager Web UI (:8088) 打不开jps看不到ResourceManager但yarn-resourcemanager-master.log里只有INFO日志无ERROR排查思路ResourceManager启动慢或被其他进程抢占了8088端口。INFO日志刷屏说明它还在初始化没到报错阶段。精准定位lsof -i :8088看哪个进程占用了8088。yarn --daemon start resourcemanager手动启动并观察终端输出。检查yarn-site.xml中yarn.resourcemanager.hostname是否与/etc/hosts匹配。一招毙命ResourceManager默认启动超时是10分钟。如果它卡在“Waiting for RM to start...”说明ZooKeeper如果启用了HA或数据库如果启用了RM状态存储没连上。临时关闭状态存储在yarn-site.xml中添加property nameyarn.resourcemanager.recovery.enabled/name valuefalse/value /property然后重启YARN。等集群跑通后再启用恢复机制。5.5 问题yarn jar提交作业后yarn application -list显示ACCEPTED但一直不变成RUNNINGyarn node -list显示NodeManager状态为UNHEALTHY排查思路NodeManager认为自己“不健康”拒绝接收Container。最常见的原因是磁盘空间不足或健康检查脚本失败。精准定位yarn node -list -all看Node-Http-Address列访问该地址如http://master.hadoop:8042查看NodeManager UI。在UI里点“About”看“Health Report”字段。查/home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-master.log搜索health。一招毙命NodeManager默认每10秒执行一次健康检查脚本/home/hadoop/hadoop/etc/hadoop/container-executor.cfg。如果该文件不存在或权限不对NodeManager会标记自己为UNHEALTHY。创建一个最小化配置echo [yarn] /home/hadoop/hadoop/etc/hadoop/container-executor.cfg echo banned.usersroot /home/hadoop/hadoop/etc/hadoop/container-executor.cfg echo min.user.id1000 /home/hadoop/hadoop/etc/hadoop/container-executor.cfg sudo chown root:root /home/hadoop/hadoop/etc/hadoop/container-executor