Your SlideShare is downloading. ×
ビズリーチにおけるEMR(AWS)活用事例
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

ビズリーチにおけるEMR(AWS)活用事例

1,106
views

Published on

株式会社ビズリーチにおける、簡易レコメンデーションシステムを構築する際に利用したElastic MapReduce(EMR)の活用事例について、簡単にまとめたスライドです。 …

株式会社ビズリーチにおける、簡易レコメンデーションシステムを構築する際に利用したElastic MapReduce(EMR)の活用事例について、簡単にまとめたスライドです。

※2013年9月27日 AWSJapan様主催のセミナーで発表したもの


0 Comments
14 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,106
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
10
Comments
0
Likes
14
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ON EMR活用事例 〜3日で出来たレコメンデーション〜 #singtacks SHIN Takeuchi BIZREACH Inc. - Co-Founder/CTO LUXA Inc. – Co-Founder/CTO Lei Hau’oli Co., Ltd. – Founder/CEO
  • 2. プロフィール • 竹内 真(SHIN Takeuchi) – 所属企業 • 株式会社レイハウオリ 代表取締役CEO • 株式会社ビズリーチ 取締役CTO • 株式会社ルクサ CTO – 立ち上げ&運営サービス • 2009年04月 ビズリーチ • 2009年10月 ドラゴンQ • 2010年08月 ルクサ • 2012年10月 RegionUP • 2013年05月 codebreak; • 今後も新サービスが続々登場の予感。。。 #singtacks supported by2
  • 3. Elastic MapReduce(EMR)とは? • 分散処理が簡単に出来るウェブサービス – とりあえず細かいことは抜きにして • 大量の計算をズバっと短時間でやりたい時に使える – レコメンデーション、データマイニングなど? • クラウドなので、計算する時だけインスタンス立ち上げOK – 常設しておくことを考えると、とってもお得 #singtacks supported by3
  • 4. ビズリーチについて • ビズリーチはハイクラス向け会員制転職サイト www.bizreach.jp – 特徴 ・求職者も有料 ・年収1,000万円超え求人 が数千件 ・ヘッドハンターと採用企業 が混在してスカウト可能 #singtacks supported by4
  • 5. ビズリーチのビジネスモデル • ビジネスモデル – 求職者が求人への応募など、アクションを起こすために有料会 員になる必要がある(4,980円/月) – ヘッドハンターがビズリーチ会員を転職成功させた場合、決定 年収を元に算出した利用料をいただく – 採用企業がビズリーチ会員を採用した場合、及びビズリーチ自 体をご利用いただく場合に利用料をいただく ➡応募やスカウトが増えれば増えるほど、 売上が上がる仕組み #singtacks supported by5
  • 6. レコメンデーション機能を入れよう • 応募増加施策 – Amazon(本体)さんのように「この求人を見た人は、 こんな求人もチェックしています」をやってみよう • 過去の統計からも「1人あたりの応募数が一定数を超えると、転職 決定率が劇的に上がる」傾向がある • 求人閲覧の重みを「1」、応募を「10」、書類通過を「100」とし て、ユーザ行動ベースでレコメンドしてみよう • 何はともあれやってみることが肝心(ベンチャー精神) #singtacks supported by6
  • 7. 実装方式 #singtacks supported by7 日次バッチ処理で実装 0) 予めS3にApache Mahoutのjar(ライブラリ)をアップロードしておく 1) RDBから行動履歴を抽出してCSVファイルを作成(S3へアップロード)
  • 8. 実装方式(続き) #singtacks supported by8 日次バッチ処理で実装 2) バッチ処理でEMRのインスタンスを起動(2台) Master – 1台 Slave – 1台 3) 起動したEMR上で計算処理を実行(Mahoutのmain関数実行)
  • 9. 実装方式(続き) #singtacks supported by9 日次バッチ処理で実装 4) EMR上で生成した結果セット(2次元配列)をMongoDBへインポート
  • 10. 構成概要 #singtacks supported by10 Internet solr1 solr2 Internet mem cached solr- nginx mongosolr1 solr2 1系0系 batch EMR
  • 11. Code(EMRの起動前準備) #singtacks supported by11 AWSCredentials credentials = new BasicAWSCredentials( awsConf.getAccessKey(), awsConf.getSecretKey()); AmazonElasticMapReduceClient emrClient = new AmazonElasticMapReduceClient( credentials, createClientConfiguration());
  • 12. Code(実行パラメータ作成) #singtacks supported by12 List<String> args = new ArrayList<String>(); args.add("-Dmapred.input.dir=s3n://.../.../”); args.add("-Dmapred.output.dir=s3n://.../.../”); args.add("--maxSimilaritiesPerItem"); args.add("10"); args.add("--similarityClassname"); args.add(”ALGORITHM-NAME”); args.add("--booleanData"); args.add("false");
  • 13. Code(起動&実行) #singtacks supported by13 RunJobFlowRequest request = new RunJobFlowRequest() .withName(param.getJobFlowName()) .withSteps( new StepConfig().withName(“") .withActionOnFailure(ActionOnFailure.TERMINATE_JOB_FLOW) .withHadoopJarStep(new StepFactory().newEnableDebuggingStep()), new StepConfig().withName(“") .withActionOnFailure(ActionOnFailure.TERMINATE_JOB_FLOW) .withHadoopJarStep(new HadoopJarStepConfig().withJar(“”) .withMainClass(param.getMainClassName()) .withArgs(param.getArgs()))) .withInstances( new JobFlowInstancesConfig().withPlacement(new PlacementType(“”)) .withInstanceCount(2) .withMasterInstanceType(“LARGE”) .withSlaveInstanceType(“LARGE”) .withKeepJobFlowAliveWhenNoSteps(false) .withHadoopVersion(emrConf.getHadoopVersion())) .withAmiVersion(emrConf.getAmiVersion()).withLogUri(“s3n://.../”); RunJobFlowResult runJobFlow = client.runJobFlow(request);
  • 14. 結果 #singtacks supported by14 出来ました
  • 15. 実際の効果と考察 • 効果 • 実装容易性 – バッチからのEMRインスタンスの起動及び処理実装が簡 単だった(Javaだから?) • レコメンデーションや分散処理がHadoopの知識がほぼ無くても 簡易的に実装出来るのは、導入ハードルが低く、気軽な気持ち でトライできる • 低コスト – large x 2 instances x 1h/daily x 30days = 約$21 (オンデマンドインスタンス / 東京) #singtacks supported by15
  • 16. 了 #singtacks supported by16 ご清聴ありがとうございました