Если вы посмотрите ближе на код DFSClient.checkOpen
, вы увидите следующее:
void checkOpen() throws IOException {
if (!clientRunning) {
IOException result = new IOException("Filesystem closed");
throw result;
}
}
Давайте найдем все методы доступа поля clientRunning
.Только метод close
действительно меняет его.Давайте посмотрим на это:
@Override
public synchronized void close() throws IOException {
try {
if(clientRunning) {
closeAllFilesBeingWritten(false);
clientRunning = false;
getLeaseRenewer().closeClient(this);
// close connections to the namenode
closeConnectionToNamenode();
}
} finally {
if (provider != null) {
provider.close();
}
}
}
Итак, основная проблема в вашей работе состоит в том, что она пытается записать значение, хотя FS уже закрыта.
Убедитесь, что вы не закрываетеФС, прежде чем делать какую-либо работу.Вы также можете повысить уровень ведения журнала, чтобы найти причину.