Почему возникает проблема несовместимых имен пространства имен Hadoop?

Это довольно хорошо документированная ошибка, и исправление прост, но кто-нибудь знает, почему Hadoop Datanode NamespaceIDs может быть легко запутано или как Hadoop назначает Имена пространства имен при запуске datanodes?

Здесь ошибка:

2010-08-06 12:12:06,900 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /Users/jchen/Data/Hadoop/dfs/data: namenode namespaceID = 773619367; datanode namespaceID = 2049079249
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:233)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:148)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:298)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:216)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1283)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1238)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1246)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1368)

Кажется, что это случается только для одиночных экземпляров node.

Ответы

Ответ 1

Namenode генерирует новый namespaceID каждый раз, когда вы форматируете HDFS. Я думаю, что это возможно, чтобы отличать текущую версию и предыдущую версию. Вы всегда можете откат к предыдущей версии, если что-то не подходит, что может быть невозможно, если namespaceID не уникален для каждого форматированного экземпляра.

NamespaceID также подключает namenode и datanodes. Datanodes связывают себя с namenode через namespaceID

Ответ 2

эта проблема хорошо объяснена и помогла в следующем fine guide

Ответ 3

Я тоже получал это, а затем я попытался поместить свою конфигурацию в hdfs-site.xml вместо core-site.xml.

Кажется, что мы остановимся и начнем без этой ошибки.

[EDIT, 2010-08-13]

На самом деле это все еще происходит, и это вызвано форматированием.

Если вы просматриваете файлы VERSION при форматировании, вы увидите (по крайней мере, я), что namenode получает новый идентификатор namespaceID, но данные node этого не делают.

Быстрое решение - удалить VERSION для datanode перед форматированием.

[TIDE, 2010-08-13]

Ответ 4

Когда я отформатировал свой HDFS, я также столкнулся с этой ошибкой. Помимо того, что datanode не запускается, jobtracker также не запускается. Для datanode я вручную изменил namespaceid; но для jobtracker нужно создать каталог /mapred/system (as hdfs user) и изменить его владельца на mapred. После форматирования программа jobtracker должна начать работать.

Ответ 5

Я получил следующую ошибку: "Несовместимые идентификаторы имен в /home/hadoop/data/dn ",

У меня есть четыре узла данных в кластере, после запуска start -dfs.sh используется только один тип данных, поэтому решение заключалось в прекращении обслуживания в nn и jt и удалении dn конфигурации drom hdfs-сайта во всех datanodes, удалите dn файл (/home/hadoop/data/dn) и отформатируйте namenode. Затем снова добавьте свойства datanode в hdfs-сайт во всех datanodes и форматируйте namenode onceagain. попробуйте запустить сервисы, теперь все узлы данных наверняка будут