デフォルトでは、Hadoop は hadoop.tmp.dir を /tmp フォルダーに設定します。これは問題です。再起動すると /tmp が Linux によって消去され、 JobTracker から次の素敵なエラーが発生するためです。
2012-10-05 07:41:13,618 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s).
...
2012-10-05 07:41:22,636 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 9 time(s).
2012-10-05 07:41:22,643 INFO org.apache.hadoop.mapred.JobTracker: problem cleaning system directory: null
java.net.ConnectException: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused
at org.apache.hadoop.ipc.Client.wrapException(Client.java:767)
これを修正するために私が見つけた唯一の方法は、名前ノードを再フォーマットすることです。これにより、/tmp/hadoop-root フォルダーが再構築されます。これはもちろん、再起動すると再び消去されます。
そこで、/hadoop_temp というフォルダーを作成し、すべてのユーザーに読み取り/書き込みアクセスを許可しました。次に、core-site.xml でこのプロパティを設定します。
<property>
<name>hadoop.tmp.dir</name>
<value>file:///hadoop_temp</value>
</property>
namenode を再フォーマットすると、Hadoop は満足しているようで、次のメッセージが表示されました。
12/10/05 07:58:54 INFO common.Storage: Storage directory file:/hadoop_temp/dfs/name has been successfully formatted.
しかし、/hadoop_temp を見てみると、フォルダーが空であることに気付きました。その後、Hadoop を再起動して JobTracker のログを確認したところ、次のように表示されました。
2012-10-05 08:02:41,988 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s).
...
2012-10-05 08:02:51,010 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 9 time(s).
2012-10-05 08:02:51,011 INFO org.apache.hadoop.mapred.JobTracker: problem cleaning system directory: null
java.net.ConnectException: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused
namenode のログを確認したところ、次のように表示されました。
2012-10-05 08:00:31,206 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /opt/hadoop/hadoop-0.20.2/file:/hadoop_temp/dfs/name does not exist.
2012-10-05 08:00:31,212 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /opt/hadoop/hadoop-0.20.2/file:/hadoop_temp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
だから、明らかに私は何かを正しく設定していませんでした。core-site.xml で hadoop.tmp.dir を /hadoop_temp に設定しても、Hadoop は /tmp フォルダーにファイルが表示されることを期待しています。私は何を間違えましたか?hadoop.tmp.dir の許容される「正しい」値は何ですか?
おまけの質問: hbase.tmp.dir には何を使用すればよいですか?
システム情報 :
Ubuntu 12.04、Apache Hadoop .20.2、Apache HBase .92.1
ご覧いただきありがとうございます。