Sawzall

何か今さらながら、Sawzall。

Sawzallは言うまでもなく、Rob PikeさんがGoogleで作ったMapReduce処理に特化したドメイン固有言語。RDBMSにおけるSQLみたいなものか。Mapに相当するのがFilterで、Reduceに相当するのがAggregator。Aggregatorは言語に組み込みのものを使い(Sawzallレベルで記述できない)、プログラマはFilterを書く。MapReduceではkey-valueの組合わせを処理することになるが、Sawzallではkey-valueを意識する必要はない。例えば、入力ファイル(もちろんGFSから)に書かれた数値の合計を求めるプログラムはこんな感じ。

count: table sum of int;
total: table sum of float;
sum_of_squares: table sum of float;

x: float = input;

emit count <- 1;
emit total <- x;
emit sum_of_squares <- x * x;

文法がLimboっぽいね(PASCALっぽいとも)。汎用プログラミング言語じゃないので、できることは限られるけど。"table sum"って部分がsum aggregatorを使うよという宣言になる。emitって命令でaggregator totalに値を書き込んでいる。ちょっとチャネルっぽい。ここは入力ファイルのデータ(float)の個数分、実行される。つまり、1を加えることはカウンタを意味する。さらに、個々のaggregatorは並列で動くらしい。

複合データ型のファイル入出力には(最近オープンソース化された)プロトコルバッファを使う。

Hadoopプロジェクトには、Pigってのがあるんだけど、クローンを作るという訳ではなく、何だか別物だなぁ。

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)