Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
datanode因org.apache.hadoop.util.DiskChecker$DiskErrorException失败_Hadoop - Fatal编程技术网

datanode因org.apache.hadoop.util.DiskChecker$DiskErrorException失败

datanode因org.apache.hadoop.util.DiskChecker$DiskErrorException失败,hadoop,Hadoop,最近,我安装了Hadoop并格式化了namenode。namenode启动良好,但datanodes启动失败。这是datanode错误日志 STARTUP_MSG: build = git@github.com:hortonworks/hadoop.git -r 3091053c59a62c82d82c9f778c48bde5ef0a89a1; compiled by 'jenkins' on 2018-05-11T07:53Z STARTUP_MSG: java = 1.8.0_1

最近,我安装了Hadoop并格式化了namenode。namenode启动良好,但datanodes启动失败。这是datanode错误日志

  STARTUP_MSG:   build = git@github.com:hortonworks/hadoop.git -r 3091053c59a62c82d82c9f778c48bde5ef0a89a1; compiled by 'jenkins' on 2018-05-11T07:53Z
STARTUP_MSG:   java = 1.8.0_181
************************************************************/
2018-10-17 15:08:42,769 INFO  datanode.DataNode (LogAdapter.java:info(47)) - registered UNIX signal handlers for [TERM, HUP, INT]
2018-10-17 15:08:43,665 INFO  checker.ThrottledAsyncChecker (ThrottledAsyncChecker.java:schedule(122)) - Scheduling a check for [DISK]file:/hadoop/hdfs/data/
2018-10-17 15:08:43,682 ERROR datanode.DataNode (DataNode.java:secureMain(2692)) - Exception in secureMain
org.apache.hadoop.util.DiskChecker$DiskErrorException: Invalid value configured for dfs.datanode.failed.volumes.tolerated - 1. Value configured is >= to the number of configured volumes (1).
    at org.apache.hadoop.hdfs.server.datanode.checker.StorageLocationChecker.check(StorageLocationChecker.java:174)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2584)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2493)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2540)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2685)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2709)
2018-10-17 15:08:43,688 INFO  util.ExitUtil (ExitUtil.java:terminate(124)) - Exiting with status 1
2018-10-17 15:08:43,696 INFO  datanode.DataNode (LogAdapter.java:info(47)) - SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at hdp2.com/192.168.100.12

dfs.datanode.failed.volumes.tolerated-1表示什么?是什么导致了这样的错误?

检查hdfs-site.xml。此属性必须设置为0或更高:

dfs.datanode.failed.volumes.tolerated
在datanode停止之前允许失败的卷数 提供服务。默认情况下,任何卷故障都将导致datanode 关闭


当我试图解决这个问题时,我搜索了源代码

 final int volFailuresTolerated =
  conf.getInt(DFSConfigKeys.DFS_DATANODE_FAILED_VOLUMES_TOLERATED_KEY,
              DFSConfigKeys.DFS_DATANODE_FAILED_VOLUMES_TOLERATED_DEFAULT);

String[] dataDirs = conf.getTrimmedStrings(DFSConfigKeys.DFS_DATANODE_DATA_DIR_KEY);

int volsConfigured = (dataDirs == null) ? 0 : dataDirs.length;
int volsFailed = volsConfigured - storage.getNumStorageDirs();
this.validVolsRequired = volsConfigured - volFailuresTolerated;

if (volFailuresTolerated < 0 || volFailuresTolerated >= volsConfigured) {
  throw new DiskErrorException("Invalid volume failure "
      + " config value: " + volFailuresTolerated);
}
if (volsFailed > volFailuresTolerated) {
  throw new DiskErrorException("Too many failed volumes - "
      + "current valid volumes: " + storage.getNumStorageDirs() 
      + ", volumes configured: " + volsConfigured 
      + ", volumes failed: " + volsFailed
      + ", volume failures tolerated: " + volFailuresTolerated);
}
如你所见

在datanode停止之前允许失败的卷数 提供服务。默认情况下,任何卷故障都将导致datanode 关闭

这是datanode可以容忍的磁盘损坏数量

在Hadoop集群中,磁盘只读或损坏经常发生。datanode将使用在dfs.datanode.data.dir下配置的文件夹,用于在启动时存储块。如果存在一些无法使用的值和上面配置的数字,DataNode将无法启动

在我的hadoop环境中,fs.datanode.data.dir配置为1个磁盘,因此dfs.datanode.failed.volumes.tolerated设置为1,这允许磁盘损坏。该行下只有一个磁盘,并且volFailuresTolerated和volsConfigured的值都是1,因此它将导致代码失败