やぁ解決した…
java.io.IOException: 互換性のない名前空間 ID
エラー java.io.IOException: Incompatible namespaceIDs が DataNode (logs/hadoop-hduser-datanode-.log) のログに表示される場合、問題 HDFS-107 (以前は HADOOP-1212 として知られていた) の影響を受けている可能性があります。 .
完全なエラーは、私のマシンでは次のように見えました: ... ERROR org.apache.hadoop.dfs.DataNode: java.io.IOException: Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data: namenode namespaceID = 308967713; datanode namespaceID = 113030094 org.apache.hadoop.dfs.DataStorage.doTransition(DataStorage.java:281) org.apache.hadoop.dfs.DataStorage.recoverTransitionRead(DataStorage.java:121) org.apache.hadoop.dfs .DataNode.startDataNode(DataNode.java:230) org.apache.hadoop.dfs.DataNode.(DataNode.java:199) org.apache.hadoop.dfs.DataNode.makeInstance(DataNode.java:1202) org .apache.hadoop.dfs.DataNode.run(DataNode.java:1146) で org.apache.hadoop.dfs.DataNode.createDataNode(DataNode.java:1167) で org.apache.hadoop.dfs.DataNode.main(DataNode) .java:1326) その瞬間、
回避策 1: ゼロから始める 次の手順でこのエラーが解決されることは証明できますが、副作用はあなたを満足させるものではありません (私もそうです)。私が見つけた大まかな回避策は次のとおりです。
クラスターを停止します 問題のある DataNode のデータ ディレクトリを削除します。ディレクトリは conf/hdfs-site.xml の dfs.data.dir で指定されます。このチュートリアルに従った場合、関連するディレクトリは /app/hadoop/tmp/dfs/data です NameNode を再フォーマットします (注: このプロセス中にすべての HDFS データが失われます!) クラスターを再起動します すべての HDFS データを削除し、ゼロから開始すると良いアイデアとは思えない (初期セットアップ/テスト中は問題ないかもしれません) 場合は、2 番目の方法を試してみてください。
回避策 2: 問題のある DataNode の名前空間 ID を更新する 次の提案をしてくれた Jared Stehler に感謝します。まだ自分でテストしていませんが、お気軽に試してフィードバックをお送りください。この回避策は、問題のある DataNode で 1 つのファイルを編集するだけでよいため、「侵襲性が最小限」です。
DataNode を停止します /current/VERSION の namespaceID の値を編集して、現在の 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 に設定し、このチュートリアルでは hadoop.tmp.dir を /app/hadoop/tmp に設定します)。
問題の解決策は、次のサイトに明確に記載されています。
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#java-io-ioexception-incompatible-namespaceids