S-JIS[2011-12-22/2012-09-01] 変更履歴

Asakusa Framework batchapp

Asakusa Framework0.2.1の開発環境インストールのメモ。


概要

batchappは当初から存在するアーキタイプだが、0.2.4でThunderGateに変更された。[2012-09-01]
したがって、0.2.4以降ではこのアーキタイプは存在せず、使用できない。というか使用する必要が無い。


Windowsへのインストール

AsakusaFWはLinuxが対象なのでWindowsは対象外だが、やるだけやってみた。[2011-07-24]
結論から言うと、Eclipseでプログラミング(コーディング・コンパイル)できる環境を作るまでは、Linuxへのインストール手順をWindows上で実施するだけで出来た。
ただしテストを実行するとなると、別途シェルを用意したりする必要がある。[/2011-11-16]
(0.7.1では変なことをしなくてもWindowsでフローのテストが出来る→スモールジョブ実行エンジン [2014-12-13]

  1. 環境変数の設定
    JAVA_HOME C:\Program Files\Java\jdk1.6.0_22  
    ASAKUSA_HOME C:/cygwin/home/ユーザー/asakusa Asakusa Frameworkをインストールする場所。
    インストール前に環境変数を設定しておくと、この場所に作られる。
    UNIXだと$HOME/asakusaが推奨されているので、Cygwinのその場所にしておこう。
    左記の「ユーザー」は、Cygwinでログイン(bashを起動)したときのユーザー。
  2. Mavenを使用して新しいディレクトリーを作成する。
    (Mavenのコマンドを実行すると、初回は色々なファイルをインターネットからダウンロードしてくる)
    1. コマンドプロンプトからMavenを実行し、AsakusaFWのアーキタイプを指定してAsakusaFW用開発プロジェクト(テンプレートというかサンプルプロジェクトというか)を作成する。
      カレントディレクトリーに新しいディレクトリーが作られるので、後でEclipseへインポートするときの事を考えると、ワークスペースの下に作るのが楽。
      > cd /d C:\workspace
      > mvn archetype:generate -DarchetypeCatalog=http://asakusafw.s3.amazonaws.com/maven/archetype-catalog.xml
      途中で聞かれる選択肢は以下の様な感じで指定する。
      Choose archetype:
      1: http://asakusafw.s3.amazonaws.com/maven/archetype-catalog.xml -> asakusa-archetype-batchapp (-)
      1 2011年7月時点では、選択肢は1つしか無いけど^^;
      Choose version:
      1: 0.1.0
      2: 0.2-SNAPSHOT
      3: 0.2.0
      4: 0.2.1
      5: 0.3-SNAPSHOT
      4 AsakusaFWのバージョンを指定。
      ここでは0.2.1を使う。
      (0.2-SNAPSHOTが0.2系では最新らしい)
      Define value for property 'groupId': : afw-init MavenのgroupIdのことだと思われる。
      Define value for property 'artifactId': : afw-init これがプロジェクトのディレクトリー名になる。
      Define value for property 'version': 1.0-SNAPSHOT: : 1.0 どんな値でもいい。
      Define value for property 'package': example: : init 生成されるクラスのパッケージ名。
      Confirm properties configuration:
      groupId: example
      artifactId: batchapp
      version: 1.0
      package: example
      Y: :
      y 上で入力した値の確認。
      これで良ければYを入れる。
      nとか入れると再度groupIdから入力し直せる。
    2. 開発環境用のAsakusaFWをインストールする。
      作成されたプロジェクトディレクトリーに移動し、Mavenのコマンドを実行する。
      > cd afw-init
      > mvn assembly:single antrun:run
      実行が正常に終わると、afw-initの下にtargetというディレクトリーが出来ている他、ASAKUSA_HOMEで指定された場所に 実際にディレクトリーが作られる。
      (以前にasakusaディレクトリーが作られていた場合は日時付きのディレクトリー名に変更され、新しく作り直される)
    3. 不要ファイル(サンプルとして最初から入っているソース類)を削除する。
      > del /s/q *.java
      > del /s ex*.sql
      > del /s *.xls
    4. MySQLを使わないでモデルを作成する設定」に変更する。
      afw-init\build.propertiesのasakusa.database.enabledをfalseにする。
      # The option whether to use a database for Model Generator and ThunderGate (true|false). 
      asakusa.database.enabled=false
    5. モデルが1個も無いとコンパイルが失敗するので、ダミーのモデルを作っておく。そもそも、モデルが1個も無くてもコンパイルが通るようになってればいいんだがなぁ…(苦笑)
      > echo dummy={dummy:TEXT;}; > src\main\dmdl\dummy.dmdl
    6. Eclipse用の初期設定を行う。
      1. Eclipse用の設定ファイルを作成する。依存ファイルのダウンロードが行われ、最終的に.projectとか.classpathが作られるので、Eclipseのプロジェクトとしてインポートできる状態になる。
        > mvn eclipse:eclipse
      2. Eclipseのワークスペースの設定を行う。これはワークスペース毎に1回だけ実行すればいいようだ。
        Eclipse上でjarファイルの場所(Mavenのリポジトリー)を示すM2_REPOが設定される。
        > mvn -Declipse.workspace=C:\workspace eclipse:add-maven-repo
    7. Eclipseを起動する。
    8. Eclipseにafw-initをインポートする。
      1. メニューバーの「ファイル(F)」→「インポート(I)」で「インポート」ダイアログを開く。
      2. 「一般」→「既存プロジェクトをワークスペースへ」を選択して「次へ」
      3. 「ルート・ディレクトリーの選択(T)」でafw-initの場所を指定して「完了」
    9. Eclipseの設定(プロジェクトのプロパティー)で、テキストファイルのエンコードをUTF-8にしておく。
      (AsakusaFWのjarファイルにはソースが添付されているが、それがUTF-8なので、プロジェクトの設定がUTF-8になっていないと文字化けする)
      1. メニューバーの「プロジェクト(P)」→「プロパティー(P)」でプロジェクトのプロパティーダイアログを開く。
      2. 左側のツリーから「リソース」を選択する。
      3. 右側のペインで「テキスト・ファイルのエンコード(T)」でUTF-8を指定する。
    10. Windows環境構築用プログラムを展開する。
      1. init.zip(8.19kB)をダウンロードする。
      2. 解凍して出来るinitディレクトリーを、afw-init/src/main/java/の下にコピー(上書き)する。
      3. src/main/javaの組み込みパターンを編集し、java以外も対象に含むようにする。[2011-08-07]
        1. ソースフォルダーを右クリック→「ビルド・パス(B)」→「ビルド・パスの構成(C)」
        2. 対象ソースフォルダーの下の「インクルード」あるいは「除外」を選択し、編集ボタンを押す
        3. 「組み込みパターン(N)」の「**/*.java」を削除するか、「**/*.sh」「**/*.exe」を追加する
    11. AsakusaFWのHadoop起動用シェルをWindowsから実行できるようにする。
      1. afw-init/src/main/java/init/BridgeShell.javaを実行する。(→やっていること(元の手順ではgccを使ってexeファイルを生成しているが、BridgeShellでは同梱のexeファイルを所定の場所にコピーしている。win.shも、編集済みの同梱ファイルをコピーしている)

最初の方で行っている「mvn archetype:generate〜」の実行は、AsakusaFWでの開発用のプロジェクトディレクトリーを作成するもの。
それを利用して、Windowsでの環境構築用プロジェクトとしてafw-initを作った。

後は実際の開発用プロジェクトを作成してプログラミングしていく。
WordCountを作る例


Windows固有作業の内容

Windowsへのインストール手順の最後の方でinit.zip内のプログラムを実行している。[2011-08-05]
これは、以下の作業を毎回手動で実施するのが面倒なので、プログラムで実行できるようにしたもの。


CDH3もどき

Eclipseへのインポートまで出来れば、AsakusaFWのジョブ・バッチテストクラスまで作ることが出来る。[2011-07-31]
しかしそれを実行しようとすると、Hadoopの実行環境の整備が必要になる。

AsakusaFWはCDH3(Cloudera's Distribution for Apache Hadoop version 3)上で動作する。
CDH3はHadoop0.20ベースだが、AsakusaFWをHadoop0.20.2で動かしてみたところ、動作しなかった。
CDH3は色々パッチを当てているので、元のHadoop0.20とは違う部分がある。(AsakusaFWでは新APIのMultipleOutputsを使っているが、Hadoop0.20.2には入っていない)

そこで、試しにAsakusaFWで使っているHadoopのjarファイルをHadoop0.20.2にコピーしてやったらとりあえず動いた。(→作業手順
このコピー作業を行うプログラムがinit.zipに入っている。(→作業手順

が、CDH3は素直にWindowsにインストールできるのを発見したので、このプログラムを使う必要は無くなった。[2011-11-16]


ブリッジシェルの作成

AsakusaFWのジョブテストクラスを実行すると(上記で設定した)Hadoopが起動されるが、その為に$ASAKUSA_HOME/experimental/bin/hadoop_job_run.shというシェルが使われる。[2011-07-31]
(AsakusaFWのJavaプログラムがこのシェルを起動し、そこからHadoopが実行される)

UNIX環境であればそれで全く問題ないのだが、Windows(Cygwin)環境ではJavaからシェルを実行できない。
呼び出し側のプログラムをいじれるのであればbash.exe経由で呼び出すことが出来るのだが、今回は無理。
そこで、exeファイルを用意し、それを呼ばせてそこからシェルを起動する方法をとる。

(以下の方法は、DB(MySQL)を使わない場合の設定。MySQLを使うためには他のシェルも修正する必要がある)

  1. hadoop_job_run.shを退避させる。
    $ cd $ASAKUSA_HOME/experimental/bin
    $ mv hadoop_job_run.sh hadoop_job_run.sh.org
  2. AsakusaFWから呼ばれてシェルを起動するプログラム(callwinsh.c)を作り、コンパイルする。(Cygwinにgccがインストールされていること)
    $ gcc callwinsh.c -o hadoop_job_run.sh.exe
    ※「〜.sh」と「〜.sh.exe」の両方が存在しているとexeの方は呼ばれない為、「〜.sh」は無くしておくこと。
  3. hadoop_job_run.sh.exeから呼ばれるシェルを作る。基本は最初からあるhadoop_job_run.shと同じだが、中のパスをWindows(Cygwin)用に変えてやる必要がある。
    $ cp hadoop_job_run.sh.org hadoop_job_run.win.sh
    $ vi hadoop_job_run.win.sh
    hadoop_job_run.win.sh hadoop_job_run.sh.org(変更元) 説明
    ASAKUSA_HOME=$(cygpath -u $ASAKUSA_HOME)   ASAKUSA_HOMEをUNIX用のパスに変換する処理を追加。
    LIBJAR=file:/$(cygpath -m $FLOW_JARNAME) LIBJAR=$FLOW_JARNAME パス区切り文字を「/」に変えてWindowsのフルパスにすると共に、スキーマ「file:」を付与。
    LIBJAR="$LIBJAR","file:/$(cygpath -m $i)" LIBJAR="$LIBJAR","$i"
    RUNCMD="$HADOOP_HOME/bin/hadoop jar $(cygpath -m $BATCH_RUNTIME_JAR) $TOOL_LAUNCHER_CLASSNAME $STAGE_CLIENT_CLASSNAME -conf $(cygpath -m $PLUGIN_CONF) -libjars $LIBJAR $DPROP" RUNCMD="$HADOOP_HOME/bin/hadoop jar $BATCH_RUNTIME_JAR $TOOL_LAUNCHER_CLASSNAME $STAGE_CLIENT_CLASSNAME -conf $PLUGIN_CONF -libjars $LIBJAR $DPROP" 実行対象jarファイルとconfファイルの場所はWindows上のパスにする。
  4. (Windowsの)環境変数PATHにCygwinのディレクトリーを追加しておく。
    PATH 〜;C:\cygwin\bin

なお、$ASAKUSA_HOMEのディレクトリーは新しくAsakusaFWのプロジェクトを作る度に更新されるので、上記作業もやり直す必要がある(苦笑)


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