Programming/Hadoop

[Hadoop] hdfs namenode format error

bisi 2020. 9. 17. 17:09

현상

hdfs 명령어로 namenode format 진행시, 발생한 문제이다.

2020-07-03 10:47:32,709 INFO namenode.NameNode: createNameNode [-format]
2020-07-03 10:47:32,897 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2020-07-03 10:47:33,534 ERROR common.Util: Syntax error in URI \hadoop\namenode. Please check hdfs configuration.
java.net.URISyntaxException: Illegal character in path at index 0: \hadoop\namenode
        at java.net.URI$Parser.fail(URI.java:2848)
        at java.net.URI$Parser.checkChars(URI.java:3021)
        at java.net.URI$Parser.parseHierarchical(URI.java:3105)
        at java.net.URI$Parser.parse(URI.java:3063)
        at java.net.URI.<init>(URI.java:588)
        at org.apache.hadoop.hdfs.server.common.Util.stringAsURI(Util.java:91)
        at org.apache.hadoop.hdfs.server.common.Util.stringCollectionAsURIs(Util.java:139)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getStorageDirs(FSNamesystem.java:1521)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNamespaceDirs(FSNamesystem.java:1476)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:1162)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1645)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1755)
2020-07-03 10:47:33,535 INFO common.Util: Assuming 'file' scheme for path \hadoop\namenode in configuration.
2020-07-03 10:47:33,542 ERROR common.Util: Syntax error in URI \hadoop\namenode. Please check hdfs configuration.
java.net.URISyntaxException: Illegal character in path at index 0: \hadoop\namenode
        at java.net.URI$Parser.fail(URI.java:2848)
        at java.net.URI$Parser.checkChars(URI.java:3021)
        at java.net.URI$Parser.parseHierarchical(URI.java:3105)
        at java.net.URI$Parser.parse(URI.java:3063)
        at java.net.URI.<init>(URI.java:588)
        at org.apache.hadoop.hdfs.server.common.Util.stringAsURI(Util.java:91)
        at org.apache.hadoop.hdfs.server.common.Util.stringCollectionAsURIs(Util.java:139)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getStorageDirs(FSNamesystem.java:1521)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNamespaceEditsDirs(FSNamesystem.java:1566)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getNamespaceEditsDirs(FSNamesystem.java:1535)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:1168)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1645)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1755)
2020-07-03 10:47:33,543 INFO common.Util: Assuming 'file' scheme for path \hadoop\namenode in configuration.
Formatting using clusterid: CID-48338ebc-ee81-4847-92ef-859e78319aa6

해결 방법

원인은 hdfs-site.xml 파일에서 파일경로 설정시, 상대경로, 절대경로 문제였다.

dfs는 hadoop 소스가 상주하는 드라이브에 대한 경로를 상대적으로 가지고 있기 때문이다.

해결하기 위해선 드라이브를 사용하고 있다면/d:/ 앞에 접두사 슬래시를 사용하면 된다.

다른 방법으로는 datanode, namenode의 경로를 따로 설정하지 않으면 루트 폴더에 자동으로 생성되는 점을 활용하여 경로 옵션을 주지 않는 방법이 있다.

참고

hadoop에서 네임 노드를 시작하지 못했습니까?

Failed to start namenode in hadoop?