복붙노트

[HADOOP] 왜 Hadoop과 호환되지 않는 네임 스페이스 ID 문제가 발생합니까?

HADOOP

왜 Hadoop과 호환되지 않는 네임 스페이스 ID 문제가 발생합니까?

이것은 상당히 잘 문서화 된 오류이며 수정이 쉽지만 Hadoop 데이터 노드 NamespaceID가 너무 쉽게 망가질 수있는 이유 또는 Hadoop이 데이터 노드를 시작할 때 NamespaceID를 할당하는 방법을 아는 사람이 있습니까?

여기에 오류가 있습니다.

2010-08-06 12:12:06,900 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /Users/jchen/Data/Hadoop/dfs/data: namenode namespaceID = 773619367; datanode namespaceID = 2049079249
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:233)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:148)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:298)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:216)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1283)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1238)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1246)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1368)

이것은 단일 노드 인스턴스에서도 발생하는 것으로 보입니다.

해결법

  1. ==============================

    1.네임 노드는 HDFS를 포맷 할 때마다 새로운 네임 스페이스 ID를 생성합니다. 나는 이것이 현재 버전과 이전 버전을 구분할 가능성이 있다고 생각합니다. namespaceID가 모든 형식화 된 인스턴스에 대해 고유하지 않은 경우 불가능할 수도있는 무언가가 올바르지 않으면 이전 버전으로 항상 롤백 할 수 있습니다.

    네임 노드는 HDFS를 포맷 할 때마다 새로운 네임 스페이스 ID를 생성합니다. 나는 이것이 현재 버전과 이전 버전을 구분할 가능성이 있다고 생각합니다. namespaceID가 모든 형식화 된 인스턴스에 대해 고유하지 않은 경우 불가능할 수도있는 무언가가 올바르지 않으면 이전 버전으로 항상 롤백 할 수 있습니다.

    NamespaceID는 namenode와 datanode를 연결합니다. 데이터 노드는 namespaceID를 통해 namenode에 바인딩됩니다.

  2. ==============================

    2.이 문제는 잘 설명되어 있으며 다음의 훌륭한 가이드에서 도움이되었습니다.

    이 문제는 잘 설명되어 있으며 다음의 훌륭한 가이드에서 도움이되었습니다.

  3. ==============================

    3.나는 이것도 얻고 있었고, core-site.xml 대신에 hdfs-site.xml에 내 구성을 넣으려고했다.

    나는 이것도 얻고 있었고, core-site.xml 대신에 hdfs-site.xml에 내 구성을 넣으려고했다.

    그 오류없이 지금 멈추고 시작하는 것 같습니다.

    [편집, 2010-08-13]

    실제로 이것은 여전히 ​​일어나고 있으며 서식으로 인해 발생합니다.

    포맷을 할 때 VERSION 파일을 보면 namenode에 새로운 namespaceID가 할당되지만 데이터 노드에는 할당되지 않는다는 것을 알 수 있습니다.

    빠른 해결책은 형식 이전에 데이터 노드의 VERSION을 삭제하는 것입니다.

    [TIDE, 2010-08-13]

  4. ==============================

    4.HDFS를 포맷 할 때도이 오류가 발생했습니다. 시작하지 않은 datanode 외에도 jobtracker도 시작되지 않습니다. 데이터 노드의 경우 수동으로 namespaceid를 변경했습니다. jobtracker의 경우 / mapred / system (hdfs 사용자로서) 디렉토리를 생성하고 소유자를 mapred로 변경해야합니다. 구직자는 포맷 이후에 실행을 시작해야합니다.

    HDFS를 포맷 할 때도이 오류가 발생했습니다. 시작하지 않은 datanode 외에도 jobtracker도 시작되지 않습니다. 데이터 노드의 경우 수동으로 namespaceid를 변경했습니다. jobtracker의 경우 / mapred / system (hdfs 사용자로서) 디렉토리를 생성하고 소유자를 mapred로 변경해야합니다. 구직자는 포맷 이후에 실행을 시작해야합니다.

  5. ==============================

    5.다음 오류가 발생했습니다 : "/ home / hadoop / data / dn에 호환되지 않는 namespaceID가 있습니다",

    다음 오류가 발생했습니다 : "/ home / hadoop / data / dn에 호환되지 않는 namespaceID가 있습니다",

    나는 클러스터에 네 개의 데이터 노드를 가지고 있는데, 시작 --dfs.sh를 시작한 후에 하나의 datanode 만 사용되었다. 그래서 해결책은 nn과 jt에서 서비스를 중지하고 모든 datanode에서 dn 구성 dhm hdfs-site를 제거하고 dn 파일 (/ home / hadoop / data / dn)을 입력하고 namenode를 포맷하십시오. 그런 다음 hdfs-site에 datanode 속성을 모든 데이터 노드에 추가하고 namenode를 한 번만 포맷하십시오. 이제 모든 데이터 노드가 확실하게 서비스를 시작하십시오.

  6. from https://stackoverflow.com/questions/3425688/why-does-the-hadoop-incompatible-namespaceids-issue-happen by cc-by-sa and MIT license