hadoop 이상: 지금까지 해결된 가장 까다로운 이상 (java.io.IOException: Incompatible clusterIDs)

3298 단어 exception
(주의: 본인이 사용한 버전은hadoop2.2.0으로 이전 버전과 이 버전의 해결 방법이 다르다)
예외:
9 (storage id DS-2102177634-172.16.102.203-50010-1384415799536) service to cluster1/172.16.102.201:9000

java.io.IOException: Incompatible clusterIDs in /home/grid/hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0/yarn_data/dfs/data: namenode clusterID = CID-c833e211-a141-41c9-b0b4-5fbfcffeb5bf; datanode clusterID = CID-0048bbc6-49f8-44dc-bd65-00dbd35e70b7

        at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:391)

        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:191)

        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:219)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:837)

        at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:808)

        at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:280)

        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:222)

        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:664)

        at java.lang.Thread.run(Thread.java:744

 
오류 원인:
hadoop의 업그레이드 기능은 Data-node가 버전 파일에 영구적인clusterID를 저장해야 합니다. Datanode가 시작될 때namenode의 버전 파일에 있는clusterID를 검사하고 일치시켜야 합니다. 만약 둘이 일치하지 않으면 "Incompatible clusterIDs"의 이상이 발생합니다.
namenode를 포맷할 때마다 새로운 cluster ID를 이길 수 있습니다. namenode만 포맷하고 이datanode를 포맷하지 않으면'java'가 나타납니다.io.IOException: Incompatible namespaceIDs "이상적입니다.
공식 CCR 참조[HDFS-107]
 
해결 방법:
이 이상은 공식 CCRs에서 찾을 수 있습니다: HDFS-107(formerly known asHADOOP-1212
solution1 Start from scratch
1. stop the full cluster
2. 문제가 발생한 datanode의 ${dfs.namenode.data.dir}/tmp/hadoop-${user}를 삭제합니다. 이 변수는 $HADOOP_CONF_DIR/아래의 hdfs-site.xml에 정의되어 있습니다.
3. namenode를 다시 포맷하면 hdfs에 있는 모든 데이터가 삭제됩니다!
4. restart the cluster
solution2 clusterID 수동 업데이트(기존 버전은namespaceID (MRV1) 업데이트)
1.namenode에서 ${dfs.namenode.name.dir}/current/VERSION에서 clusterID (${dfs.namenode.name.dir} 를 hdfs-site에서 찾습니다.xml에서 정의, 아래 동일)
2. 문제가 발생한 datanode에서 ${dfs.namenode.data.dir}/current/VERSION에서 clusterID를 찾아 1단계에서 얻은 clusterID로 덮어씁니다.
3. 문제 노드에서 datanode를 다시 시작합니다.
평주: 이 방법은 dfs를 포맷하지 않고 첫 번째 방법으로 한다. 그러고 보면 뇌장애만 솔루션1을 사용할 수 있다. 그리고 나는 대륙 사람들이 쓴 블로그를 많이 봤는데 하필이solution1로 이 문제를 해결하는 것을 선택했다.

좋은 웹페이지 즐겨찾기