CDH4 YARNインストールの環境変数とか

うまいこといかなかったので。使用したのはcdh4u0です。
トラブルシューティング的なあれで書いておきます。

1. MRAppMasterが見つからない
apt-getでなんやかんやインストールしたマスタで、

yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 100 100000000

したら下記の様なエラーになりました。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/v2/app/MRAppMaster
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapreduce.v2.app.MRAppMaster
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.apache.hadoop.mapreduce.v2.app.MRAppMaster. Program will exit.

yarn.application.classpathを通していないとこうなるようです。yarn-site.xmlに、

<property>
	<name>yarn.application.classpath</name>
	<value>
		$HADOOP_CONF_DIR,
		$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
		$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
		$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
		$YARN_HOME/*,$YARN_HOME/lib/*
	</value>
</property>

こういう記述を書いておく必要があります。clouderaのインストラクションでは明示的には記述されていないですが、インストラクション内で所定のファイルをコピーしてから下記の設定を記述しろ、という書き方になっていて、その所定のファイルの方には書いてあります。インストラクションは書いてあるとおりにやった方がなんやかんや面倒がなくてよいですね。

パッケージからインストールした場合、/usr/lib/hadoop/libexec/hadoop-layout.shで環境変数をうまいことやっているようなのですが、node manager?がapp master?を起動する?あたりのタイミング?ではこの辺を読まないのが原因?なので、上記の設定が必要になるような気がしますが、実際のところどうなのかは定かではないです。


2. よくわからないけど環境変数周りの設定っぽくてclass not foundになる
tarballからインストールした場合です。hadoopクライアントはmacなので、設定ファイルはマスタと同じにしておいて、インストールはtarballからやっています。

なにげにtarballからインストールした場合の環境変数周りのインストラクションがないので、いろいろ適当に調べました。これも本来的な設定は定かではないですが、下記の様に設定するとうまくいきます。

export HADOOP_LIBEXEC_DIR=$tarballの解凍先/libexec
export HADOOP_CONF_DIR=設定ファイル置き場
#export HADOOP_COMMON_HOME=設定しない?
#export HADOOP_HDFS_HOME=設定しない?
#export HADOOP_MAPRED_HOME=設定しない?
#export YARN_HOME=設定しない?
export YARN_CONF=$HADOOP_CONF_DIR

HADOOP_COMMON_HOME HADOOP_HDFS_HOME HADOOP_MAPRED_HOME YARN_HOMEあたりは、設定されてなければ設定されてないで、うまいことlibexec/*のスクリプトが環境変数を設定してくれます。逆に、中途半端に設定すると、FsShellがみつからないとかよくわからないことを言われるので、たぶんこんな感じにしておくとよいのだと思います。この辺も本来的な設定は定かではないですが、空気とソースを読む限りではうまく動いています。



感想など
・なんか微妙にresource managerの画面がかっこいいです