hadoop-error:DiskChecker$DiskErrorException: Invalid volume failure config value

2605 단어 hadoop
2012-12-17 10:58:59,925 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: org.apache.hadoop.util.DiskChecker$DiskErrorException: Invalid
volume failure  config value: 3
        at org.apache.hadoop.hdfs.server.datanode.FSDataset.<init>(FSDataset.java:1025)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:414)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:305)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1606)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1546)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1564)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1690)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1707)

 
몇 대의 기계 집단을 새로 만들었는데, Datanode를 시작할 때 이 오류를 보고했습니다.
주요 원인은 dfs 때문이다.datanode.failed.volumes.tolerated 매개 변수가 3을 설정했습니다.
이 매개 변수의 의미: Datanode stops offering 서비스 전에 실패할 수 있는 volumes의 수입니다.By default any volume failure will cause a datanode to shutdown.
 
datanode는 디스크가 손상된 개수를 허용합니다. datanode는 시작할 때 dfs를 사용합니다.data.dir 아래에 설정된 폴더 (블록을 저장하는 데 사용됨), 사용할 수 없는 개수 > 위에 설정된 값이 있다면, 이 시작이 실패했습니다. 코드는: org.apache.hadoop.hdfs.server.datanode.FSDataset
 
public FSDataset(DataStorage storage, Configuration conf) throws IOException {
    this.maxBlocksPerDir = conf.getInt("dfs.datanode.numblocks", 64);
    
    // The number of volumes required for operation is the total number 
    // of volumes minus the number of failed volumes we can tolerate.
    final int volFailuresTolerated =
      conf.getInt("dfs.datanode.failed.volumes.tolerated", 0);
    String[] dataDirs = conf.getTrimmedStrings(DataNode.DATA_DIR_KEY);
    int volsConfigured = (dataDirs == null) ? 0 : dataDirs.length;
    int volsFailed = volsConfigured - storage.getNumStorageDirs();
    validVolsRequired = volsConfigured - volFailuresTolerated;

    if (volFailuresTolerated < 0 || volFailuresTolerated >= volsConfigured) {
      throw new DiskErrorException("Invalid volume failure "
          + " config value: " + volFailuresTolerated);
    }

 
때문에 dfs.data.dir는 디렉터리 하나만 맞췄기 때문에 dfs를datanode.failed.volumes.tolerated를 0으로 설정하면 문제가 해결됩니다.

좋은 웹페이지 즐겨찾기