web-dev-qa-db-ja.com

データノードは開始されていません

次のガイドを使用して、疑似分散構成で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
************************************************************/
31
Aaron S

DNログで取得しているエラーについては、次のとおりです。 http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#Java- io-ioexception-incompatible-namespaceids

そのページから:

現時点では、以下に説明する2つの回避策があるようです。

回避策1:ゼロから開始する

次の手順でこのエラーを解決できると証言できますが、副作用があなたを幸せにすることはありません(私もそうではありません)。私が見つけた大まかな回避策は次のとおりです:

  1. クラスターを停止します
  2. 問題のあるDataNodeのデータディレクトリを削除します。ディレクトリはconf/hdfs-site.xmlのdfs.data.dirで指定されています。このチュートリアルに従った場合、関連するディレクトリは/ app/hadoop/tmp/dfs/dataです
  3. NameNodeを再フォーマットします(注:このプロセス中にすべてのHDFSデータが失われます!)
  4. クラスターを再起動します

すべてのHDFSデータを削除し、ゼロから開始することは良いアイデアのように聞こえない場合(初期セットアップ/テスト中に大丈夫かもしれません)、2番目のアプローチを試してみることができます。

回避策2:問題のあるDataNodeのnamespaceIDを更新する

次の提案をしてくれたJared Stehlerに大いに感謝します。まだ自分でテストしていませんが、試してみてフィードバックをお送りください。問題のあるDataNodeで1つのファイルを編集するだけでよいため、この回避策は「最小限に侵襲的」です。

  1. DataNodeを停止します
  2. / current/VERSIONのnamespaceIDの値を編集して、現在のNameNodeの値と一致させます
  3. 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、およびhadoop.tmp.dirを設定します

このチュートリアルでは/ app/hadoop/tmpに移動します)。

VERSIONの内容がどのように見えるか疑問に思う場合は、ここに私の1つがあります。

#/ current/VERSIONの内容

namespaceID = 393514426

storageID = DS-1706792599-10.10.10.1-50010-1204306713481

cTime = 1215607609074

storageType = DATA_NODE

layoutVersion = -13

47
Chris Shain

さて、私はこれをもう一度投稿します:

誰かがこれを必要とする場合に備えて、Hadoopの新しいバージョン(基本的には2.4.0を実行しています)

  • この場合、クラスターを停止しますsbin/stop-all.sh

  • 次に、構成ファイルの/etc/hadoopに移動します。

ファイル内:hdfs-site.xml dfs.namenode.name.dir dfs.namenode.data.dirに対応するディレクトリパスを探します

  • 両方のディレクトリを再帰的に削除します(rm -r)。

  • bin/hadoop namenode -formatを介してnamenodeをフォーマットします

  • そして最後にsbin/start-all.sh

お役に立てれば。

12
apurva.nandan

Hadoop1.1.2を使用する擬似ノードで同じ問題が発生したため、bin/stop-all.shを実行してクラスターを停止し、hdfs-site.xmlのhadoop tmpディレクトリの構成を確認しました

<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が古いデータを削除しなかったことです。そのため、手動で削除する必要があります。

7
user2580337

次の手順を実行します。

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
Somnath Kadam

データノードをフォーマットして、再起動してください。

2

HadoopのバージョンとしてCDH4を使用しており、構成に問題があります。ネームノードを再フォーマットしようとしても、まだエラーが発生していました。

VERSIONファイルはにありました

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

hadoop.tmp.dirプロパティを探すことで、HDFSキャッシュディレクトリの場所を見つけることができます。

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

私はそれを見つけました

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

そして、ネームノードを再フォーマットすると、ようやく問題を修正することができました。爆撃に必要なフォルダを特定するのを助けてくれた最初の返信に感謝します。

クリス・シェインの回答でJared Stehlerが提案したアプローチ2で試しましたが、これらの変更を行った後、上記の問題を解決できたことを確認できます。

名前とデータの両方のバージョンファイルに同じバージョン番号を使用しました。つまり、バージョン番号を内部のファイルVERSION(/ app/hadoop/tmp/dfs/name/current)から内部のVERSION(/ app/hadoop/tmp/dfs/data/current)にコピーすると、チャームのように機能しました

乾杯!

2
saurav

変更されていないclouderaクイックスタートvm 4.4.0-1を使用すると、この問題が発生しました。

参考までに、Clouderaマネージャーは、DataStreamerスタックトレースのエラーメッセージで実行中のデータノードがないと言っても、私のデータノードの状態は良好であると述べました。

クレジットは https://stackoverflow.com/a/10110369/249538 から回避策#2に進みますが、clouderaクイックスタート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

それらのファイルの内容を確認しましたが、1つのファイルが完全に欠落していることを除いて、すべてのnamespaceIDが一致していました。だから私はそれにエントリを追加しました。

その後、clouderaマネージャーを介してサービスを逆の順序で再起動しました。今、私は-put hdfsに詰め込みます。

1
goat

私の場合、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>
0
mahmood

データノードが見つからないという同じ問題があり、私のために働いたこの手順に従います

1. datanodeが置かれているフォルダーを見つけます。cd hadoop/hadoopdata/hdfs2.フォルダーを見ると、hdfsls3.datanodeフォルダーは古いバージョンのdatanodeであるため削除しますrm -rf/datanode/*4.実行後に新しいバージョンを取得します前のコマンド5.新しいデータノードの開始hadoop-daemon.sh start datanode6. Webサービスを更新します。失われたノードが表示されます my terminal

0
Aey Varistha