Hadoop Summit

masayang2010-06-29

ってのに参加している。

行ってきた

個別の話は(気が向いたら)ブログに書く。

昼飯食べながら議論になったのは、MapReduceというフレームワークの上でアプリケーションを書くのがいいのか、HiveやPigといったデータ操作言語を使うのがいいのか、という話。

確かにJavaPythonガリゴリ書くよりは、統一されたデータ操作言語を使うほうが生産性が上がるような気がする。だが、自分は(今のところ)JavaPythonMapReduceのロジックを書く方に一票を投じたい。理由は二つ。

(1) 可読性

プログラミング言語は作法を守り、開発者が努力すれば読みやすくできる。読みやすい、というのは段落がつくとか中括弧で囲めるとかいう次元の話ではなく、「コードとそのテストを読めば何やってるかがわかる」という意味である。ただし繰り返すが「努力すれば」という条件がつく。その努力とは、テスト〜リファクタリングの繰り返しであり、決して単純な話ではないことは認める。

だが、データ操作言語で可読性を高めるのは...やはり簡単な話ではないが、努力してもどうしようもない局面もでてくる。たぶんそれは「データ操作言語」vs「汎用記述言語」の間の越えがたい壁みたいなもので、結局は「こういう操作をしているのですよ」みたいな解説文をコードの中なり外なりに置かざるを得なくなる。

そして、その「解説文」と「コード」との間の乖離を見抜けない人がコードに手を入れる時に、何がしかの問題を埋め込んでくれるわけですよ。もちろんその問題はリグレッションテストで検知可能だけど、Statefulな仕掛けを網羅的に試験するのは中々大変なわけで。それは↓下に書いた「テストのしやすさ」につながっていく。

(2) テストしやすい

上の可読性とも関わるけど、環境依存の部分をモックなりスタブなりでだまくらかしてテストできる(すなわちロジックを書ける)汎用言語ってのは、環境依存から逃れられないデータ操作言語に比べると圧倒的にテストしやすいわけで。ストリーミングを使ったMapReduceなら入力に実ファイルを使ってもテスト環境設定はそれほど面倒ではないし。


もちろん、MapReduceの後にPigやらHiveやらがでてきたのはそれなりに需要があったからなんだろうけど、本当にその必要性が見えてくるまで、自分の関わるプロジェクトはMapReduceで頑張ってみようかな、と。