Hadoopアドベントカレンダー2012 #hadoopAC12jpの11日目です。
Hadoopエコシステムの一員…という感じはしませんが^^;、Hadoop関連ということでAsakusa Frameworkについての話です。
AsakusaFWのBatch DSLの記述例を初めて見たとき、「これはジョブ管理ツール(JP1とかA-AUTOとかSenjuとか)のジョブネット(ジョブの実行順序を図示できる)をテキストで記述するものかな?」と思いました。
「JobAの後にJobBとJobCを実行し、両方終わったらJobDを実行する」というのは、ジョブという言葉と相まって、ジョブネットを連想させます。(そう思うと、「これはGUIで描けた方が…」という意見も出てくるわけです。ジョブ管理ツールはそれを実現している訳ですし)
ところが、これが勘違いでした。
ジョブ管理ツールにおける“ジョブ”は、AsakusaFWでは『バッチ』に相当します。
AsakusaFWの『ジョブ』はバッチ内部の処理の塊(データフロー)を表すものであり、ジョブ管理ツールの“ジョブ”とは違います。
AsakusaFWのことをよく知らないときにジョブという言葉とあの例を見たら、一般に知られているジョブ管理ツールでイメージしてしまうのも当然だと思いますが^^;
AsakusaFWの『ジョブ』は、普通のJavaアプリケーションで例えればスレッドやメソッドに当たる気がします。
「初期処理Aの後に主処理Bと主処理Cを実行し、両方終わったら後処理Dを実行する」という形はよくあると思います。この『処理』のことをAsakusaFWでは『ジョブ』と呼んでいるというイメージです。
普通のJavaアプリケーションをジョブネットで管理するとき、ジョブネット上に初期処理Aとか主処理B・C等は出てきません。
そう考えると、ジョブ管理ツールでAsakusaFWの『ジョブ』をジョブネットで表現するのはおかしいと思われるわけです。
もっとも、Asakusaアプリケーションは普通のJavaアプリに比べると大きめです。複数のMapReduceプログラム(Hadoopジョブ(これも「ジョブ」だ^^;))が生成されるわけですから。
アプリを実行している最中に進捗状況(どこまで実行されたか・何件処理されたか・どれくらいの時間が経ったか(≒あとどれくらいで終わるか))を運用者(障害担当の開発者)が知りたいと思うのは当然で、その為に『ジョブ』レベルでジョブネットに登録できたら分かり易いかもという考えもあるかと思います。
しかしジョブネットに登録しても、プログラムを変更して再コンパイルするとHadoopジョブの構成(ジョブ数や実行順序)が変わる可能性があります。その度にジョブネットを変更する方が大変なんじゃないかなぁと思います。
以上、AsakusaFWに出てくる『ジョブ』という用語に関する個人的考察でした。
(一応念の為表明しておきますが、これは自分個人の考えであり、Asakusa Framework開発チームの見解ではありません。下手すると「お前なに勝手なこと言ってんの?w」ってボコられる^^;(gkbr))