HBaseエラーの安直な解決法

HBaseをYARNから使うアプリを書くと,スタンドアロンモードだと動いていたのに,完全分散モードで動かすと次のエラーが出て数日悩みました.

INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: launchContainer: [bash, /home/hadoop/tmp/hadoop-hadoop/nm-local-dir/usercache/hadoop/appcache/application_1375665689078_0122/container_1375665689078_0122_01_000001/default_container_executor.sh]
WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exit code from task is : 1
WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch: Container exited with a non-zero exit code 1
WARN org.apache.hadoop.yarn.server.nodemanager.NMAuditLogger: USER=hadoop       OPERATION=Container Finished - Failed    TARGET=ContainerImpl    RESULT=FAILURE  DESCRIPTION=Container failed with state: EXITED_WITH_FAILURE    APPID=application_1375665689078_0122    CONTAINERID=container_1375665689078_0122_01_000001

↑これはスレーブ上のyarnのログです.

さらにlogs/userlogsの下を見ると,

 FATAL [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster
org.apache.hadoop.yarn.YarnException: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.hbase.mapreduce.TableOutputFormat not found

どうみてもクラスパスの設定ミスとしか思えないエラーが.
しかしHBaseのjarを,あらゆる場所のHADOOP_CLASSPATHに書いてもダメ.
default_container_executor.shというのが,ジョブが実行されるたびに動的にJavaから吐かれるので,環境変数もどうなっているのか良く分かりません(/etc/bashrcとかにも書いてみたけどダメだった).

そこで.

$ cp -pv /usr/local/hbase/hbase-0.94.6-cdh4.3.0-security.jar /usr/local/hadoop/share/hadoop/common/

これで解決しました.
再起動もいらんかったですね.

だんだんHBaseも分かって来ました.今回は,YARNのMapReduceからHBaseを分散アクセスするものでしたが,HBase自体のMapReduceも使ってみなければ...