Задания успешно завершаются, хотя возникает IOException

Я получаю различные IOException на своем главном узле при запуске GridMix, и мне интересно, действительно ли это то, о чем я должен беспокоиться, или это что-то временное, когда мои задания заканчиваются успешно:

IOException: Bad connect ack with firstBadLink: \
java.io.IOException: Bad response ERROR for block BP-49483579-10.0.1.190-1449960324681:blk_1073746606_5783 from datanode 10.0.1.192:50010
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer$ResponseProcessor.run(DFSOutputStream.java:819)

2 ответа

Решение

Я не могу быть уверен, пока не пойму вашу полную настройку, но высока вероятность того, что эти исключения возникают при добавлении к настройке конвейера, с точки зрения кода, вы можете сказать, что stage == BlockConstructionStage.PIPELINE_SETUP_APPEND,

В любом случае, поскольку ваши задания успешно завершаются, вам не нужно беспокоиться, и почему он успешно завершается, потому что при попытке открыть DataOutputStream для конвейера DataNode и возникает какое-то исключение, он продолжает пытаться, пока конвейер не будет настроен.

Исключение происходит из org.apache.hadoop.hdfs.DFSOutputStream и ниже приведены важные фрагменты кода для вашего понимания.

 private boolean createBlockOutputStream(DatanodeInfo[] nodes, long newGS, boolean recoveryFlag) {
    //Code..
    if (pipelineStatus != SUCCESS) {
      if (pipelineStatus == Status.ERROR_ACCESS_TOKEN) {
        throw new InvalidBlockTokenException(
            "Got access token error for connect ack with firstBadLink as "
                + firstBadLink);
      } else {
        throw new IOException("Bad connect ack with firstBadLink as "
            + firstBadLink);
      }
    }
    //Code..
}

Сейчас, createBlockOutputStream вызывается из setupPipelineForAppendOrRecovery и в комментарии к коду для этого метода упоминается: "Он продолжает пытаться, пока не будет настроен конвейер".

/**
 * Open a DataOutputStream to a DataNode pipeline so that 
 * it can be written to.
 * This happens when a file is appended or data streaming fails
 * It keeps on trying until a pipeline is setup
 */
private boolean setupPipelineForAppendOrRecovery() throws IOException {
    //Code..
    while (!success && !streamerClosed && dfsClient.clientRunning) {
        //Code..
        success = createBlockOutputStream(nodes, newGS, isRecovery);
    }
    //Code..
}

И если вы пройдете через полный org.apache.hadoop.hdfs.DFSOutputStream В коде вы поймете, что пробная установка конвейера будет продолжаться, пока конвейер не будет создан для добавления или нового использования.

Если вы хотите справиться с этим, то вы можете попробовать настроить dfs.datanode.max.xcievers собственность от hdfs-site.xml Максимум людей сообщили о решении из того же. Обратите внимание, что вам необходимо перезапустить сервисы hadoop после того, как вы установите свойство.

<property>
        <name>dfs.datanode.max.xcievers</name>
        <value>8192</value>
</property>

Игнорируй это?

try {
  ...
} catch (IOException iox) {
  //***NOP***
}
Другие вопросы по тегам