root# bin/hadoop fs -mkdir t
mkdir: org.Apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/t. Name node is in safe mode.
hdfsで何も作成できない
やった
root# bin/hadoop fs -safemode leave
しかし、表示
safemode: Unknown command
何が問題ですか?
Namenodeを強制的にセーフモードから抜け出すには、次のコマンドを実行する必要があります。
bin/hadoop dfsadmin -safemode leave
Unknown command
は-safemode
のサブコマンドではなく、hadoop fs
のサブコマンドではないため、コマンドに対してhadoop dfsadmin
エラーが発生しています。
また、上記のコマンドの後、一度hadoop fsck
を実行することをお勧めします。これにより、hdfsにある不整合を整理することができます。
更新:
新しいディストリビューションでは、hdfs
コマンドの代わりにhadoop
コマンドを使用してください。 hadoop
コマンドは非推奨です:
hdfs dfsadmin -safemode leave
hadoop dfsadmin
は廃止され、hadoop fs
コマンドも廃止されました。すべてのhdfs関連タスクは、別のコマンドhdfs
に移動されています。
これを試して、それは動作します
Sudo -u hdfs hdfs dfsadmin -safemode leave
コマンドは私のために機能しませんでしたが、次は機能しました
hdfs dfsadmin -safemode leave
hdfs
コマンドの代わりにhadoop
コマンドを使用しました。
上記のHadoopバージョン2.6.1を使用する場合、コマンドは機能しますが、減価すると不満を言います。 HadoopをDockerコンテナーで実行していたため、実際にhadoop dfsadmin -safemode leave
を使用できませんでした。コンテナーで実行すると、そのコマンドは魔法のように失敗します。私はドキュメントをチェックし、ドキュメントにdfs.safemode.threshold.pct
を見つけました
Dfs.replication.minで定義された最小レプリケーション要件を満たすブロックの割合を指定します。 0以下の値は、セーフモードを終了する前に特定の割合のブロックを待機しないことを意味します。 1より大きい値は、セーフモードを永続的にします。
そこで、hdfs-site.xml
を次のように変更しました(古いHadoopバージョンでは、明らかにhdfs-default.xml
でそれを行う必要があります:
<configuration>
<property>
<name>dfs.safemode.threshold.pct</name>
<value>0</value>
</property>
</configuration>
これを試してください
Sudo -u hdfs hdfs dfsadmin -safemode leave
セーフモードのステータスを確認します
Sudo -u hdfs hdfs dfsadmin -safemode get
まだセーフモードである場合、理由の1つはノードの十分なスペースではないため、次を使用してノードのディスク使用量を確認できます。
df -h
ルートパーティションがいっぱいの場合は、ファイルを削除するか、ルートパーティションにスペースを追加して、最初の手順を再試行します。
メモリーが不足すると、Namenodeはセーフモードに入ります。その結果、HDFSは読み取り専用になります。つまり、HDFSに追加のディレクトリまたはファイルを作成することはできません。セーフモードを終了するには、次のコマンドを使用します。
hadoop dfsadmin -safemode leave
Cloudera Managerを使用している場合:
go to >>Actions>>Leave Safemode
しかし、それは常に問題を解決するとは限りません。完全なソリューションは、メモリ内にいくつかのスペースを作ることにあります。次のコマンドを使用して、メモリ使用量を確認します。
free -m
Clouderaを使用している場合は、HDFSに健康状態が悪い兆候があるかどうかも確認できます。おそらく、namenodeに関連するメモリの問題を示しているはずです。使用可能なオプションに従って、より多くのメモリを割り当てます。 Cloudera Managerを使用していない場合、同じコマンドを使用するコマンドはわかりませんが、方法が必要です。それが役に立てば幸い! :)
セーフモードがオンの場合(HDFSは読み取り専用モードです)
セーフモードオフの意味(HDFSは書き込み可能および読み取り可能モードです)
Hadoop 2.6.0
では、以下のコマンドを使用して名前ノードのステータスを確認できます。
ネームノードのステータスを確認するには
$ hdfs dfsadmin -safemode get
安全モードに入るには:
$ hdfs dfsadmin -safemode enter
安全モードを終了するには
~$ hdfs dfsadmin -safemode leave
HDFS OSユーザーを使用して以下のコマンドを実行し、セーフモードを無効にします。
Sudo -u hdfs hadoop dfsadmin -safemode leave
以下のコマンドを使用してセーフモードをオフにします
$> hdfs dfsadmin -safemode leave