次のガイドを使用して、疑似分散構成で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
************************************************************/
DNログで取得しているエラーについては、次のとおりです。 http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#Java- io-ioexception-incompatible-namespaceids
そのページから:
現時点では、以下に説明する2つの回避策があるようです。
回避策1:ゼロから開始する
次の手順でこのエラーを解決できると証言できますが、副作用があなたを幸せにすることはありません(私もそうではありません)。私が見つけた大まかな回避策は次のとおりです:
すべてのHDFSデータを削除し、ゼロから開始することは良いアイデアのように聞こえない場合(初期セットアップ/テスト中に大丈夫かもしれません)、2番目のアプローチを試してみることができます。
回避策2:問題のあるDataNodeのnamespaceIDを更新する
次の提案をしてくれたJared Stehlerに大いに感謝します。まだ自分でテストしていませんが、試してみてフィードバックをお送りください。問題のあるDataNodeで1つのファイルを編集するだけでよいため、この回避策は「最小限に侵襲的」です。
私のチュートリアルの指示に従った場合、関連ファイルのフルパスは次のとおりです。
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
さて、私はこれをもう一度投稿します:
誰かがこれを必要とする場合に備えて、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
お役に立てれば。
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が古いデータを削除しなかったことです。そのため、手動で削除する必要があります。
次の手順を実行します。
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
データノードをフォーマットして、再起動してください。
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)にコピーすると、チャームのように機能しました
乾杯!
変更されていない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に詰め込みます。
私の場合、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>
データノードが見つからないという同じ問題があり、私のために働いたこの手順に従います
1. datanodeが置かれているフォルダーを見つけます。cd hadoop/hadoopdata/hdfs2.フォルダーを見ると、hdfsls3.datanodeフォルダーは古いバージョンのdatanodeであるため削除しますrm -rf/datanode/*4.実行後に新しいバージョンを取得します前のコマンド5.新しいデータノードの開始hadoop-daemon.sh start datanode6. Webサービスを更新します。失われたノードが表示されます my terminal