Hadoop Conference Japan 2009 #2

4,438 views

Published on

楽天のHadoop利用事例(後半)
2009年11月13日に行われました、Hadoop Conference Japan 2009の発表資料です。

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,438
On SlideShare
0
From Embeds
0
Number of Embeds
179
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Hadoop Conference Japan 2009 #2

  1. 1. 楽天の Hadoop 利用事例 ~技術研究所でも~ 楽天株式会社 楽天技術研究所 西岡 悠平| 2009 年 11 月 13 日
  2. 2. 楽天技術研究所について  <ul><li>自然言語 </li></ul><ul><li>マルチメディア </li></ul><ul><li>データマイニング </li></ul><ul><li>大規模・分散 </li></ul>研究テーマ More Than Web - 来るべき豊かなリアリティを - コンセプト 楽天タワー 楽天技術研究所 Rakuten Institute of Technology
  3. 3. 自己紹介 <ul><li>西岡 悠平 </li></ul><ul><li>データマイニング、自然言語 担当 </li></ul><ul><li>[email_address] </li></ul><ul><li>@nishiokamegane </li></ul>
  4. 4. 目次 1 Hadoop で集合知プログラミング 2 POJO Hadoop 3 fairy by 楽天技術研究所
  5. 5. 目次 1 Hadoop で集合知プログラミング 2 POJO Hadoop 3 fairy by 楽天技術研究所
  6. 6. 集合知プログラミング (1)‏ <ul><ul><li>( 最も簡単な例 ) ランキング </li></ul></ul><ul><ul><li>( その他の例 ) レコメンデーション… </li></ul></ul><ul><ul><li>利用者のデータを利用して計算を行い </li></ul></ul><ul><ul><li>ユーザがもっと便利に、もっと楽しく </li></ul></ul>集合知プログラミングとは? 楽天でも 売っているらしい
  7. 7. 集合知プログラミング (2)‏ <ul><ul><li>機械学習 </li></ul></ul><ul><ul><li>データマイニング </li></ul></ul><ul><ul><li>統計処理 </li></ul></ul>具体的な手法は? Hadoop で動くの?? k-means ( クラスタリング ) について見ていきましょう
  8. 8. k-means 初期状態
  9. 9. k-means 赤クラスタと青クラスタの中心をランダムに
  10. 10. k-means クラスタへ割り当て ( 距離計算 )‏
  11. 11. k-means クラスタへ割り当て
  12. 12. k-means 中心の移動
  13. 13. k-means 中心の移動
  14. 14. k-means クラスタへ割り当て [2 回目 ] ( 距離計算 )‏
  15. 15. k-means クラスタへ割り当て [2 回目 ]
  16. 16. k-means 中心の移動 [2 回目 ]
  17. 17. k-means 中心の移動 [2 回目 ]
  18. 18. k-means 収束すれば終了
  19. 19. 楽天の商品を k-means で <ul><li>まともにやったら、終わりそうにない・・・ </li></ul><ul><li>楽天の商品 2,000 万件を k-means でクラスタリングする </li></ul>課題 アルゴリズムを工夫 それでも一週間ぐらいかかりそう・・・ Hadoop は?? ( 当時は ver.0.16.x)‏
  20. 20. k-means は Hadoop 上で動くの?  (1)‏ <ul><li>Apache Mahout </li></ul><ul><li>現在 (2009/11/18 時点 ) で ver 0.1 </li></ul><ul><li>Apache Lucene のサブプロジェクト </li></ul><ul><li>目的 </li></ul><ul><ul><li>様々な機械学習のアルゴリズムを Hadoop 上に構築しよう! </li></ul></ul><ul><ul><li>分類 ( Naïve Bayes …. ) </li></ul></ul><ul><ul><li>遺伝的プログラミング </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>クラスタリング (k-means)‏ </li></ul></ul>http://lucene.apache.org/mahout/
  21. 21. k-means は Hadoop 上で動くのか? (2)‏ 開始 収束? 開始 (Map 処理 )‏ クラスタへ割り当て (Reduce 処理 )‏ 中心を移動 それぞれの点で 中心との距離を計算 ⇒ 完全に並列 クラスタに属する点を 集めて中心の再計算 ⇒ 集約が必要
  22. 22. 楽天の商品を k-means ( Hadoop バージョン )‏ <ul><li>Apache Mahout のソースコードを参考 </li></ul><ul><li>1 日 (17 時間 ) で終了した </li></ul>どうなった?
  23. 23. 目次 1 Hadoop で集合知プログラミング 2 POJO Hadoop 3 fairy by 楽天技術研究所
  24. 24. Hadoop で Java プログラミング面倒では?? <ul><li>MapReduce プログラムを書くのは面倒 </li></ul><ul><ul><li>Mapper  インターフェースなどを実装しなければ </li></ul></ul><ul><ul><li>org.apache.hadoop.io.IntWritable から int へ変換しなければ </li></ul></ul><ul><ul><li>Reporter クラスを使わないときでも、引数で渡さなければ </li></ul></ul><ul><li>Pig や Hive でも問題が </li></ul><ul><ul><li>データ形式をそろえたり、使うための準備が大変 </li></ul></ul><ul><ul><li>専用言語を覚えるのが大変 </li></ul></ul><ul><ul><li>内部でどのタイミングで MapReduce が行われるのか不明瞭 </li></ul></ul><ul><ul><ul><li>オーバーヘッドが大きそう </li></ul></ul></ul>
  25. 25. そこで、 <ul><li>薄い皮のフレームワーク </li></ul><ul><li>Pig や Hive みたいに別の計算モデルを導入なし </li></ul><ul><ul><li>MapReduce プログラマーは新しいことを覚えることが少ない </li></ul></ul><ul><li>この図のイメージで、簡単にプログラムを書けるように </li></ul>POJO Hadoop というフレームワークを開発 コンセプト EJB Plain Old Java Object ( POJO)
  26. 26. POJO Hadoop の機能 <ul><li>1. リフレクション機能 </li></ul><ul><ul><li>任意のクラスを MapReduce に変更可能 </li></ul></ul><ul><li>2. コンバート機能 </li></ul><ul><ul><li>Writable クラスを Java の通常クラスに、自動変換 </li></ul></ul><ul><li>3. インジェクション機能 </li></ul><ul><ul><li>OutputCollector や Reporter は自動的にインジェクション </li></ul></ul>
  27. 27. WordCount のサンプル <ul><li>public class WordCount { </li></ul><ul><li>public Output output; public void map(long key, String value) { </li></ul><ul><li>output.collect(value, 1); </li></ul><ul><li>} </li></ul><ul><li>public void reduce(String key, Iterator<Integer> values) { </li></ul><ul><li>int sum = 0; </li></ul><ul><li>while (values.hasNext()) { sum += values.next(); } </li></ul><ul><li>output.collect(key, sum); </li></ul><ul><li>} </li></ul><ul><li>public static void main(String[] args) throws Exception { </li></ul><ul><li>RitJobConf conf = new RitJobConf(WordCount.class); </li></ul><ul><li>conf.input(TextInputFormat.class, “input&quot;); </li></ul><ul><li>conf.setDriverClass(WordCount.class, Integer.class); conf.output(TextOutputFormat.class, “output&quot;); JobClient.runJob(conf); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  28. 28. 目次 1 Hadoop で集合知プログラミング 2 POJO Hadoop 3 fairy by 楽天技術研究所
  29. 29. 楽天では独自に分散フレームワーク開発 <ul><li>特徴 </li></ul><ul><li>Ruby </li></ul><ul><li>MapReduce にアイデアを得ながらも より汎用的・生産的なフレーワーク </li></ul><ul><li>最近のトピック </li></ul><ul><li>ROMA( 分散 KVS) と連携 </li></ul><ul><li>現状 </li></ul><ul><li>主要な API は実装済み </li></ul><ul><li>バッチ処理の並列化に試験導入 </li></ul>先月 オープンソース化
  30. 30. まとめ <ul><li>集合知プログラミングも Hadoop で </li></ul><ul><ul><li>参考になるオープンソースもある </li></ul></ul><ul><li>簡易フレームワークでわずらわしい処理から解放 </li></ul><ul><ul><li>少しの工夫で生産性向上 </li></ul></ul><ul><li>独自の分散フレームワーク開発 </li></ul><ul><ul><li>頑張っていきます </li></ul></ul>

×