はい、Asakusaソースコードリーディング第5回のメモです。→Togetter
今回はYAESSとWindGate。
AsakusaFW0.2.2(9月末)でWindGate、0.2.3(11月中旬)でYAESSとThunderGateのキャッシュ機能がリリースされたらしいけど、自分はまだ0.2.1の頃の機能しか試してない…!orz
0.2.4は現在開発中で、WindGateCSVが入ったり、ドキュメントが整備されたりするらしい。年内リリースを目標に準備中とのこと。
YAESSはバッチを実行するコマンドラインツール(運用ツールではない。例えば障害を検知してリランするような機能は無い)。
AsakusaFWのバッチの中身はフロー→ジョブ→フェーズで構成されていて、YAESSはバッチの実行はもちろん、フェーズを指定して実行することも出来る。また、バッチ構造をJSON形式でダンプできる。
YAESSは、
・AsakusaFWの実行計画詳細を隠蔽する
・バッチ実行の環境構成を隠蔽する
・個々のジョブの起動方法を隠蔽する
・外部のジョブ運用ツールと連携できる
YAESSを構成するコンポーネントのひとつにJobSchedulerがある。これはリソースの利用状況に応じて多重度を調整したりするものらしいが、Hadoop0.23のResourceManagerでも似たような話を聞いたような^^;
AsakusaDSLからコンパイラプラグインでYAESSの構造を生成する。
また、MinGWとの連携も出来たらしい。(自分はCygwinしか使ったことないや…)
WindGateはデータソース(RDBやローカルファイル)のデータをHDFSに書き込んだり、逆にHDFSから読み込んでデータソースに書き込める、ポータブルなツール。
(例えばOracle11gからJDBC/TCPで読み込み、SSH(標準入出力でデータ転送)経由でHDFSに書き込める)
データの投入・取得・保全を一番簡単な方法で実現したもの。なので、パフォーマンス優位性は低い。
データソースはプラグインで色々対応できる。
個人的に一番気になっていて今回分かったのが、使い方。
AsakusaFWのDMDL(データモデル定義)にアノテーションを付ける。@windgate.jdbc.table(テーブル名)(RDBのテーブル用)とか、@windgate.csv(CSVファイル用)といった形。
そして、ジョブフローに指定するImporterやExporterにWindGateImporterDescriptionやWindGateExporterDescriptionを指定する。
自分は今までCSVファイル(テキストファイル)を扱う為にFileImporterDescriptionを継承して色々やってステップ数が増えて面倒だ~と思ってたけど、これで楽になりそう!
(というか、FileImporterDescriptoinはアンドキュメント(非公開)だったらしい(汗))
あと、外部からファイル名を渡すことも出来るようになるらしい。これも欲しかった機能!
ImporterDescriptionのファイル名指定部分で「"$なんちゃら"」という形で指定できるらしい。
(ついでに後から聞いた話だけど、Operatorクラスの中でconfにアクセスするAPIもあるそうで。experimental.shでconfのプロパティーを渡せそうだという事は調べがついてたんだけど、それをOperatorで取得する方法が分からなかったんだよねー)
ますます便利になってきますね!
最後に、最後の方で話題に上がったAsakusaFWのシーケンスファイルの内容を見られるツールについて。
面白そうだからという理由で作ってた(作りかけの)ツールだけど、ちょっとシーケンスファイルの中身を確認したいというだけなら(自分でもそのつもりで追加した機能なので)うってつけです(笑)
Scalaで作ったからScala2.9.1が入ってないと使えないんですが、Scalaをインストールしていない人はこの際だからScala使いになりましょうw
shr.shを実行してScalaを起動した後、「:load shr.scala」でスクリプトファイルを実行。
その後、「Path("/user/hdfs").ls」と入れてHDFS上のファイル一覧が表示されればひとまずOK。「Path("/user/hdfs").view」とやると、Swingで作ったテキトーなウィンドウが起動します^^;
後はなんとなく分かると思います。ツリーからディレクトリーを選んで、右側のファイル一覧の番号部分をダブルクリックすると幸せになれるかも?(ずっこけるかも?w)
改めて書いておきますが、作りかけなので、デザインが変だったり手抜きに見えるのは現在のところ仕様です(爆)