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.
Amazon Elastic
MapReduce
+
Apache Mahout
レコメンデーション!
アジェンダ
今回する話、しない話

 する話
• 使うモノの紹介
• レコメンデーションをする流れ/手順
 しない話
• 機械学習の話
• 類似指標の統計学な話
• Hadoopの仕組み

難しいことは無しで!
レコメンデーション
レコメンデーション
使うモノ
使うモノ

 Apache Mahout
 Amazon Elastice MapReduce
 Amazon S3
 データ(csv ,tsv)
Mahout
Mahout

 機械学習・データマイニング
• レコメンデーションエンジン
• クラスタリング
• 分類

ライブラリ
Mahout

 Hadoop上で動作する
 スケーラブル
 Javaオープンソース

象

象使い
Mahout

 選べる、類似指標
•
•
•
•
•
•

ピアソンの相関係数
ユークリッド距離による類似度
コサイン類似度
スピアマンの相関関係による相対順位
Tanimoto係数
対数尤度検定
Elastic MapReduce
Elastic MapReduce

 Hadoopが!MapReduceが!簡単につかえる
 ブラウザからもコマンドラインからも操作可能
 略称:EMR
S3
S3

 静的ファイルがおけるストレージ
 2014/2にEBSと一緒に価格改定!
• …落ち着いたらc3インスタンスも価格改定していただけると…
全体図
全体図
全体図(今日はこっち)
実践!
レコメンデーション!
準備
準備

 IAM(アクセス権限)
• サーバ→S3接続用
• Mac→EMR実行用

 Server に s3cmdインストール
• aws s3 コマンドでもいいけど今回はs3cmd
準備

 MacにAmazon Elastic MapReduce Ruby Clientをインスト
ール
• http://aws.amazon.com/developertools/ElasticMapReduce/2264
• http...
IAM設定
IAM設定

 割愛
s3cmdインストール
s3cmdインストール
■インストール
# yum --enablerepo epel install s3cmd
■設定
# s3cmd --configure
Enter new values or accept defaults in b...
(続き)
When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. ...
(続き)

Test access with supplied credentials? [Y/n] y★
Please wait...
Success. Your access key and secret key worked fine :...
Elastic MapReduce Ruby
Clientインストール
rbenvインストール&ruby1.8.7切替
■バージョン確認(2.0が入っている)
$ ruby -v
■インストール&設定
$ brew tap homebrew/dupes ; brew install apple-gcc42
$ CO...
Elastic MapReduce Ruby Clientインスト
ール

■ディレクトリ作成
$ mkdir -p /usr/local/aws/elastic-mapreduce/
■ダウンロード
$ cd /usr/local/aws/e...
Elastic MapReduce Ruby Client設定
■テンプレコピー
$ cp -p tests/credentials.json .
■編集
$ vi credentials.json
■中身
$ cat credentials....
s3にMohout 配置
s3にMahout配置

 ダウンロード
• mahout-core-0.8-job.jar
 S3 Bucket作成

• 今回は s3://emr-mahout002/
 フォルダ作成、mahout配置
• s3://emr-maho...
s3にMahout配置

 lucene-4.3.0.tgzとbootstrap action用のシェルを用意
 EMRの/home/hadoop/lib にあるluceneが古いので置

き換え
 lucene-4.3.0.tgz
 ...
テストデータを準備
テストデータを準備

• ユーザID
• 商品ID
• レート(数が大きい方が評価がいい)
• レート無しのデータでもいい(Boolean Data)
テストデータを準備

(ないしょ)

38
テストデータを準備

• 合計 6千万件、レート無し(--booleanData)
• 201307_reco.csv
• 9683050件

• 201308_reco.csv
• 10868457件

• 201309_reco.csv
•...
テストデータを転送

# s3cmd put *.csv s3://emr-mahout002/input/
201307_reco.csv -> s3://emr-mahout002/input/201307_reco.csv
1301669...
実行
実行
$ ./elastic-mapreduce 
> --create --name "mahout" 
> --instance-group master 
> --instance-type m1.small 
> --instance-...
実行

43
オプション

■masterノードとcoreノードをスポットインスタンスで起動する
> --instance-group master 
> --instance-type m1.small 
> --instance-count 1 
> -...
オプション

■レートがついていないデータを処理するときにつける
> --booleanData 
■lucene置換え
> --bootstrap-action s3://point-ag-emr-s3001-imura/program/up...
オプション

■mahoutのクラス
> --main-class org.apache.mahout.cf.taste.hadoop.item.RecommenderJob 

■org.apache.mahout.cf.taste.hado...
完了!
結果:出力結果
結果:出力結果

■part-r-00000
55
[110419:0.42909026,115739:0.40889424,(省略),91575:0.044669896]
215
[111461:0.47767943,117415:0.451...
結果:処理時間/利用料金

 処理時間
• Example Jar Step
• Hadoop Debugging

:
:

52 minutes
34 seconds
結果:処理時間/利用料金

 料金(オンデマンドインスタンスの場合)
 $ 9.89





S3 : 1.6GB x 24h
PCへ転送 : 1.6GB
EC2 : m1.small x 4 x 1hour
Elastic Ma...
考察
こんなことわかるかも
Link集
Link集

•

Mahout
• 本家 https://mahout.apache.org/
• Mahout JP https://sites.google.com/site/mahoutjp/
• クラスメソッド http://dev....
Upcoming SlideShare
Loading in …5
×

Amazon Elastic Mapreduce + Apache Mahout レコメンデーション

1,717 views

Published on

社内エンジニア情報共有会で
使った資料です。

Published in: Technology

Amazon Elastic Mapreduce + Apache Mahout レコメンデーション

  1. 1. Amazon Elastic MapReduce + Apache Mahout レコメンデーション!
  2. 2. アジェンダ
  3. 3. 今回する話、しない話  する話 • 使うモノの紹介 • レコメンデーションをする流れ/手順  しない話 • 機械学習の話 • 類似指標の統計学な話 • Hadoopの仕組み 難しいことは無しで!
  4. 4. レコメンデーション
  5. 5. レコメンデーション
  6. 6. 使うモノ
  7. 7. 使うモノ  Apache Mahout  Amazon Elastice MapReduce  Amazon S3  データ(csv ,tsv)
  8. 8. Mahout
  9. 9. Mahout  機械学習・データマイニング • レコメンデーションエンジン • クラスタリング • 分類 ライブラリ
  10. 10. Mahout  Hadoop上で動作する  スケーラブル  Javaオープンソース 象 象使い
  11. 11. Mahout  選べる、類似指標 • • • • • • ピアソンの相関係数 ユークリッド距離による類似度 コサイン類似度 スピアマンの相関関係による相対順位 Tanimoto係数 対数尤度検定
  12. 12. Elastic MapReduce
  13. 13. Elastic MapReduce  Hadoopが!MapReduceが!簡単につかえる  ブラウザからもコマンドラインからも操作可能  略称:EMR
  14. 14. S3
  15. 15. S3  静的ファイルがおけるストレージ  2014/2にEBSと一緒に価格改定! • …落ち着いたらc3インスタンスも価格改定していただけると…
  16. 16. 全体図
  17. 17. 全体図
  18. 18. 全体図(今日はこっち)
  19. 19. 実践! レコメンデーション!
  20. 20. 準備
  21. 21. 準備  IAM(アクセス権限) • サーバ→S3接続用 • Mac→EMR実行用  Server に s3cmdインストール • aws s3 コマンドでもいいけど今回はs3cmd
  22. 22. 準備  MacにAmazon Elastic MapReduce Ruby Clientをインスト ール • http://aws.amazon.com/developertools/ElasticMapReduce/2264 • http://docs.aws.amazon.com/ElasticMapReduce/latest/ DeveloperGuide/emr-cli-install.html • ruby:1.8.7が必要(Mac OS X mavericks の ruby バージョン は2.0)  S3にMohout配置  Serverにテストデータを準備
  23. 23. IAM設定
  24. 24. IAM設定  割愛
  25. 25. s3cmdインストール
  26. 26. s3cmdインストール ■インストール # yum --enablerepo epel install s3cmd ■設定 # s3cmd --configure Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options. Access key and Secret key are your identifiers for Amazon S3 Access Key: (ひみつ)★ Secret Key: (ひみつ)★ Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: Path to GPG program [/usr/bin/gpg]:★ (続く) 26
  27. 27. (続き) When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP and can't be used if you're behind a proxy Use HTTPS protocol [No]:y★ On some networks all internet access must go through a HTTP proxy. Try setting it here if you can't conect to S3 directly HTTP Proxy server name: New settings: Access Key: (ひみつ)★ Secret Key: (ひみつ)★ Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: HTTP Proxy server port: 0 (続く) 27
  28. 28. (続き) Test access with supplied credentials? [Y/n] y★ Please wait... Success. Your access key and secret key worked fine :-) Now verifying that encryption works... Not configured. Never mind. Save settings? [y/N] y★ Configuration saved to '/root/.s3cfg' # 28
  29. 29. Elastic MapReduce Ruby Clientインストール
  30. 30. rbenvインストール&ruby1.8.7切替 ■バージョン確認(2.0が入っている) $ ruby -v ■インストール&設定 $ brew tap homebrew/dupes ; brew install apple-gcc42 $ CONFIGURE_OPTS="--without-tk" rbenv install 1.8.7-p374 →tkをのぞいてインストールしないとrbenv実行時にエラーが出た $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile $ echo 'export PATH="$HOME/.rbenv/shims:$PATH"' >> ~/.bash_profile ■動作確認 $ rbenv versions →インストール済みrubyのバージョン確認 ■ruby 1.8.7 インストール $ rbenv install -l →インストールできるバージョン確認 $ rbenv install 1.8.7-p374 ■バージョン切替(自分だけ使う場合) $ rbenv shell 1.8.7-p374 30
  31. 31. Elastic MapReduce Ruby Clientインスト ール ■ディレクトリ作成 $ mkdir -p /usr/local/aws/elastic-mapreduce/ ■ダウンロード $ cd /usr/local/aws/elastic-mapreduce/ $ wget http://elasticmapreduce.s3.amazonaws.com/elastic-mapreduce-ruby.zip ■解凍 $ unzip elastic-mapreduce-ruby.zip 31
  32. 32. Elastic MapReduce Ruby Client設定 ■テンプレコピー $ cp -p tests/credentials.json . ■編集 $ vi credentials.json ■中身 $ cat credentials.json { "access-id": "(ないしょ)", "private-key": "(ないしょ)", "key-pair": "(key pair名)", "key-pair-file": "/Users/hoge/.ssh/(key pair名).pem", "region": "ap-northeast-1" } $ ■動作確認 $ ./elastic-mapreduce --version 32
  33. 33. s3にMohout 配置
  34. 34. s3にMahout配置  ダウンロード • mahout-core-0.8-job.jar  S3 Bucket作成 • 今回は s3://emr-mahout002/  フォルダ作成、mahout配置 • s3://emr-mahout002/program/mahout-core-0.8-job.jar • s3://emr-mahout002/input/
  35. 35. s3にMahout配置  lucene-4.3.0.tgzとbootstrap action用のシェルを用意  EMRの/home/hadoop/lib にあるluceneが古いので置 き換え  lucene-4.3.0.tgz  http://archive.apache.org/dist/lucene/java/4.3.0/luce ne-4.3.0.tgz  update-lucene.sh #!/bin/bash cd /home/hadoop wget https://s3.amazonaws.com/emr-mahout001/program/lucene-4.3.0.tgz tar -xzf lucene-4.3.0.tgz cd lib rm lucene-*.jar cd .. cd lucene-4.3.0 find . | grep lucene- | grep jar$ | xargs -I {} cp {} ../lib
  36. 36. テストデータを準備
  37. 37. テストデータを準備 • ユーザID • 商品ID • レート(数が大きい方が評価がいい) • レート無しのデータでもいい(Boolean Data)
  38. 38. テストデータを準備 (ないしょ) 38
  39. 39. テストデータを準備 • 合計 6千万件、レート無し(--booleanData) • 201307_reco.csv • 9683050件 • 201308_reco.csv • 10868457件 • 201309_reco.csv • 11052025件 • 201310_reco.csv • 1316778件 • 201311_reco.csv • 10291417件 • 201312_reco.csv • 9873681
  40. 40. テストデータを転送 # s3cmd put *.csv s3://emr-mahout002/input/ 201307_reco.csv -> s3://emr-mahout002/input/201307_reco.csv 130166984 of 130166984 100% in 6s 18.33 MB/s done 201308_reco.csv -> s3://emr-mahout002/input/201308_reco.csv 146658501 of 146658501 100% in 7s 19.35 MB/s done 201309_reco.csv -> s3://emr-mahout002/input/201309_reco.csv 149486065 of 149486065 100% in 7s 18.30 MB/s done 201310_reco.csv -> s3://emr-mahout002/input/201310_reco.csv 153614716 of 153614716 100% in 7s 18.47 MB/s done 201311_reco.csv -> s3://emr-mahout002/input/201311_reco.csv 139924425 of 139924425 100% in 6s 20.11 MB/s done 201312_reco.csv -> s3://emr-mahout002/input/201312_reco.csv 133819195 of 133819195 100% in 6s 19.68 MB/s done [1 of 6] [2 of 6] [3 of 6] [4 of 6] [5 of 6] [6 of 6] # 40
  41. 41. 実行
  42. 42. 実行 $ ./elastic-mapreduce > --create --name "mahout" > --instance-group master > --instance-type m1.small > --instance-count 1 > --bid-price 0.2 > --instance-group core > --instance-type m1.small > --instance-count 3 > --bid-price 0.2 > --enable-debugging > --bootstrap-action s3://point-ag-emr-s3001-imura/program/update-lucene.sh > --bootstrap-name update-lucene.sh > --bootstrap-action s3://ap-northeast-1.elasticmapreduce/bootstrap-actions/configurations/latest/memory-intensive > --bootstrap-name Memory-intensive-configuration > --log-uri s3://emr-mahout002/logs/ > --jar s3://emr-mahout002/program/mahout-core-0.8-job.jar > --main-class org.apache.mahout.cf.taste.hadoop.item.RecommenderJob > --arg -Dmapred.input.dir=s3n://emr-mahout002/input > --arg -Dmapred.output.dir=s3n://emr-mahout002/output`date +%Y%m%d%H%M%S` > --arg --numRecommendations --arg 100 > --arg --booleanData --arg true > --arg --similarityClassname --arg SIMILARITY_EUCLIDEAN_DISTANCE > --arg --input --arg s3://emr-mahout002/input > --arg --output --arg s3://emr-mahout002/output`date +%Y%m%d%H%M%S` Created job flow j-U0Y9C97EX35E $ 42
  43. 43. 実行 43
  44. 44. オプション ■masterノードとcoreノードをスポットインスタンスで起動する > --instance-group master > --instance-type m1.small > --instance-count 1 > --bid-price 0.2 ★このオプションを外すとオンデマンドインスタンスで起動 > --instance-group core > --instance-type m1.small > --instance-count 3 > --bid-price 0.2 ★このオプションを外すとオンデマンドインスタンスで起動 • テストのとき • 仮に全部失敗してもまあいいかなってとき • 1時間以内に終わる処理で失敗してもいいかなってとき • 1時間以内におわるなら、仮に高騰で停止した場合のインスタンス 料は$0に! 44
  45. 45. オプション ■レートがついていないデータを処理するときにつける > --booleanData ■lucene置換え > --bootstrap-action s3://point-ag-emr-s3001-imura/program/update-lucene.sh > --bootstrap-name update-lucene.sh ■なんかつけないとうまく動かないオプション > --bootstrap-action s3://ap-northeast-1.elasticmapreduce/bootstrap-actions/configurations/latest/memory-int ensive > --bootstrap-name Memory-intensive-configuration ■実行するjar(mahout-core) > --jar s3://emr-mahout002/program/mahout-core-0.8-job.jar 45
  46. 46. オプション ■mahoutのクラス > --main-class org.apache.mahout.cf.taste.hadoop.item.RecommenderJob ■org.apache.mahout.cf.taste.hadoop.item.RecommenderJob のオプション > --arg -Dmapred.input.dir=s3n://emr-mahout002/input > --arg -Dmapred.output.dir=s3n://emr-mahout002/output`date +%Y%m%d%H%M%S` > --arg --numRecommendations --arg 100 > --arg --similarityClassname --arg SIMILARITY_EUCLIDEAN_DISTANCE ★類似指 標 > --arg --booleanData --arg true > --arg --input --arg s3://emr-mahout002/input > --arg --output --arg s3://emr-mahout002/output`date +%Y%m%d%H%M%S` 46
  47. 47. 完了!
  48. 48. 結果:出力結果
  49. 49. 結果:出力結果 ■part-r-00000 55 [110419:0.42909026,115739:0.40889424,(省略),91575:0.044669896] 215 [111461:0.47767943,117415:0.4510779,(省略),108385:0.03656739] 255 [62750:0.16326842,93342:0.13579611,(省略),97662:0.06684246] … ■ユーザ数 $ wc -l * 0 _SUCCESS 82266 part-r-00000 82510 part-r-00001 82476 part-r-00002 82361 part-r-00003 82237 part-r-00004 411850 total $
  50. 50. 結果:処理時間/利用料金  処理時間 • Example Jar Step • Hadoop Debugging : : 52 minutes 34 seconds
  51. 51. 結果:処理時間/利用料金  料金(オンデマンドインスタンスの場合)  $ 9.89     S3 : 1.6GB x 24h PCへ転送 : 1.6GB EC2 : m1.small x 4 x 1hour Elastic MapReduce  http://calculator.s3.amazonaws.com/index.html?ln g=ja_JP#r=NRT&key=calc-E73CCF8C-CB10-439F-A 1FD-EC1C82362ECB
  52. 52. 考察
  53. 53. こんなことわかるかも
  54. 54. Link集
  55. 55. Link集 • Mahout • 本家 https://mahout.apache.org/ • Mahout JP https://sites.google.com/site/mahoutjp/ • クラスメソッド http://dev.classmethod.jp/cloud/aws/mahout-recommender-withamazon-elastic-mapreduce/ • IBM DeveloperWorks : http://www.ibm.com/developerworks/jp/java/library/j-mahout/ • Elastic MapReduce • http://www.slideshare.net/AmazonWebServicesJapan/20130925-awsmeisterregenerateemrpublic • lucene置換えについて • http://www.warski.org/blog/2013/10/using-amazons-elastic-map-reduce-to-computerecommendations-with-apache-mahout-0-8 • Mahoutインアクション • http://www.amazon.co.jp/gp/product/4873115841/ref=as_li_ss_tl?ie=UTF8&camp=247&c reative=7399&creativeASIN=4873115841&linkCode=as2&tag=outofboundsne-22

×