Skip to content

Instantly share code, notes, and snippets.

@torazuka
Created May 23, 2011 18:52
Show Gist options
  • Save torazuka/987281 to your computer and use it in GitHub Desktop.
Save torazuka/987281 to your computer and use it in GitHub Desktop.
batchapp.sandboxのexample.batchを追っかける
batchapp.sandboxのexample.batchのテストクラスを実行してみる。
(前処理)
実行時の追加設定をしたり、バッチ実行時引数を受け取ったりする。
コンパイラ(Flowコンパイラ)のオプション用変数を使うと、ここで最適化の設定を色々変えられる。詳細は、FlowCompilerOptionsのItemというenumを参照するとよい。
- Combiner(って何?)の有効化
- フロー部品をインライン化するときの最適化設定
- 互いに影響しないステージの合成
- データ結合の有無や方法(ハッシュ/マージなど)のデータサイズごとの指定
- デバッグロギングの有効化
などができるっぽい。
build.propertiesを読み込み、ASAKUSA_MODELGEN_PACKAGEとASAKUSA_MODELGEN_OUTPUTを設定する(これらのディレクトリは後ほど作成される)。テストデータのディレクトリへのパスも、ここで設定される。
HADOOP_HOMEの設定、ジョブ実行シェルへのパスの設定、クラスタの作業ディレクトリの設定などが終わると、初期化が完了する。
(コア部分)
まず、クラスタ上のディレクトリを削除する。# あらかじめHadoopのソースコードを持ってきておかないと、このあたりは読めないので注意。
次に、BatchDriverクラスをインスタンス化する。BatchDriverは、Batchアノテーションを付けたクラスを解析する。バッチクラスは、トップレベルかつpublicなクラスでないといけない、抽象クラスであってはいけない等の制約がある。
それから、バッチ記述メソッドが起動される。この処理は、別のジョブフローの登録中だと例外を投げる。
サンプルのバッチクラスの中身が取り出される。バッチクラスは、BatchDescriptionを拡張している。Batchアノテーションでname="ex"という属性が付いているが、これが命名規則なのかどうかは未確認。
コンパイル作業ディレクトリが存在したら削除する。outputディレクトリとbuildディレクトリをに作成する。
そして、バッチからjarが作成される。この時、大量にログが出る。この処理をするDirectBatchCompilerクラスは、testingパッケージよりも下にいるが、つどバッチからjarをパッケージングする子は、通常どこにいるんだろう?
最後に、バッチコンパイラが生成したシェルスクリプトが実行される。環境変数に-D引数一覧が積まれる。コマンドの文脈情報というものを作る。
(後処理)
テスト結果を検証ツールにかけて、テスト終了
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment