hadoop スクリプト

設定ファイルを書いて HDFS なソレのフォーマットをしようとしたら以下なメセジを吐いて終了。

$ /usr/local/hadoop/bin/hadoop namenode -format
/usr/local/hadoop/bin/hadoop: line 258: /usr/lib/java-1.6.0-openjdk/bin/java: No such file or directory
/usr/local/hadoop/bin/hadoop: line 289: /usr/lib/java-1.6.0-openjdk/bin/java: No such file or directory
$

む、これどーゆーことなのかな。中身を確認。
以下な記述があるな。

JAVA=$JAVA_HOME/bin/java

ええと JAVA_HOME はというと

$ echo $JAVA_HOME
/usr/lib/jvm/java-1.6.0-openjdk
$

よく分からんな。もっかい hadoop なスクリプトの中身を確認。258 行な記述が以下。

  JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`

とりあえず $JAVA_HOME/bin には java がいるので hadoop なスクリプトがどうやって $JAVA を組み立てているか、が鍵なのか。
意味分からないので $JAVA_HOME を echo してみます。

# some Java parameters
if [ "$JAVA_HOME" != "" ]; then
  echo "run java in $JAVA_HOME"
  JAVA_HOME=$JAVA_HOME
fi

出力は以下。

run java in /usr/lib/java-1.6.0-openjdk

うーん何が悪さをしてるのか。と言いつつ hadoop なスクリプト確認してたら /usr/local/hadoop/conf/hadoop-env.sh を読み込んでいる箇所を発見。ありました。

export JAVA_HOME=/usr/lib/java-1.6.0-openjdk

おいおい。やっぱり自分か。なんでこんなことしてるのかorz
コメントアウトしたら動いた、のかな。なんとなくパス確認せずに既存な記述をコピッて云々な記憶あり。阿呆は死なぬと直らぬ模様です。