S-JIS[2011-08-07/2011-11-16] 変更履歴

Asakusa FrameworkをWindowsで動かす場合の注意点

Asakusa Framework0.2.1をWindowsにインストールして動かす場合によく出るエラーのメモ。
(0.7.1では変なことをしなくてもWindowsでフローのテストが出来る→スモールジョブ実行エンジン [2014-12-13]


Windowsでの注意点

Asakusa Framework0.2.1をWindowsで動かそうとすると色々環境整備しないといけない為、整備し忘れるとテスト実行時にエラーが出る。
そんなエラーをまとめてみた。

エラー内容 エラーの説明と対処法
Exception in thread "main" java.lang.RuntimeException: not found resource: init/experimental/bin/hadoop_job_run.win.sh BridgeShellの実行時の例外。
hadoop_job_run.win.shが見つからない。
BridgeSehllでは、コピー元ファイルが(リソースとして)classesにあるという前提だが、それが見つからない。
hadoop_job_run.win.shが入っているソースフォルダーが、「*.shが(classesに)出力されない設定」になっていると考えられるので、出力されるよう変更する。
initのビルドパスの編集
java.io.IOException: Cannot run program "C:\〜\asakusa\experimental\bin\hadoop_job_run.sh": CreateProcess error=193, %1 ジョブ・バッチのJUnitテスト実行時の例外。
hadoop_job_run.shが実行できない。
(ファイルは見つけたが、実行可能ファイルでない)
(.shと.sh.exeの両方が存在する場合もこの例外になる)
hadoop_job_run.shを削除し、
hadoop_job_run.sh.exeと
hadoop_job_run.win.shを用意する。
ブリッジシェルの作成
java.io.IOException: Cannot run program "C:\〜\asakusa\experimental\bin\hadoop_job_run.sh": CreateProcess error=2
 
ジョブ・バッチのJUnitテスト実行時の例外。
hadoop_job_run.sh(およびhadoop_job_run.sh.exe)が見つからない。
対処方法は同上。
java.io.IOException: Cannot run program "chmod": CreateProcess error=2 ジョブ・バッチのJUnitテスト実行時の例外。
chmodが見つからない。
chmodはCygwinのを使うので、CygwinのchmodがPATHに含まれていないと考えられる。
環境変数PATHに「;C:\cygwin\bin」を追加する。
(Eclipseには、Eclipseを再起動しないと反映されない)
java.lang.AssertionError: Hadoopジョブの実行に失敗しました (exitCode=WordCountJobTest_0, flowId=1, command="[Ljava.lang.String;@10aefdb")
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapreduce/lib/output/MultipleOutputs
ジョブ・バッチのJUnitテスト実行時の例外。
MultipleOutputsクラスが見つからない。
環境変数HADOOP_HOMEがHadoop-0.20.2を指しているとこの例外が発生する。
(AsakusaFWはCDH3が対象であり、CDH3はHadoop-0.20.2にパッチを当てている)
CDH3環境を構築し、HADOOP_HOMEがそこを指すようにする。[/2011-11-16]
java.lang.AssertionError: Hadoopジョブの実行に失敗しました (exitCode=WordCountJobTest_0, flowId=1, command="[Ljava.lang.String;@d0726d")
Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected
ジョブ・バッチのJUnitテスト実行時の例外。
環境変数HADOOP_HOMEがHadoop-0.21.0を指しているとこの例外が発生する。
(JobContextは、Hadoop0.20ではクラスだが0.21ではインターフェースになったらしい)
対処方法は同上。
java.lang.AssertionError: Hadoopジョブの実行に失敗しました (exitCode=WordCountJobTest_0, flowId=127, command="[Ljava.lang.String;@4eb98b")
org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/C:/cygwin/home/ユーザー/input/file01
ジョブ・バッチのJUnitテスト実行時の例外。
Hadoopの中で入力ファイルが見つからない。
(AsakusaFWは実行前に“ホームディレクトリー”の下に入力ファイルを作成するが、
WindowsのホームディレクトリーとHadoop(Cygwin)のホームディレクトリーが異なっているので不一致になる。
この場合、「C:\Documents and Settings\ユーザー」の下に入力ファイルのディレクトリーが作られていることだろう)
実行構成のVM引数に「-Duser.home=C:/cygwin/home/ユーザー」を指定する。
(AsakusaFWに対し、Cygwinでログインした際のホームディレクトリーを指定する)
java.lang.AssertionError: Hadoopジョブの実行に失敗しました (exitCode=WordCountJobTest_0, flowId=127, command="[Ljava.lang.String;@f4d6b3")
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory result already exists
ジョブ・バッチのJUnitテスト実行時の例外。
Hadoopの出力先ディレクトリーが存在している。
(Hadoopでは、出力先が既に存在しているとこのようなエラーになる)
(AsakusaFWは実行前に“ホームディレクトリー”の下にある出力先をクリアするが、
WindowsのホームディレクトリーとHadoop(Cygwin)のホームディレクトリーが異なっているので不一致になる)
対処方法は同上。

インストールへ戻る / AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま