Pivotal Knowledge Base

フォローする

HDFSが読み取り専用になり、 "Name node is in safe mode"というエラーが発生

環境

製品 バージョン
Pivotal HD(PHD)  2.x〜3.x

事象

Namenode のレポート

2012-12-05 04:07:52,870 ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:mapred cause:org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /tmp/hadoop-root/mapred/system. Name node is in safe mode.

HDFSデータの 読み込み/書き込み時のエラー

[root@centos-1 ~]# hadoop fs -copyFromLocal .bash_history /tmp/
copyFromLocal: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create file/tmp/.bash_history. Name node is in safe mode.

原因

NameNode起動時はfsimageとeditsログファイルからファイルシステムの状態をロードする。この際、NameNodeは十分な数のレプリカブロックがクラスタ内に存在するにも関わらず、ブロックの複製を開始し始めないよう、DataNodeからのブロックレポートを待つ。この間、NameNodeはセーフモードに入っている。NameNodeのセーフモードは、基本的にHDFSクラスタに対する読み込み専用モードであり、ファイルシステムやデータブロックへの如何なる変更操作をも受け付けない。通常、NameNode起動時に自動的にセーフモードが解除される。必要に応じて、HDFSは明示的に、bin/hadoop dfsadmin -safemode コマンドを用いることでセーフモードに入ることができる。NameNodeのフロントページにはセーフモードがオンであるかオフであるかが示されている。

解決策

この問題を回避する方法の一つは、手動でNameNodeのセーフモード状態を解除することであるが、その前に全てのDataNodeとNameNodeのログを確認し、NameNode がセーフモード状態が解除されない理由についてきちんと理解・把握している必要がある。なぜなら、いくつかのケースで、手動でセーフモード状態を解除することにより、データを失うことが想定されるからである。

以下の一連のコマンドは、HDFSのデフォルトスーパーユーザである、HDFS OSユーザを利用して実行する必要があることに留意されたい。そうでなければ、"Access denied for user hadoop. Superuser privilege is required"というエラーが発生するであろう。

  1. HDFS OSユーザで下記コマンドを実行することでセーフモードを解除する。
    hadoop dfsadmin -safemode leave
  2. その後、以下のコマンドを用いて、HDFSへの書き込みを実行する。
  3. [root@centos-1 ~]# hadoop fs -copyFromLocal .bash_history /tmp/
    [root@centos-1 ~]# hadoop fs -ls /tmp
    Found 6 items
    -rw-r--r-- 3 root supergroup 14904 2012-12-05 17:06 /tmp/.bash_history
    drwxrwxrwx   - root supergroup 0 2012-11-28 23:56 /tmp/hadoop-mapred
    drwxr-xr-x   - hdfs supergroup 0 2012-11-28 23:56 /tmp/hadoop-root
    drwxr-xr-x   - root supergroup 0 2012-11-28 23:27 /tmp/test_input
    drwxrwxrwx   - root supergroup&nbsp 0 2012-11-28 23:56 /tmp/test_output
    

コメント

Powered by Zendesk