象と戯れ

 | 

2009-01-17

SQLとMap-Reduceのあいだ:Pig Latin

21:03 | SQLとMap-Reduceのあいだ:Pig Latin - 象と戯れ を含むブックマーク はてなブックマーク - SQLとMap-Reduceのあいだ:Pig Latin - 象と戯れ

Pig Latin: A Not-So-Foreign Language for Data Processing

何やらSQLのように簡易に書けるデータ処理言語をYahoo!が(オープンソースで)開発中らしい。膨大なデータの分析処理にはMap-Reduceのような並列処理が欠かせないけど、Map-Reduce(とそのラッパであるSawzall)は処理やデータ構造が頑固(rigid)すぎてちょっと分析みたいな用途には面倒なことが多すぎるよね、ということで宣言的且つSQLによく似た変態的言語を作りました、というのが趣旨らしい。プロジェクトホームページはApache Incubator上に→Welcome to Apache Pig!

やっぱ世の中そっちへ行くんでしょうねー。

SQLは所謂関係代数を扱う言語ですが、データ分析の肝は逐次処理(SELECT-Map)と集約処理(GROUP BY-Reduce)だと思っています。その意味では、この論文がまずここからスタートしている点で個人的に興味深い。

Pig Latinの変態的なところ。

  • データ分析に特化するのでスキーマは必要ない。データ名を与える必要もない(何番目のデータ、と指定する)。だいたいスキーマが必要なのは1)トランザクション処理が必要だから、2)データを探す必要があるから、3)データ構造を分けて管理すればAさんとBさんでそれを共有できるから、であってデータ分析処理のような逐次処理においてはスキーマは不要である。という主張。
  • データ型は3つしかない。すなわち、atom(スカラーのようなもの)、tuple(いわゆるタプルですね)、bag(複数のtupleをまとめたもの。tupleが重複してもよい)のみ。これをNested Data Modelと呼び、Pig Latin自体の処理フローにも影響を与えている。
  • COGROUPという処理により、JOINしてからGROUP BYするときの無駄を省く。
  • 将来はPig LatinにPerlPythonを埋め込めるようにしたい。

このような変態的なアプローチですが、実装はHadoopをベースにしており、Pig LatinはHadoopのタスクにコンパイルされるようです。

ただパフォーマンスなどについては述べられていないので、ちょっと遅いんじゃないかと思ったりしています。オフライン且つAd-hocなデータ分析をするのにとても向いている、ということなので、ちゃんと書きたい場合はやはり低レベルで処理を記述する必要があるのではないかと。

もうちっとSQLで、もうちっとコンパクトでいいから既存(SQL屋さん、Web屋さん)のノウハウを使える気軽なものにならないかなー。Map-Reduceからの歩み寄りが今の主流だけど、SQL側から何とかならんものか。SQL書いたら勝手に並列化して欲しいのだけど、GROUP BYは少なくとも今のPostgreSQLの実装では並列化できないのですよ。


ちなみにPig Latinとは

ピッグ・ラテン語◆ふざけてラテン語に似た響きになるよう言葉を言い換えるもので、語の最初の子音を最後に移し、さらにeiを付加する。例えばdictionaryはictionarydayになる。

Pig Latinの意味・用例|英辞郎 on the WEB:アルク

ということらしいですね。

 |