Hadoop Namenode不能启动 dfs/name is in an inconsistent

本文解决了一个常见的Hadoop集群问题:Namenode无法启动。问题源于临时目录在重启后丢失,通过更改配置文件中的临时目录路径解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间自己的本机上搭的Hadoop环境(按文档的伪分布式),第一天还一切正常,后来发现每次重新开机以后都不能正常启动,

在start-dfs.sh之后jps一下发现namenode不能正常启动,按提示找到logs目录下namenode的启动log发现如下异常

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage di rectory does not exist or is not accessible. 
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:291) 
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97) 
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379) 
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162) 
2011-07-23 12:48:43,125 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException : Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible. 
at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:291) 
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97) 
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379) 
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153) 
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)
2011-07-23 12:48:43,126 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 

Directory does not exist?但是为什么刚装完时是存在的呢,抱着试试看的态度,再次执行。

hadoop namenode -format

执行之后再启动,namenode启动成功了,说明上面does not exist的目录在format namenode的时候重新建起来了,但是如果每次重启都要format namenode,也太不靠谱了,不止是麻烦,更大的麻烦是里面的数据不能总被无情的delete掉啊,问题必须解决。

Directory /tmp/hadoop-javoft/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.这 里的目录既然是在tmp下面的,回忆一下,tmp目录下的文件是临时文件会被定期删除的,貌似bug已经露出水面。那就重启计算机试试是不是因为这,重启 之前检查一下tmp目录下面确定几个format namenode之后应该有的目录都有的,重启之后,发现全部被删掉。在执行一次 start-dfs.sh,看到tmp目录下面建了一些目录,但是dfs/name目录仍然不存在,在start-dfs.sh时候建了一部分目录和文 件。而dfs/name需要在hadoop namenode -format时建立。问题清楚了。

解决方案就很简单,这些目录的位置都是根据hadoop.tmp.dir的位置确定的,所以只需要在conf/core-site.xml覆盖hadoop.tmp.dir的默认值即可:

...

<property>

   <name>hadoop.tmp.dir</name>

   <value>/home/javoft/Documents/hadoop/hadoop-${user.name}</value>

   <description>A base for other temporary directories.</description>

</property>

...

如此问题解决。。。

 

1、问题描述:
第三周课程中,测试web管理界面,发现连接不上。
用 jps命令检查管理节点发现 namenode没有启动
只有3个进程
7160 JobTracker
7097 SecondaryNameNode
7310 Jps

关闭重启:
stop-all.sh
start-all.sh

问题依旧。

现象总结:第一次执行正常,操作系统重启后namenode无法启动。

2、查找原因
1)查找日志(日志: /hadoop/hadoop-0.20.2/logs):
发现有如下记录:
NodeMetrics: Initializing NameNodeMeterics using context objectrg.apache.hadoo
p.metrics.spi.NullContext
2013-03-05 20:38:06,038 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem
: fsOwner=hadoop,hadoop
2013-03-05 20:38:06,038 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem
: supergroup=supergroup
2013-03-05 20:38:06,038 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem
: isPermissionEnabled=true
2013-03-05 20:38:06,062 INFO org.apache.hadoop.hdfs.server.namenode.metrics.FSNa
mesystemMetrics: Initializing FSNamesystemMetrics using context objectrg.apach
e.hadoop.metrics.spi.NullContext
2013-03-05 20:38:06,063 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem
: Registered FSNamesystemStatusMBean
2013-03-05 20:38:06,187 INFO org.apache.hadoop.hdfs.server.common.Storage: Stora
ge directory /tmp/hadoop-hadoop/dfs/name does not exist.
2013-03-05 20:38:06,189 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesyste
m: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tm
p/hadoop-hadoop/dfs/name is in an inconsistent state: storage directory does not
exist or is not accessible.
        at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(
FSImage.java:290)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDire
ctory.java:87)

2)检查/tmp目录发现确实没有hadoop-hadpp目录

3、问题解决:

现在问题比较明确了,是临时目录不存在导致。
/tmp/hadoop-hadoop/dfs/name是一个临时的文件夹,系统每次重启时都会进行删除,在配置文件中进行修改就可。

conf/core-site.xml
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/javoft/Documents/hadoop/hadoop-${user.name}</value>
    <description>A base for other temporary directories.</description>
</property>
注意:<value>的值根据自己的情况调整。(需要提前准备好,mkdir /hadoop/tmp)

重新格式化
stop-all.sh
(数据节点上的data目录也要重建)
bin/hadoop namenode -format
start-all.sh
jps检查已经正常。

重启操作系统测试,也正常,问题解决。

 

转自:https://blog.youkuaiyun.com/u010098331/article/details/50730474

<think>嗯,用户这次提出的问题是关于Hadoop2.x群中NameNode存储目录状态不一致的错误。从描述看,核心错误信息是"Directory...isinaninconsistentstate:storagedirectorydoesnotexistorisnotaccessible",这确实是个典型的HDFS元数据损坏问题。用户可能是个运维工程师或大数据开发人员,正在搭建或维护Hadoop群。ta特意提到这是Hadoop2版本的问题,说明对版本兼容性有意识。考虑到错误涉及namenode这种核心组件,用户此刻应该比较着急,毕竟namenode故障会导致整个HDFS不可用。深层需求其实是两个:一是快速恢复群可用性,二是避免数据丢失。所以除了给修复步骤,还要特别强调备份操作,并在相关建议里补充预防措施。用户上次讨论过hadoop基础配置,这次错误可能是配置调整后出现的。技术上,这个错误通常有三种成因:目录权限问题、磁盘故障或异常关机导致fsimage与edits不一致。需要引导用户先排除基础环境问题(权限/磁盘),再处理元数据一致性。特别要注意hadoop2和3的修复命令差异,用户明确要求针对hadoop2方案。想到几个关键点必须包含:1必须用hadoop2特有的`hdfsnamenode-importCheckpoint`方案2修复前目录权限检查指令示例要具体到ls-ld3需要解释为什么不能直接删tmp目录(会丢失未持久化数据)4给出检测存储目录配置的具体方法(hdfs-site.xml里dfs.namenode.name.dir)用户贴的引用内容里提到checkpoint目录问题,这个其实是SecondaryNameNode的报错,但用户核心问题是NameNode节点。所以修复重点要放在主namenode的存储目录(name.dir),而不是namesecondary。最后补充的预防措施对用户很重要,特别是HA建议——单点故障的namenode出问题概率高,用户如果频繁遇到这类错误,应该考虑升级到HA架构。</think> Hadoop 2.x 中 **NameNode 存储目录状态不一致错误**(如报错 `Storage directory does not exist or is not accessible`)通常由元数据损坏或配置问题导致。以下是系统化的解决步骤: --- ### **一、核心排查步骤** #### 1. **检查存储目录状态** ```bash # 检查目录是否存在(替换为实际路径) ls -ld /path/to/dfs/name # 验证权限(NameNode 用户需有读写权限) sudo -u hdfs ls -la /path/to/dfs/name/current/ ``` - 🔴 目录不存在 → **创建目录并赋权** ```bash mkdir -p /path/to/dfs/name/current chown -R hdfs:hadoop /path/to/dfs/name chmod 700 /path/to/dfs/name ``` #### 2. **检查 `hdfs-site.xml` 配置** ```xml <!-- 确认配置路径与实际路径一致 --> <property> <name>dfs.namenode.name.dir</name> <value>file:///path/to/dfs/name</value> </property> ``` - 修改后需同步所有节点并重启群。 #### 3. **检测磁盘空间** ```bash df -h /path/to/dfs # 确保存储目录所在磁盘空间 > 90% ``` --- ### **二、元数据修复** #### 1. **使用检查点恢复(无备份时)** ```bash # 切换到Hadoop用户执行 sudo -u hdfs hdfs namenode -importCheckpoint ``` - 触发条件: - 需在 `hdfs-site.xml` 启用检查点: ```xml <property> <name>fs.checkpoint.dir</name> <value>file:///path/to/checkpoint</value> </property> ``` #### 2. **从 SecondaryNameNode 恢复** ```bash # 1. 停止所有Hadoop服务 stop-all.sh # 2. 从SecondaryNameNode复制元数据 scp -r secondary_nn_host:/path/to/dfs/namesecondary/* /path/to/dfs/name/current/ # 3. 启动NameNode hdfs --daemon start namenode ``` #### 3. **格式化 NameNode(最终手段)** > ⚠️ **将清除所有元数据**,仅在其他方法无效时使用! ```bash hdfs namenode -format ``` --- ### **三、其他关键操作** 1. **查看详细错误日志** ```bash tail -100 $HADOOP_HOME/logs/hadoop-*-namenode-*.log | grep -i "inconsistent" ``` 2. **检查文件系统一致性** ```bash hdfs fsck / -files -blocks -locations ``` 3. **网络问题排查** - 确保各节点之间主机名解析正确(`/etc/hosts` 或 DNS) - 关闭防火墙: ```bash systemctl stop firewalld # CentOS ufw disable # Ubuntu ``` --- ### **四、预防措施** 1. **启用 NameNode HA(高可用)** ```xml <!-- hdfs-site.xml --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://nn1:8485;nn2:8485/mycluster</value> </property> ``` 2. **定期备份元数据** ```bash # 手动备份 hadoop dfsadmin -fetchImage /backup_path/image_backup ``` 3. **使用ZooKeeper监控** 配置 `AutoFailover` 自动切换主备节点。 --- ### **修复流程摘要** ```mermaid graph TD A[发现错误] --> B[检查存储目录] B --> C{目录可访问?} C -->|是| D[检查配置文件] C -->|否| E[修复权限/重建目录] D --> F{路径一致?} F -->|否| G[修正并重启] F -->|是| H[检查SecondaryNN/检查点] H --> I[复制元数据/恢复检查点] I --> J[重启群] H -->|无效| K[格式化NameNode] ``` > **注**:格式化操作会永久删除 HDFS 上的所有文件系统数据(但保留底层物理数据),需提前备份[^1]。建议优先尝试检查点恢复方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值