Hadoop DataNode дает мне несовместимый идентификатор пространства имен

Когда я запускаю скрипт start-all.sh из моего главного узла, некоторые из моих узлов данных не запускаются; файл журнала сообщает об исключительной ситуации IOException: несовместимые идентификаторы пространства имен в /tmp/$MY_USER_NAME.

2 ответа

Решение

Когда NameNode отформатирован, генерируется идентификатор пространства имен, который по существу идентифицирует этот конкретный экземпляр распределенной файловой системы. Когда узлы DataNode впервые подключаются к узлу NameNode, они сохраняют этот идентификатор пространства имен вместе с блоками данных, поскольку блоки должны принадлежать определенной файловой системе.

Если впоследствии DataNode подключается к NameNode, а идентификатор пространства имен, который объявляет NameNode, не совпадает с идентификатором пространства имен, хранящимся в DataNode, он откажется работать с ошибкой "несовместимый идентификатор пространства имен". Это означает, что DataNode подключился к другому NameNode, и блоки, которые он хранит, не принадлежат этой распределенной файловой системе.

Обычно это означает, что вы как-то потеряли метаданные NameNode. Если у вас несколько установок HDFS, ваш DataNode может подключаться к неправильному NameNode. Если у вас есть только одна установка, то ваш NameNode либо работает с другим каталогом метаданных, либо вы каким-то образом потеряли метаданные и начали с недавно отформатированной файловой системы (что должно произойти только при запуске hadoop namenode -format). Попробуйте найти правильные метаданные NameNode или восстановить их из резервной копии.

Каждый раз, когда NameNode переформатирует, он генерирует новый ID пространства имен, и некоторые из ваших машин не получили памятку. Самый простой способ решить эту проблему - переформатировать распределенную файловую систему; извлеките любые файлы из HDFS, затем запустите rm -Rf /tmp/hadoop-$MY_USER_NAME на каждом сервере (путь к каталогу может отличаться в зависимости от вашей конфигурации). Тогда беги hadoop namenode -format с вашего главного сервера. После этого, bin/start-all.sh должен сделать свое дело.

Другие вопросы по тегам