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 サービスは外部接続要求をリッスンしません。
なぜこれが起こっているのか途方に暮れており、助けていただければ幸いです。