Ошибка namenode в псевдорежиме

Я новичок в hadoop и участвую в фазе обучения. Согласно руководству Hadoop Definitve, я настроил свой хаоп в псевдораспределенном режиме, и все работает нормально. Я даже смог выполнить все примеры из главы 3 вчера. Сегодня, когда я перезагрузил свой unix и попытался запустить start-dfs.sh, а затем попробовал localhost:50070... он показывает ошибку и когда Я пытаюсь остановить dfs (stop-dfs.sh), он говорит, что namenode не останавливается. Я искал эту проблему, но никакого результата. Кроме того, когда я снова форматирую свой namenode... все начинает работать нормально, и я могу подключиться к localhost:50070 и даже реплицировать файлы и каталоги в hdfs, но как только я перезапущу свой Linux и попытаюсь подключиться к hdfs, возникает та же проблема.

Ниже приведен журнал ошибок:

************************************************************/
2011-06-22 15:45:55,249 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = ubuntu/127.0.1.1
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
************************************************************/
2011-06-22 15:45:56,383 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2011-06-22 15:45:56,455 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2011-06-22 15:45:56,494 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2011-06-22 15:45:56,494 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2011-06-22 15:45:57,007 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2011-06-22 15:45:57,031 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2011-06-22 15:45:57,059 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source jvm registered.
2011-06-22 15:45:57,070 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source NameNode registered.
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: VM type       = 32-bit
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: 2% max memory = 19.33375 MB
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: capacity      = 2^22 = 4194304 entries
2011-06-22 15:45:57,374 INFO org.apache.hadoop.hdfs.util.GSet: recommended=4194304, actual=4194304
2011-06-22 15:45:57,854 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: fsOwner=anshu
2011-06-22 15:45:57,854 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: supergroup=supergroup
2011-06-22 15:45:57,854 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: isPermissionEnabled=true
2011-06-22 15:45:57,868 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: dfs.block.invalidate.limit=100
2011-06-22 15:45:57,869 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
2011-06-22 15:45:58,769 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Registered FSNamesystemStateMBean and NameNodeMXBean
2011-06-22 15:45:58,809 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: Caching file names occuring more than 10 times
**2011-06-22 15:45:58,825 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /tmp/hadoop-anshu/dfs/name does not exist.
2011-06-22 15:45:58,827 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-anshu/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
    at org.apache.h**adoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:291)
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)
2011-06-22 15:45:58,828 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /tmp/hadoop-anshu/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:291)
    at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:97)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:379)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:353)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:254)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:434)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1153)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1162)

2011-06-22 15:45:58,829 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1
************************************************************/

Любая помощь приветствуется Спасибо вам

Ответы

Ответ 1

вот кикер:

org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Каталог /tmp/hadoop -anshu/dfs/name находится в противоречивом состоянии: хранение директории не существует или нет доступны.

У меня были похожие проблемы. Я использовал stop -all.sh, чтобы закрыть hadoop. я думаю, мне было глупо думать, что это правильно сохранит данные в моей HDFS.

но насколько я могу судить по тому, что кажется подходящим фрагментом кода в hasoop-daemon.sh script, это не так - он просто убивает процессы:

(stop)

    if [ -f $pid ]; then
      if kill -0 `cat $pid` > /dev/null 2>&1; then
        echo stopping $command
        kill `cat $pid`
      else
        echo no $command to stop
      fi
    else
      echo no $command to stop
    fi

Вы посмотрели, существует ли каталог, на котором он жалуется? я проверил, а мой не сделал, хотя там была (пустая!) папка с данными здесь, я думаю, что данные могли когда-то существовать.

поэтому я предполагал, что нам нужно настроить Hadoop таким образом, чтобы наш namenode и datanode НЕ хранились в каталоге tmp. существует некоторая возможность того, что ОС выполняет техническое обслуживание и избавляется от этих файлов. либо, что вы указали, что вы не заботитесь о них больше, потому что вы не оставили бы их в каталоге tmp, если бы вы это сделали, и вы не перезапустили бы ваш компьютер в середине работы по сокращению карты. Я действительно не думаю, что это должно произойти (я имею в виду, что не так, как я буду создавать вещи), но это казалось хорошим догадкой.

поэтому на основе этого сайта http://wiki.datameer.com/display/DAS11/Hadoop+configuration+file+templates Я редактировал файл conf/hdfs-site.xml, чтобы указать на следующие пути (очевидно, создайте свои собственные каталоги, как вы сочтете нужным):

<property>
  <name>dfs.name.dir</name>
  <value>/hadoopstorage/name/</value>
</property>

<property>
  <name>dfs.data.dir</name>
  <value>/hadoopstorage/data/</value>
</property>

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

YMMV... надеюсь, что это сработает для вас! я на OS X, но я не думаю, что у вас должны быть разные результаты.

J

Ответ 2

Если вы не заботитесь о потере данных, просто выполните команду:

./hadoop namenode -format

Ответ 3

У меня была аналогичная проблема, и это помогло

chown -R hdfs:hadoop /path/to/namenode/date/dir

Ответ 4

Настройка этих свойств в файле conf/hdfs-site.xml сработала для меня!!!

Спасибо jsh

<property>
  <name>dfs.name.dir</name>
  <value>/hadoopstorage/name/</value>
</property>

<property>
  <name>dfs.data.dir</name>
  <value>/hadoopstorage/data/</value>`enter code here`
</property>

Не забудьте установить правильные разрешения для этих каталогов

Ответ 5

Ответ JSH правильный.

Всего несколько изменений для hadoop 2.6 я должен был сделать:

<property>
  <name>dfs.namenode.name.dir</name>
  <value>/hadoopstorage/name/</value>
</property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value>/hadoopstorage/data/</value>
</property>

Ответ 6

Если вы не решили проблему, попробуйте следующее: дайте директории dfs.name.dir в пользовательской группе hadoop и дайте группе разрешение на запись.

Ответ 7

Смотрите coresite.xml в каталоге конфигурации hadoop

  • Перейдите в каталог конфигурации
  • vi core-site.xml,hdf.site.xml
  • Убедитесь, что номера и пути вашего порта верны.

Ответ 8

У меня есть аналогичная проблема, но немного другая.

Запуск start-all.sh достаточно хорошо, но jps показывает, что нет наменоходов, и я не мог видеть список, когда я запускаю hdfs dfs -ls/.

Моя первая попытка - запустить hasoop namenode -format, затем появится namenode, но datanode исчезнет.

После запуска решения, я запустил rm -rf/usr/local/hadoop_store/hdfs/datanode/* и перезапустил hasoop, jps показывает:

    12912 ResourceManager  
    13391 FsShell  
    13420 Jps  
    13038 NodeManager  
    12733 SecondaryNameNode  
    12432 NameNode  
    12556 DataNode  

Теперь я могу использовать команды hadoop, как обычно.

НТН!