Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
Hadoop org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
오류 메시지는 다음과 같다.
2010-03-10 01:01:23,521 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /tmp/hadoop-root/dfs/name does not exist.
2010-03-10 01:01:23,522 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/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(FSDirectory.java:87)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:311)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:292)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:201)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:279)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:956)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:965)
2010-03-10 01:01:23,522 INFO org.apache.hadoop.ipc.Server: Stopping server on 9000
2010-03-10 01:01:23,524 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-root/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(FSDirectory.java:87)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:311)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:292)
at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:201)
at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:279)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:956)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:965)
2010-03-10 01:01:23,527 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException: ubuntu: ubuntu
hosts 파일에 있는 도메인과는 다른 갑자기 ubuntu 라는 호스트가 존재하지 않는 다는 메시지와 함께 디렉토리까지 찾을 수 없다는 메시지를 확인 할 수 있다.
시스템이 커지게 되면서 설정 하나 바뀔때마다 master, slave의 모든 아이피를 수정하는 문제나 추가 시켜야 하는 수고로움을 덜기 위해서 클러스터 설정 과정에서 대부분 hosts 파일을 수정해서 domain 을 이용하게 된다
이때 문제가 발생하게 된다.
클러스터의 각 masternode 와 slavenode 들은 domain 으로 통신을 하지만 그 주소는 hostname 으로 변환되어 요청이 이루어 지게 된다. ( log 를 통해서 확인 가능)
결국 hostname 과 hosts 의 각 노드의 이름을 동일시 시켜주면 문제는 해결된다.
hostname과 hosts 는 각각 /etc/hostname, /etc/hosts 에서 수정가능하다.
그래도 안되면 stop-all.sh한 후 /tmp./../dfs밑의 파일을 모두 지우고 hadoop namenode -format하여 주고 start-all.sh해주면 된다.
근데 서버 재기동하면 매번 이렇게 해줘야 하나???
--원인은 다음과 같다.. 그러므로 지우면 안된다면 다른곳을 저장소로 지정해줘야 함..
--> 디폴트 속성을 그대로 두면, 서버를 리부팅할 때 지금까지 사용한 데이터가 날아가게 된다(대부분의 운영체제는 재시작할 때 /tmp를 날린다).