ON
EMR活用事例
〜3日で出来たレコメンデーション〜
#singtacks
SHIN Takeuchi
BIZREACH Inc. - Co-Founder/CTO
LUXA Inc. – Co-Founder/CTO
Lei Hau’ol...
プロフィール
• 竹内 真(SHIN Takeuchi)
– 所属企業
• 株式会社レイハウオリ 代表取締役CEO
• 株式会社ビズリーチ 取締役CTO
• 株式会社ルクサ CTO
– 立ち上げ&運営サービス
• 2009年04月 ビズリーチ
...
Elastic MapReduce(EMR)とは?
• 分散処理が簡単に出来るウェブサービス
– とりあえず細かいことは抜きにして
• 大量の計算をズバっと短時間でやりたい時に使える
– レコメンデーション、データマイニングなど?
• クラウド...
ビズリーチについて
• ビズリーチはハイクラス向け会員制転職サイト
www.bizreach.jp
– 特徴
・求職者も有料
・年収1,000万円超え求人
が数千件
・ヘッドハンターと採用企業
が混在してスカウト可能
#singtacks su...
ビズリーチのビジネスモデル
• ビジネスモデル
– 求職者が求人への応募など、アクションを起こすために有料会
員になる必要がある(4,980円/月)
– ヘッドハンターがビズリーチ会員を転職成功させた場合、決定
年収を元に算出した利用料をいただ...
レコメンデーション機能を入れよう
• 応募増加施策
– Amazon(本体)さんのように「この求人を見た人は、
こんな求人もチェックしています」をやってみよう
• 過去の統計からも「1人あたりの応募数が一定数を超えると、転職
決定率が劇的に上が...
実装方式
#singtacks supported by7
日次バッチ処理で実装
0) 予めS3にApache Mahoutのjar(ライブラリ)をアップロードしておく
1) RDBから行動履歴を抽出してCSVファイルを作成(S3へアップロード)
実装方式(続き)
#singtacks supported by8
日次バッチ処理で実装
2) バッチ処理でEMRのインスタンスを起動(2台)
Master – 1台
Slave – 1台
3) 起動したEMR上で計算処理を実行(Mahoutの...
実装方式(続き)
#singtacks supported by9
日次バッチ処理で実装
4) EMR上で生成した結果セット(2次元配列)をMongoDBへインポート
構成概要
#singtacks supported by10
Internet
solr1
solr2
Internet
mem
cached
solr-
nginx
mongosolr1
solr2
1系0系
batch
EMR
Code(EMRの起動前準備)
#singtacks supported by11
AWSCredentials credentials =
new BasicAWSCredentials(
awsConf.getAccessKey(),
aw...
Code(実行パラメータ作成)
#singtacks supported by12
List<String> args = new ArrayList<String>();
args.add("-Dmapred.input.dir=s3n://...
Code(起動&実行)
#singtacks supported by13
RunJobFlowRequest request = new RunJobFlowRequest()
.withName(param.getJobFlowName()...
結果
#singtacks supported by14
出来ました
実際の効果と考察
• 効果
• 実装容易性
– バッチからのEMRインスタンスの起動及び処理実装が簡
単だった(Javaだから?)
• レコメンデーションや分散処理がHadoopの知識がほぼ無くても
簡易的に実装出来るのは、導入ハードルが低く、...
了
#singtacks supported by16
ご清聴ありがとうございました
Upcoming SlideShare
Loading in...5
×

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

1,293

Published on

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

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

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

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

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×