32

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

10 に答える 10

51

DN ログに表示されるエラーについては、http: //www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#java-io-ioexception-で説明しています。互換性のない名前空間 ID

そのページから:

現時点では、以下の 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. データノードを停止します
  2. /current/VERSION の namespaceID の値を編集して、現在の NameNode の値と一致させます。
  3. データノードを再起動します

私のチュートリアルの指示に従った場合、関連ファイルの完全なパスは次のとおりです。

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

データノード: /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

storageID=DS-1706792599-10.10.10.1-50010-1204306713481

cTime=1215607609074

storageType=DATA_NODE

layoutVersion=-13

于 2012-04-11T16:47:24.530 に答える
12

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

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

お役に立てれば。

于 2014-07-30T16:19:52.447 に答える
7

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 に入り、コマンドを使用してすべてのファイルを削除しました (データが失われる可能性があります)。

rm -rf *

そして、namenodeを再度フォーマットします

bin/hadoop namenode -format

次に、を使用してクラスターを開始します

bin/start-all.sh

主な理由は、bin/hadoop namenode -format が古いデータを削除しなかったことです。そのため、手動で削除する必要があります。

于 2013-07-14T04:39:01.077 に答える
2

Jared Stehler が Chris Shain の回答で提案したように、アプローチ 2 を試してみました。これらの変更を行った後、上記の問題を解決できたことを確認できます。

名前とデータの両方の VERSION ファイルに同じバージョン番号を使用しました。バージョン番号を (/app/hadoop/tmp/dfs/name/current) 内のファイル VERSION から (/app/hadoop/tmp/dfs/data/current) 内の VERSION にコピーしたと言う意味で、それは魅力的に機能しました

乾杯 !

于 2013-05-03T06:21:35.427 に答える
2

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

私の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 *

そしてnamenodeを再フォーマットすることで、ようやく問題を解決することができました。どのフォルダを爆破する必要があるかを理解するのを手伝ってくれた最初の返信に感謝します。

于 2012-08-29T14:17:07.060 に答える
2

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

于 2012-12-07T13:01:26.850 に答える
1

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

参考までに、DataStreamer スタックトレースのエラー メッセージにはデータノードが実行されていないと示されていましたが、cloudera マネージャーは、私のデータノードは正常に動作していると述べました。

クレジットはhttps://stackoverflow.com/a/10110369/249538の回避策 #2 に進みますが、cloudera クイックスタート vm を使用した特定の経験について詳しく説明します。

具体的には、
次の順序でhue1, hive1, mapreduce1, hdfs1 、cloudera manager 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これらのファイルの内容を確認しましたが、 1 つのファイルが完全に欠落していたことを除いて、すべて一致していました。だから私はそれにエントリを追加しました。

次に、Cloudera Manager を介して逆の順序でサービスを再起動しました。-putこれで、hdfs に詰め込むことができます。

于 2014-03-02T18:16:15.710 に答える