Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hadoop Conference Japan 2009 #2

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

  • Be the first to comment

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>

×