8

Cloudera CDH4 ディストリビューションを疑似分散モードで 1 台のマシンにインストールし、正常に動作することをテストしました (たとえば、MapReduce プログラムを実行したり、Hive サーバーにデータを挿入したりできますcore-site.xml) fs.default.name。 NameNode サービスを再起動するのではなくマシン名に変更するlocalhostと、HDFS はセーフモードに入ります。

の変更前にfs.default.name、次のコマンドを実行して HDFS の状態を確認しました。

$ hadoop dfsadmin -report
...
Configured Capacity: 18503614464 (17.23 GB)
Present Capacity: 13794557952 (12.85 GB)
DFS Remaining: 13790785536 (12.84 GB)
DFS Used: 3772416 (3.60 MB)
DFS Used%: 0.03%
Under replicated blocks: 2
Blocks with corrupt replicas: 0
Missing blocks: 0

次に、core-site.xml(マシン名はhadoop)に変更を加えました:

<property>
  <name>fs.default.name</name>
  <value>hdfs://hadoop:8020</value>
</property>

サービスを再開し、レポートを再実行しました。

$ sudo service hadoop-hdfs-namenode restart
$ hadoop dfsadmin -report
...
Safe mode is ON
Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: NaN%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

興味深い点は、いくつかの HDFS コマンドを引き続き実行できることです。たとえば、実行できます

$ hadoop fs -ls /tmp

ただし、HDFS を使用してファイルを読み込もうとしhadoop fs -catたり、HDFS にファイルを配置しようとすると、NameNode がセーフモードになっていると言われます。

$ hadoop fs -put somefile .
put: Cannot create file/user/hadinstall/somefile._COPYING_. Name node is in safe mode.

をマシン名に設定する必要があるのfs.default.nameは、ポート 8020 (デフォルトの NameNode ポート) でこのマシンと通信する必要があるためです。のままfs.default.nameにするlocalhostと、NameNode サービスは外部接続要求をリッスンしません。

なぜこれが起こっているのか途方に暮れており、助けていただければ幸いです。

4

2 に答える 2

1

セーフモードは、ファイル システムが読み取り専用でマウントされる HDFS 状態です。レプリケーションは実行されず、ファイルの作成または削除もできません。あなたの場合、「ls」のようなファイルシステムメタデータにアクセスするファイルシステム操作は機能します。

Namenodeは、このコマンドを使用して手動でセーフモードを強制的に終了させることができます。( $ hadoop dfsadmin -safemode leave)セーフモードのステータスを確認し、( $ hadoop dfsadmin -safemode get)dfsadmin レポートを実行して、データが表示されるかどうかを確認します。セーフ モードを終了してもレポートにデータが表示されない場合は、疑わしいと思います。 namenode と datanode 間の通信が発生していません。この手順の後、namenode と datanode のログを確認してください。

次のステップは、datanode プロセスを再起動することです。最後の手段は、namenode をフォーマットすることです。これにより、データが失われます。

于 2013-10-17T03:52:05.333 に答える