Нет узлов данных
Я пытаюсь настроить версию 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/datali >
- Переформатировать имя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)
В файле: 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
мой терминал