Hadoopの一時ファイルの設定

Hadoopで一時ファイルの設定は、conf/hadoop-site.xmlhadoop.tmp.dirの記述をすればいい。
注意しないといけないのは、ここで指定するのは、Windowsの場合はCygwinのパスではなくWindowsのパスということだ。
また、そうすると、JobTrackerのシステムフォルダも、このhadoop.tmp.dirの値によって変わるようになっているのだけど、JobTrackerのシステムフォルダはDFS内のフォルダなので、hadoop.tmp.dirの値を使わないように設定しなおさないといけない。JobTrackerのシステムフォルダは、mapred.system.dirで設定する。


ということで、こんな感じの記述をconf/hadoop-site.xmlに追加する。

<property>
  <name>hadoop.tmp.dir</name>
  <value>C:/java/tool/hadoop/hadoop-0.17.2.1/tmp/hadoop-${user.name}</value>
  <description>A base for other temporary directories.</description>
</property>

<property>
  <name>mapred.system.dir</name>
  <value>/tmp/hadoop-${user.name}/mapred/system</value>
  <description>The shared directory where MapReduce stores control files.
  </description>
</property>


Hadoopを動かす場合、そのパスが実フォルダなのかDFSのフォルダなのか意識しないといけない。特にWindowsの場合には、実フォルダの指定としてCygwin形式のパスとWindows形式のパスを使い分ける必要がある。
シェルスクリプトが使うパスはCygwin形式で、Javaプログラムが使うパスはWindows形式ということになる。とりあえずhadoop-env.shに指定するパスはCygwinパスで、その他はWindowsパスでとしておけばいい。
hadoopコマンドをCygwinコンソールで打つときには、ついついCygwinパスで実フォルダを指定してしまうけど、Windows形式で入力しないとエラーになるので注意。