Нет узлов данных

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

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

После запуска start-all.sh script я запустил "jps".

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

4825 NameNode
5391 TaskTracker
5242 JobTracker
5477 Jps
5140 SecondaryNameNode

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

bin/hadoop fs -put conf input

Появилась ошибка:

[email protected]:~/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 не работает.

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

EDIT: это файл 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
************************************************************/

Ответ 1

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

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

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

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

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

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

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

Обходной путь 2: Обновление namespaceID проблемных DataNodes

Большое спасибо Джареду Стелеру за следующее предложение. Я еще не тестировал его сам, но не стесняйтесь попробовать и отправить мне свои отзывы. Это обходное решение является "минимально инвазивным", поскольку вам нужно только отредактировать один файл на проблемных DataNodes:

  • Остановить DataNode
  • Отредактируйте значение namespaceID в /current/VERSION, чтобы соответствовать значению текущего NameNode
  • Перезапустите DataNode

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

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

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

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

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

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

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

# содержание/текущий/ВЕРСИЯ

namespaceID = 393514426

storageID = DS-1706792599-10.10.10.1-50010-1204306713481

cTime = 1215607609074

storageType = DATA_NODE

layoutVersion = -13

Ответ 2

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

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

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

rm -rf *

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

bin/hadoop namenode -format

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

bin/start-all.sh

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

Ответ 3

Хорошо, я отправляю это еще раз:

Если кому-то это нужно, для более новой версии 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

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

Ответ 4

Сделайте следующие шаги:

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

Ответ 5

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

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

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

Местоположение каталога кэша HDFS можно найти с помощью свойства hasoop.tmp.dir:

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

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

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

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

Ответ 6

Попробуйте форматировать ваш datanode и перезапустить его.

Ответ 7

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

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

Приветствия!

Ответ 8

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

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

кредит переходит к обходному пути №2 из fooobar.com/questions/193114/..., но я подробно расскажу о своем опыте, используя cloudera quickstart vm.

В частности, я сделал:
в этом порядке остановить службы hue1, hive1, mapreduce1, hdfs1 через менеджер cloudera 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, за исключением того, что один файл просто полностью его не пропускал. поэтому я добавил запись к нему.

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

Ответ 9

В моем случае я ошибочно устанавливаю одно назначение для 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>

Ответ 10

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

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