Узлы данных не запущены

Я пытаюсь настроить Hadoop версии 0.20.203.0 в псевдораспределенной конфигурации, используя следующее руководство:

http://www.javacodegeeks.com/2012/01/hadoop-modes-explained-standalone.html

После запуска сценария start-all.sh я запускаю "jps".

Я получаю этот вывод:

4825 NameNode
5391 TaskTracker
5242 JobTracker
5477 Jps
5140 SecondaryNameNode

Когда я пытаюсь добавить информацию в hdfs, используя:

bin/hadoop fs -put conf input

Я получил ошибку:

hadoop@m1a2:~/software/hadoop$ bin/hadoop fs -put conf input
12/04/10 18:15:31 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:596)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:523)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1383)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1379)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:416)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1377)

        at org.apache.hadoop.ipc.Client.call(Client.java:1030)
        at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:224)
        at $Proxy1.addBlock(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
        at $Proxy1.addBlock(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3104)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2975)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446)

12/04/10 18:15:31 WARN hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null
12/04/10 18:15:31 WARN hdfs.DFSClient: Could not get block locations. Source file "/user/hadoop/input/core-site.xml" - Aborting...
put: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1
12/04/10 18:15:31 ERROR hdfs.DFSClient: Exception closing file /user/hadoop/input/core-site.xml : org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:596)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:523)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1383)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1379)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:416)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1377)

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:596)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:523)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1383)
        at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1379)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:416)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1377)

        at org.apache.hadoop.ipc.Client.call(Client.java:1030)
        at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:224)
        at $Proxy1.addBlock(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)
        at $Proxy1.addBlock(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3104)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2975)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255)
        at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446)

Я не совсем уверен, но полагаю, что это может быть связано с тем, что узел данных не работает.

Кто-нибудь знает, что я сделал не так, или как решить эту проблему?

РЕДАКТИРОВАТЬ: Это файл datanode.log:

2012-04-11 12:27:28,977 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting DataNode
STARTUP_MSG:   host = m1a2/139.147.5.55
STARTUP_MSG:   args = []
STARTUP_MSG:   version = 0.20.203.0
STARTUP_MSG:   build = http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203 -r 1099333; compiled by 'oom' on Wed May  4 07:57:50 PDT 2011
************************************************************/
2012-04-11 12:27:29,166 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2012-04-11 12:27:29,181 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2012-04-11 12:27:29,183 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2012-04-11 12:27:29,183 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2012-04-11 12:27:29,342 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2012-04-11 12:27:29,347 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2012-04-11 12:27:29,615 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-hadoop/dfs/data: namenode namespaceID = 301052954; datanode namespaceID = 229562149
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:354)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:268)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1480)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1419)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1437)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1563)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1573)

2012-04-11 12:27:29,617 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at m1a2/139.147.5.55
************************************************************/

person Aaron S    schedule 10.04.2012    source источник
comment
Вы пытались запустить узел данных? Попробуйте sudo /etc/init.d/hadoop-0.20-datanode start   -  person Chris Shain    schedule 11.04.2012
comment
И если есть, можете выложить логи для узла данных?   -  person Chris White    schedule 11.04.2012
comment
речь идет о узле данных ... можете ли вы обновить журналы узла данных, а также файлы конфигурации.   -  person Abhishek bhutra    schedule 11.04.2012
comment
Я попытался запустить datanode, используя bin/hadoop-daemon.sh start datanode'code, datanode.log содержит ошибку ввода-вывода, которую я добавил в сообщение выше.   -  person Aaron S    schedule 11.04.2012
comment
4825 NameNode 5391 TaskTracker 5242 JobTracker 5477 Jps 5140 SecondaryNameNode Посмотрите, ваш узел данных не работает :)   -  person Infinity    schedule 26.06.2013


Ответы (10)


Эта ошибка, которую вы получаете в журнале DN, описана здесь: http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#java-io-ioexception-incompatible-namespaceids

С этой страницы:

На данный момент существует два обходных пути, как описано ниже.

Временное решение 1. Начните с нуля

Я могу засвидетельствовать, что следующие шаги устраняют эту ошибку, но побочные эффекты вас (и меня тоже) не обрадуют. Грубый обходной путь, который я нашел, заключается в следующем:

  1. Остановить кластер
  2. Удалите каталог данных на проблемном DataNode: каталог указан в dfs.data.dir в conf/hdfs-site.xml; если вы следовали этому руководству, соответствующий каталог — /app/hadoop/tmp/dfs/data
  3. Переформатируйте NameNode (ПРИМЕЧАНИЕ: при этом все данные HDFS теряются!)
  4. Перезапустите кластер

Когда удаление всех данных HDFS и запуск с нуля не кажется хорошей идеей (это может быть нормально во время первоначальной настройки/тестирования), вы можете попробовать второй подход.

Временное решение 2: обновление namespaceID проблемных узлов данных

Большое спасибо Jared Stehler за следующее предложение. Я еще не проверял это сам, но не стесняйтесь попробовать и отправить мне свой отзыв. Этот обходной путь является «минимально инвазивным», поскольку вам нужно отредактировать только один файл на проблемных узлах данных:

  1. Остановить узел данных
  2. Отредактируйте значение namespaceID в /current/VERSION, чтобы оно соответствовало значению текущего NameNode.
  3. Перезапустите узел данных

Если вы следовали инструкциям в моих руководствах, полный путь к соответствующим файлам:

NameNode: /app/hadoop/tmp/dfs/name/current/VERSION

DataNode: /app/hadoop/tmp/dfs/data/current/VERSION

(фон: dfs.data.dir по умолчанию имеет значение

${hadoop.tmp.dir}/dfs/data, и мы устанавливаем hadoop.tmp.dir

в этом руководстве в /app/hadoop/tmp).

Если вам интересно, как выглядит содержимое VERSION, вот одно из моих:

# содержимое /current/VERSION

ID пространства имен = 393514426

идентификатор хранилища = DS-1706792599-10.10.10.1-50010-1204306713481

cTime=1215607609074

storageType=DATA_NODE

layoutVersion=-13

person Chris Shain    schedule 11.04.2012
comment
Так что это сработало для меня. Однако, прежде чем получить ошибку, он работал нормально. Что заставило меня оказаться в плохом состоянии, чтобы мне не пришлось снова что-то исправлять? Ошибка произошла после выключения всего. - person nick; 10.07.2013
comment
Я пойду дальше, что после того, как я использовал это исправление и закрыл вчера, выскочила та же ошибка. Я запускаю это на Mac, если это имеет значение (на самом деле не должно). - person nick; 12.07.2013
comment
Обходной путь 1 раньше работал у меня, а теперь уже не работает, странно - person ylun.ca; 08.07.2015
comment
обходной путь 1 не является обходным путем, вы удаляете все свои данные. в чем весь смысл? - person Ikthiander; 11.08.2015

Ладно, выкладываю еще раз:

Если кому-то это нужно, для более новой версии Hadoop (в основном я использую 2.4.0)

  • В этом случае остановите кластер sbin/stop-all.sh

  • Затем перейдите к /etc/hadoop для файлов конфигурации.

В файле: hdfs-site.xml Найдите пути к каталогам, соответствующие dfs.namenode.name.dir dfs.namenode.data.dir

  • Рекурсивно удалите оба каталога (rm -r).

  • Теперь отформатируйте namenode через bin/hadoop namenode -format

  • И, наконец, sbin/start-all.sh

Надеюсь это поможет.

person apurva.nandan    schedule 30.07.2014

У меня была такая же проблема с псевдоузлом, использующим hadoop1.1.2. Поэтому я запустил bin/stop-all.sh, чтобы остановить кластер, а затем увидел конфигурацию моего каталога tmp hadoop в hdfs-site.xml.

<name>hadoop.tmp.dir</name>
<value>/root/data/hdfstmp</value>

Поэтому я зашел в /root/data/hdfstmp и удалил все файлы с помощью команды (вы можете потерять свои данные)

rm -rf *

а затем снова отформатируйте namenode

bin/hadoop namenode -format

а затем запустите кластер, используя

bin/start-all.sh

Основная причина в том, что bin/hadoop namenode -format не удалил старые данные. Поэтому мы должны удалить его вручную.

person user2580337    schedule 14.07.2013
comment
Это сработало для меня для версии 2.2.0, нужно было очистить каталог данных, каталог данных. - person Mo.; 03.07.2014
comment
Для 2.6.0 это работает! Я пробовал все остальные, но потерпел неудачу. - person Nakul91; 15.05.2015
comment
Для тех, кто ищет путь по умолчанию, где Hadoop хранит файлы HDFS: stackoverflow.com/a/33860181/3757139 говорит, что это /tmp/hadoop-${user.name}/dfs/data . - person Samuel; 29.06.2016

Выполните следующие шаги:

1. bin/stop-all.sh
2. remove dfs/ and mapred/ folder of hadoop.tmp.dir in core-site.xml
3. bin/hadoop namenode -format
4. bin/start-all.sh
5. jps
person Somnath Kadam    schedule 15.01.2014

Попробуйте отформатировать узел данных и перезапустить его.

person Jickson T George    schedule 07.12.2012

Я использовал CDH4 в качестве своей версии Hadoop, и у меня возникли проблемы с его настройкой. Даже после попытки переформатировать мой namenode я все еще получал сообщение об ошибке.

Мой файл VERSION находился в

/var/lib/hadoop-hdfs/cache/{username}/dfs/data/current/VERSION

Вы можете найти расположение каталога кэша HDFS, выполнив поиск свойства hadoop.tmp.dir:

more /etc/hadoop/conf/hdfs-site.xml 

Я обнаружил это, выполнив

cd /var/lib/hadoop-hdfs/cache/
rm -rf *

а затем переформатировав namenode, я наконец смог решить проблему. Спасибо первому ответу за то, что помог мне понять, какую папку мне нужно бомбить.

person Dan Ciborowski - MSFT    schedule 29.08.2012

Я попробовал подход 2, предложенный Джаредом Стелером в ответе Криса Шейна, и я могу подтвердить, что после внесения этих изменений я смог решить вышеупомянутую проблему.

Я использовал один и тот же номер версии как для имени, так и для файла данных VERSION. То есть скопировал номер версии из файла VERSION внутри (/app/hadoop/tmp/dfs/name/current) в VERSION внутри (/app/hadoop/tmp/dfs/data/current), и это сработало как шарм

Ваше здоровье !

person saurav    schedule 03.05.2013

Я столкнулся с этой проблемой при использовании немодифицированного быстрого запуска cloudera vm 4.4.0-1.

Для справки, менеджер cloudera сказал, что мой узел данных находится в хорошем состоянии, хотя в сообщении об ошибке в трассировке стека DataStreamer говорилось, что ни один узел данных не запущен.

кредит идет на обходной путь № 2 из https://stackoverflow.com/a/10110369/249538, но я подробно расскажу о своем конкретный опыт использования cloudera quickstart vm.

В частности, я сделал следующее:
в этом порядке остановил службы hue1, hive1, mapreduce1, hdfs1 с помощью менеджера облака http://localhost.localdomain:7180/cmf/services/status

нашел мои VERSION файлы через:
sudo find / -name VERSION

я получил:

/dfs/dn/current/BP-780931682-127.0.0.1-1381159027878/current/VERSION
/dfs/dn/current/VERSION
/dfs/nn/current/VERSION
/dfs/snn/current/VERSION

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

затем я перезапустил службы в обратном порядке через диспетчер облака. теперь я могу -put загружать файлы на hdfs.

person goat    schedule 02.03.2014
comment
Мы настраивали кластер PredictionIO при формировании облака Amazon, и у нас были похожие проблемы. И после сканирования всех страниц в stackoverflow, наконец, это исправление сработало для меня. Спасибо! - person Runish Kumar; 13.03.2015

В моем случае я неправильно установил один пункт назначения для dfs.name.dir и dfs.data.dir. Правильный формат

 <property>
 <name>dfs.name.dir</name>
 <value>/path/to/name</value>
 </property>

 <property>
 <name>dfs.data.dir</name>
 <value>/path/to/data</value>
 </property>
person mahmood    schedule 24.03.2014

У меня та же проблема с отсутствующим узлом данных, и я следую этому шагу, который сработал для меня.

1.найдите папку, в которой находится узел данных. cd hadoop/hadoopdata/hdfs 2.загляните в папку, и вы увидите, какой файл у вас есть в hdfs ls 3.удалите папку узла данных, потому что это старая версия узла данных rm -rf/datanode/* 4. вы получите новую версию после выполнения предыдущей команды 5. запустите новый узел данных hadoop-daemon.sh запустить узел данных 6. обновить веб-службы. Вы увидите, что потерянный узел появляется мой терминал

person Aey Varistha    schedule 10.10.2016