web-dev-qa-db-ja.com

HDFSへの書き込みは、minReplication(= 1)ではなく0ノードにのみ複製できました。

私は3つのデータノードを実行していますが、ジョブを実行しているときに以下のエラーが表示されます

Java.io.IOException:ファイル/ user/ashsshar/olhcache/loaderMap9b663bd9は、minReplication(= 1)ではなく0ノードにのみ複製できました。この操作では3つのデータノードが実行されており、3つのノードが除外されています。 org.Apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.Java:1325)で

このエラーは主に、DataNodeインスタンスのスペースが不足した場合、またはDataNodeが実行されていない場合に発生します。 DataNodeを再起動しようとしましたが、それでも同じエラーが発生しました。

クラスターノードのdfsadmin -reportsは、多くのスペースが利用可能であることを明確に示しています。

なぜこれが起こっているのか分かりません。

24
Ashish Sharma

1.すべてのHadoopデーモンを停止する

for x in `cd /etc/init.d ; ls hadoop*` ; do Sudo service $x stop ; done

2. /var/lib/hadoop-hdfs/cache/hdfs/dfs/nameからすべてのファイルを削除します

Eg: devan@Devan-PC:~$ Sudo rm -r /var/lib/hadoop-hdfs/cache/

3.Namenodeのフォーマット

Sudo -u hdfs hdfs namenode -format

4.すべてのHadoopデーモンを起動します

for x in `cd /etc/init.d ; ls hadoop*` ; do Sudo service $x start ; done

Hadoopサービスをすべて停止

15
Devan M S

私は同じ問題を抱えていた、私は非常に少ないディスクスペースで実行されていました。ディスクを解放すると解決しました。

11
divyaravi
  1. DataNodeが実行されているかどうかを確認するには、jpsコマンドを使用します。
  2. 実行中でないの場合、しばらく待ってから再試行してください。
  3. 実行中の場合、DataNodeを再フォーマットする必要があると思います。
2
twlkyao

これが発生したときに通常行うことは、tmp/hadoop-username/dfs /ディレクトリに移動し、dataおよびnameフォルダを手動で削除することです(Linux環境で実行していると仮定)。

次に、bin/hadoop namenode -formatを呼び出してdfsをフォーマットします(必ず、大文字で答えてください[〜#〜] y [〜#〜]フォーマットするかどうか、尋ねられない場合は、コマンドを再実行してください)。

その後、bin/start-all.shを呼び出すことで、もう一度hadoopを起動できます。

1
lvella

Windows 8.1での同じ問題に対する非常に簡単な修正
Windows 8.1 OSとHadoop 2.7.2を使用しましたが、この問題を克服するために次のことを行いました。

  1. Hdfs namenode -formatを開始したとき、ディレクトリにロックがあることに気付きました。下の図を参照してください。
    HadoopNameNode
  2. 以下に示すようにフォルダ全体を削除したら、hdfs namenode -format。Folder location
    Full Folder Delete
  3. 上記の2つの手順を実行した後、必要なファイルをHDFSシステムに正常に配置できました。 start-all.cmdコマンドを使用して、yarnとnamenodeを開始しました。
0

私の場合、この問題はデータノードの50010でファイアウォールポートを開くことで解決しました。

0
fracca

私はこの問題を抱えており、以下のように解決しました:

  1. データノードとネームノードのメタデータ/データが保存されている場所を見つけます。見つからない場合は、Macでこのコマンドを実行して見つけてください(「tmp」というフォルダーにあります)

    / usr/local/Cellar/-name "tmp";を検索

    findコマンドは次のとおりです。find <"directory"> -name <"そのディレクトリまたはファイルの任意の文字列の手がかり">

  2. そのファイルを見つけたら、cdしてください。/usr/local/Cellar // hadoop/hdfs/tmp

    次にdfsにcdします

    -lsコマンドを使用すると、データと名前のディレクトリがそこにあることがわかります。

  3. Removeコマンドを使用して、両方を削除します。

    rm -R data。およびrm -R name

  4. Binフォルダーに移動し、まだ実行していない場合はすべて終了します。

    sbin/end-dfs.sh

  5. サーバーまたはローカルホストを終了します。

  6. サーバーに再度ログインします:ssh <"サーバー名">

  7. dfsを開始します。

    sbin/start-dfs.sh

  8. 確認のためにnamenodeをフォーマットします。

    bin/hdfs namenode -format

  9. hdfsコマンドを使用してデータをdfsにアップロードし、MapReduceジョブを実行できるようになりました。

0
Reihan_amn