Hadoop namenode не может загрузить fsimage - PullRequest
0 голосов
/ 05 марта 2019

У меня проблемы с запуском hdfs. Мой кластер состоит из 3 узлов на облачной платформе Google. 1 - активный наменоде. Предполагается, что узел 2 будет резервным наменодом и датододом. Узел 3 - это просто датанода.

Когда я запускаю hdfs, мой активный namenode работает и работает, но мой резервный namenode не работает, если я пытаюсь открыть пользовательский интерфейс на node1: 50070, все выглядит отлично, но если я пытаюсь использовать node2: 50070, он не может подключиться (сайт не может быть достигнут). При проверке пользовательского интерфейса datanodes, когда я открываю node2: 50075, я вижу, что namenode 1 находится в состоянии RUNNING, в то время как namenode 2 находится в состоянии CONNECTING (и он продолжает быть таким, когда число сердечных сокращений возрастает вечно).

Это довольно забавно, потому что у нас есть другая среда тестирования с точно такой же конфигурацией hdfs, но у нас там нет проблем. Вот ниже лог с ошибкой:

2019-03-05 14:45:02,481 ERROR org.apache.hadoop.hdfs.server.namenode.FSImage: Failed to load image from FSImageFile(file=/persist/hdfs/namenode/current/fsimage_0000000000000951913, cpktTxId=0000000000000951913)
java.io.IOException: Premature EOF from inputStream
    at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:208)
    at org.apache.hadoop.hdfs.server.namenode.FSImageFormat$LoaderDelegator.load(FSImageFormat.java:220)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:931)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:915)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImageFile(FSImage.java:788)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:718)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:316)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1044)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:707)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:635)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:696)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:906)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:885)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1626)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1694)
2019-03-05 14:45:02,534 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem write lock held for 12202 ms via
java.lang.Thread.getStackTrace(Thread.java:1559)
org.apache.hadoop.util.StringUtils.getStackTrace(StringUtils.java:1033)
org.apache.hadoop.hdfs.server.namenode.FSNamesystemLock.writeUnlock(FSNamesystemLock.java:252)
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.writeUnlock(FSNamesystem.java:1572)
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1073)
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:707)
org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:635)
org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:696)
org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:906)
org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:885)
org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1626)
org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1694)
    Number of suppressed write-lock reports: 0
    Longest write-lock held interval: 12202
2019-03-05 14:45:02,535 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException: Failed to load FSImage file, see error(s) above for more info.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:732)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:316)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1044)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:707)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:635)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:696)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:906)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:885)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1626)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1694)
2019-03-05 14:45:02,555 INFO org.mortbay.log: Stopped HttpServer2$SelectChannelConnectorWithSafeStartup@core-acc2:50070
2019-03-05 14:45:02,563 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Stopping NameNode metrics system...
2019-03-05 14:45:02,564 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system stopped.
2019-03-05 14:45:02,565 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system shutdown complete.
2019-03-05 14:45:02,565 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.io.IOException: Failed to load FSImage file, see error(s) above for more info.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.loadFSImage(FSImage.java:732)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:316)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1044)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:707)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:635)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:696)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:906)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:885)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1626)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1694)
2019-03-05 14:45:02,568 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1
2019-03-05 14:45:02,595 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at

(я обрезал журнал при копировании).

Как видите, ошибка очевидна, но 2 не может загрузить fsimage. Тем не менее, я не уверен, что причина связана только с самим fsimage или их больше, поскольку я вижу исключение EOF и сообщение об интервале удержания блокировки записи, которого я раньше не видел.

Что я заметил / попробовал:

  1. Я проверил, присутствовал ли fsimage и находился ли он в правильном каталоге, и да, fsimage был там.
  2. Я заметил, что количество edits_xxxxxx-xxxxxx в каталоге hdfs / namenode / current узла 2 было действительно огромным по сравнению с узлом 1, но я не трогал ни один из файлов.
  3. Я попытался скопировать каталог журнала узла 1, чтобы заменить каталог в узле 2, чтобы посмотреть, может ли исправный журнал помочь, но он не работает.
  4. Я попытался запустить hdfs namenode -recover, но я практически получил тот же вывод журнала.

Я где-то читал, что это может быть из-за тайм-аута или количества потоков, создаваемых Java, или чего-то подобного, у вас есть какие-либо предложения?

Заранее спасибо.

...