大学で Hadoop 使う場面ってどんなのだろうか

今さらだが @kzk_mover くんによるHadoop World NYC 参加記の紹介。Hadoop って考え方は単純なのだけど、ドキュメントがものすごい勢いで陳腐化したり、チューニングしないといけないパラメータがたくさんあったり(デフォルトで適当な値に設定されているのだけど)、コンセプトはいいのだけど使うとなると手を出しづらい技術の筆頭格だと思う。Yahoo! の例だけ引用してみると、

Hadoop Applications at Yahoo!

Yahooでの使用事例の話です。Yahooでは現在約25000台程度のノード上でHadoopが走っているようです。そのうちの約20%が本番用、約60%がResearch目的という事でした。

ただ、Yahoo.comのトップページに表示されているコンテンツの裏では結構使われているようで、Ad Optimization, Search Index, RSS Feeds, Machine Learned Spam Filters, Content Optimization (Personalization?)などなどに使われているようです。

ということで、思ったより研究目的が多いな、という印象。Yahoo! Labs で主任研究員をしている Pantel さんから2年前聞いた話では、Yahoo! Labs の自然言語処理・マイニンググループ(20人くらい)は全員 Hadoop を使っているし、新しく来たら Hadoop のトレーニングを受けられるということで、利用を積極的に推進しているらしいのだが、現在も変わっていないのね。しかし25,000台を研究目的で自由に使えるというのはうらやましい……。

またYahoo Search Assistでは3年間のログを20ステップのMapReduceで処理をすることで、検索時の関連ワード用インデックスを作成しているようです。元々は C++で書かれていて実行に26日かかっていたものが、Pythonで書けるようになった上に実行時間が20分まで縮んだようです。

とのことで、これは恐らく power method を使って検索クエリの共起行列の計算をしているのではないかと推測する(だいたい20ステップもやれば上位のランキングは収束する)のだが、実行時間26日が20分というのはさすが。でも本当に実行時間26日もかけて実行していたかどうかは疑問。たぶん「C++ のバージョンを同じデータ、同じ設定で実行したらこれくらいかかる」んじゃないかなぁ。長すぎたらきっと使う検索クエリログの分量を減らしたりして対処すると思うので……。

個人的にはそんな大規模で回す機会はそうそうないと思うので、@takahi_iさんがはどーぷ (grep)で書いているように、小規模クラスタ(大学の研究室やほとんどの企業だとこの設定だろう)でどれくらい性能が出て、どんなことに使われているのか知りたいのだが……。研究ネタは数ヶ月で一気に実験して論文書くことが多いので、「動かしてみないとスケールするか分からない」みたいなのは困るのだ。今年の5月まで半年ヤフー研究所との共同研究で Hadoop を使って検索クリックスルーログのマイニングをしていたのだが、正直なところ動かすまでに全体の1/3くらいの時間を使ってしまった(論文を読んだり並行でやっていたので、全部が全部実験だけではないが)ので、グループやチームで研究開発基盤として整備してあとは使うだけになっていればいいのだが、そうでなければ使いづらい(ので大学で本格的に使うのは難しいだろう)、というのが自分の印象。

あと Facebook での話もあったそうで

Rethinking the Data Warehouse with Hadoop and Hive

Facebookでの使用事例です。FacebookではログをHadoopクラスタに取り込んで、解析が行われているようです。

またHiveという、SQLライクなクエリ言語でMapReduceジョブを走らせる仕組みを開発しており、約95%のジョブが HiveQL(QueryLanguage)経由で実行されているようです。アプリケーションとしては、日々のPVなどのReporting・ Adhoc-Analysis・Machine Learningに使われているらしいです

ということだが、Facebook の開発体制についてはこちらが詳しい。5年で3億人のユーザーが使うサービスを作る方法(Facebookの創業者兼CEOのMark Zuckerbergのビデオからの抜粋)Facebookのサーバーもすごいことになっている件(直近10ヶ月で20,000台のサーバーを追加。ログは毎日25TB。)。元 Yahoo! のコアエンジニアが Facebook に流れているので、膨大なデータを処理したりするのはお手の物らしい(日本ではあまり Facebook 使われていないのでピンと来ない人が多いかもしれないが、Facebook はサービスとして非常に優れているし、Mixi とか Twitter なんかと違って延々残っていく技術なんではないかと予想している)。

発展が異様に早かったので、「最初の1億ユーザーになった時は、エンジニアが2人しかいなかった」なんてのを聞くと信じがたい。毎日のログが25TBだと、年間で25x365=9000TBなのだが、これはもう数万台規模で分散しないとログのマイニングなんかやってられないだろうなぁ。

最初は会社にするつもりなんか無かった。単にFBをやりたかっただけ。最初のプロトタイプは2週間で作った。ルームメートと残りの数人でプロトタイプを作った後、彼らと一緒に素晴らしいサービスを作り続けるのに一番良い方法が会社化することだった。
最初は6000人のハーバードの学生向けに85ドル/monthのサーバーで始めた。あっという間にスケールした。スケールするともっと賢い友人が参加してくれた。最初は夏の間だけシリコンバレーに来る予定だった。ネットの会社は皆シリコンバレーから来てるから一回行ってみようぜ、というノリだった。1Mユーザーを最初の1年で達成した。そうしているうちにボストンに帰れなくなった。

という経緯も信じがたいが、3ヶ月だけでもシリコンバレーに住んでみた感想からすると、「一回行ってみようぜ」というので住み着いてしまう気持ちはよく分かる。Facebook がいいなと思うのは、やっぱりここも信念があるってところかな?

ウェブサイトを作りたくてFBをやってるんじゃない。会社を作りたいからFBを作ったんじゃない。世の中により多くの情報を流通させて、もっと人々がつながれるようにしたかったからやっているんだ。
[...]
グーグルとは違うカルチャーなんだ。20%ルールの代わりに誰でも好きな機能を勝手につけられるようにしている。それを社員で使って評価し、良いものを外部にリリースするようにしている。大半の機能はエンジニアやサポートチームによって持たされているよ。

こういう「カルチャー」を企業や大学は大切にするべきだと思う。誰もがプチ Google とかプチ Mixi とか目指しても仕方ない反面、同じようなサービスをしていても「哲学」の違う企業があってもいいだろう。長期的にはそういう考え方の違うグループが並立している分野のほうが、切磋琢磨や人材・アイデアの交換があって長続きするのではないかな、と思ったり。