ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

AZAREAの開発ガイドを読んでみた

2012-12-13 23:55:31 | PG(分散処理)

Hadoopアドベントカレンダー2012 #hadoopAC12jpの13日目です。
もう今年はアドベントカレンダーのネタが尽きたーと思っていたら、突如現れたCACさんのAZAREA-Cluster!(12日に公表されました。)HadoopアプリケーションをGUIで開発できるとな?!
OSSではないので実際に試してみることは出来ないものの、ドキュメントが公開されていたので読んでみました。
(『機能と動作環境』の開発ガイドのリンクからpdfファイルがダウンロードできる)


まず目を引くのはやはりGUI部分ですね。
Eclipseのプラグインとしてフローを描けるようです。ファイルの結合とかはこういう図だと分かり易いですね。
ここからJavaのソースが生成されます。

データはエンティティと呼ばれるクラスで扱います。
Asakusa FrameworkだとDMDLという独自の簡易言語からクラスを生成しますが、AZAREAではExcelもしくはXMLで記述してそこからクラスを生成します。(そういえば、AsakusaFW用にExcelからDMDLを生成するマクロは作ってみたことがあるw)
生成されたクラスの各フィールドはpublicで、サンプルではセッターゲッターメソッドを介さずアクセスしていました。
Scalaもコーディング上はフィールドに直接アクセスという形なので、似たようなもの?w)

フローから生成されたJavaソースは、なんとなくCascadingに似ています。
CascadingはEachやEvery・GroupByといった処理内容を表すクラスに、自分でコーディングしたFunction・FilterやAggregaterオブジェクトを渡す形式になっています。
AZAREAもConversionやGroup・Joinといった処理内容を表すクラスがあって、それをオーバーライドしてメソッドの中を自分でコーディングします。で、雛形となるソースはフローから生成されるので、コーディングするのはメソッド内だけで良いわけです。
(WordCountの例がp.110に掲載されています) 

処理を表すクラスはConversion・Group・Sort・GroupSort・Join・UniqueJoinの6種類だけ。非常にシンプルです。
Conversionは素のMapReduceのMapper#map()に近いです。扱うデータはキー/バリューではなくエンティティクラスですが、別のエンティティクラスを作って出力できますし、出力件数も0件から複数件まで可能です。Scalaで例えるとflatMapですね。出力ファイルを2種類以上にする事も出来ようなので、Mapperより高機能ですが。
GroupがReducer相当ですかね。集計を行う処理であり、AsakusaFWのFold演算子に当たるものになります。
CascadingやAsakusaFWだと(PigHiveも)、SQLのSUMやCOUNTに当たるものはデフォルトで用意されているのですが、AZAREAではそういうものは無く、自分で必ずコーディングしなければならないようです。まぁfoldを記述するのは簡単ですし関数型プログラミングに慣れている人にとっては分かり易いですけど。
複数ファイルを扱う部分は一ファイルの時とちょっと違うコーディングとなりますが、その辺りはきっと自動生成されるので戸惑いは少なくなるのでしょう。 

AZAREAはテスト用にシミュレータが用意されているのも特徴です。
フローの処理全体を普通のJavaアプリとして実行し、Eclipse上でブレークポイントを設定してデバッグすることが出来ます。(Hadoopのタスクをイメージしてデータ分割して実行するよう考慮されてるようです(マルチスレッドではありません))
これはAsakusaFWのFlow DSLのテストに当たる部分ですが、AsakusaFWだと実際にHadoopを起動するので、ブレークポイントで止めるのは面倒なんですよね…。
一方、AsakusaFWでは複雑なロジックを書く部分であるOperatorは普通のJavaのクラスなので、JUnitで単体テストすることが出来ますが、AZAREAは一メソッド内の匿名クラスとしてソースが生成されるので、その部分だけの単体テストは困難です。

Hadoopクラスターへのリリース時には1つのjarファイルにまとめ、「hadoop jar」コマンドで普通に実行します。
複数のフローをまとめて連続して実行させることも出来るし、クラス名を指定すれば特定のフローだけを実行することも出来るようです。
ただ、入出力データの場所を-iおよび-oで指定するのですが、ディレクトリーでしか指定できないようなのが気になります。複数種類のファイルを扱う場合はどうするんでしょう?
(ディレクトリーは全部同じで、ファイル名だけで区別する?) 


まとめますと、
AZAREAはMapReduceをラップしてMapReduceを書き易くする方向性であるような印象を受けました。あるいはGUIのある上位Cascadingというか。
Javaソースの雛形を図から生成できるのは良いとして、その中でプログラマーがコーディングする内容が思ったよりも素のMapReduceに近かったです。 

Huahin FrameworkもMapReduceをラップしているイメージですが、AZAREAはHuahinFWよりはMapReduceの隠蔽度合い(抽象度)が高いかもしれません。

一番抽象度が高くて重量級なのは依然としてAsakusaFWです。
AsakusaFWは複雑な基幹バッチを記述するという目的で設計されていて、AZAREAより処理内容を表すクラス(AsakusaFWでは演算子と呼ぶ)が多いし、直接MapperやReducerを意識することが無いようになっています。
(演算子にはプログラマーがコーディングできる内容を制限することで最適化しやすくなるという効果がある。反面、演算子の種類は増えてしまう。
AZAREAは演算子に当たるクラスの種類は絞られており、その代わり1つの演算子の中で色々なものをコーディングできる。
AsakusaFWでもCoGroupだけあれば何でも記述できるが、それをすると最適化が妨げられ、著しく実行効率が下がる可能性があるので、なるべくCoGroupは使わないよう推奨されている)

HuahinFWはPig/HiveとAsakusaFWの中間が欲しかったから作られたらしいですが、AZAREAもその辺りの位置付けなのでしょうか。 


あとはやっぱり実際に使ってみないと分からないですよねぇ。

特にEclipseプラグインということで、動作の軽快さは気になります。
昔、画面フローを描いてソースを生成するEclipseプラグインのあるフレームワークを使ったことがありますが、貧弱なPCでは重すぎて何度もPCを再起動する羽目になり、生産性もモチベーションもだだ下がりという悪循環でした(苦笑)
AZAREAの場合は、MapReduceのラッパーという位置付けなのであれば、そんなに複雑なフローは対象ではないのかもしれませんが。

それと、図を修正してソースを生成し直した場合に、プログラマーが手で記述したソースがちゃんと残るかどうかですね。
ソース上にマークが付いている訳でもないので、プログラマーが記述した部分を認識できるのかどうか…?

(追記)あと、図を保存する際のデータ形式も気になります。テキストなら差分を確認したり手で直したり(一括置換したり)することも出来ますし、バージョン管理ツール(SubversionとかGitとか)とも相性が良い(マージすることも容易な)のですが。 

評価版のダウンロードの申込フォームでは、会社名が必須になってるんですよね~。
「個人」とか書いて受け付けてもらえないかなぁ?

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Asakusa Frameworkにおけるジョブとは

2012-12-11 20:51:18 | PG(分散処理)

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))

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Hadoop2系のSequenceFile

2012-12-08 00:08:09 | PG(分散処理)

Hadoopアドベントカレンダー2012 #hadoopAC12jpの8日目です。

去年はHadoop0.23(Hadoop2系)のYARNのプログラムを書いてみようと思って見事に撃墜されたわけですが、MapReduceプログラムに関しては従来通りそのままコーディングできる(MapReduce APIは変わっていない)のでまぁいいかーと思っていました。
ところが、SequenceFileのAPIが変わったと聞いてびっくり!
という訳で試してみました

と言ってもそんなに劇的に変わったというわけでもなくて、createWriter()やReaderのコンストラクターの引数がOptionの可変長引数になった程度でした。
メソッドのオーバーロードが減って分かりやすくなったという感じですかね。
(従来のメソッドも(非推奨になっていますが)残っているので、(警告は出ますが)そのまま使うことは出来ます)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Hadoopヒストリー2012

2012-12-01 00:18:38 | PG(分散処理)

Hadoopアドベントカレンダー2012 #hadoopAC12jpの1日目です。

アドベントカレンダーはクリスマスにちなんだ催しですが、クリスマスなんざ知ったこっちゃねーぜ!という自分にとっては12月は年末ですので、少し早いですが今年のHadoop関連の話題を振り返ってみたいと思います。


Cloudera(CDH)

Clouderaは以前から活動しているイメージがあったのですっかり失念していましたが、日本の株式会社としてスタートしたのは今年の4月からだそうです。

CDH3は順調にバージョンを上げて、現在の最新はCDH3u5。Hadoop2系のCDH4もちゃんと出て、今はCDH4.1.2が最新かな?
HDFSのHA(High Availability)も改良されているようです。 

最近ではImpalaが発表されて、Hiveと同じようなSQL(HiveQL)でHiveより速いと、話題沸騰でしたね。まだベータ版ですが、CDH5でサポート対象に含まれる予定らしいです。将来的には、Sqoop等と同じようにApache Impalaになるかも?

参考:CDH関連のツイート


MapR

MapR関連で一番驚いたのは、AWS(Amazon Web Services)のEMRでMapRが使えるようになった事ですね! EMRを使える人であれば、簡単にMapRを試すことが出来るようになりました。

MapRのバージョン体系はよく分からなくなってしまったんですが(汗)、MapR2.1やM7というのが出たようですね。
Hadoop1(0.20)系という事は変わっていないようですが、やはり一部ですごく独自路線です。HBaseのコンパクション不要とかリージョンサーバー・HBaseマスターが不要とか、どういう事でしょうね?! 

あと、一部のソースが公開されたという話も驚きでした。(すみません見てませんがorz)

参考:MapR関連のツイート


Hortonworks

YahooのHadoop部隊がスピンアウトして作られたというHortonworksですが、何をしているのかよく分かりませんね…。
と思っていたら、なんとWindows用Hadoopを開発していたようです。MicrosoftからHDInsightという名前で、プレビュー版が公開されました。

WindowsでHadoopクラスターを組む気はしないんですが^^;、開発環境としてはWindowsは根強いと思うので、Windows版Hadoopには期待しています。


Apache Hadoop

中核のApache Hadoopですが、最近はHortonworks以上に動向を意識していませんでした(爆)
いつの間にやらバージョンが1.1.0・0.23.4・2.0.2まで上がっていました^^;(2系はいまだにアルファ版ですけど)

HDInsightプレビュー版はHadoop1.1がベースでした。
Apache HadoopのWindows対応のissueは解決バージョンが(以前は1.1だったのが)1.2に延びているそうなので、HDInsightとは関係なく、Hadoop1.2でWindows対応するのかもしれません。


以上、簡単ですが、自分が注目した点でした。
「なんか違うんじゃね?」とか「これが抜けてるじゃねーか」というような事がありましたら、(別の日のアドベントカレンダーででも)指摘していただけると有り難いです(笑)

では、良いお年を~。(まだ早いかw)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする