Strem処理(Spark Streaming + Kinesis)とOffline処理(Hive)の統合

Post on 18-Jan-2017

1.390 views 2 download

Transcript of Strem処理(Spark Streaming + Kinesis)とOffline処理(Hive)の統合

Stream処理(Spark Streaming+Kinesis)とOffline処理(Hive)の統合

西尾 亮一 (スマートニュース株式会社) JAWS-UG Meguro #2

自己紹介

• 西尾 亮一

• スマートニュース株式会社

• ログ解析・機械学習

• 記事ランキングアルゴリズム

SmartNewsのご紹介

「記事の良質さ」とは何か、どのように計算できるか、 ということを議論しながら開発をしています

今日の話• 記事ランキングをSpark Streaming上で計算する話

• 記事分析基盤とログ解析基盤の整備が進んだ結果、これらが持つすべての情報を集約して一箇所でランキングを作ることができるようになりました。これをSpark Streamingで行っています。

• ランキングアルゴリズムの中身は秘密なのでアーキテクチャーについて話します。

記事ランキングの材料• リアルタイムなデータ

• アプリのログ (どの記事をいつ読んだか、...)

• 記事情報 (カテゴリ分類、本文、固有表現、世の中の注目度 ...)

• オフラインバッチによるログ分析結果

• 機械学習のモデル、特徴ベクトル、分類結果、...

記事分析基盤

本文抽出 カテゴリ分類 固有表現抽出 世の中の注目度

etc リアルタイムに更新される記事在庫

cloudsearch

cloudsearchを使うことでより柔軟な記事検索ができるようになった

西岡「SmartNews の Webmining を支えるプラットフォーム」http://www.slideshare.net/smartnews/smart-news-webmining

Webの海

crawler

ログ解析基盤• ストレージ層とアプリケーション層を分離 • データとmetastoreは共通 • 用途に応じてPresto/Hive/Sparkを使い分け • 各クラスタはEMRで気軽に開始/終了

オフラインの機械学習もこの上でやる • HiveのUDFを書く • SparkのMLlibを使う

坂本「スマートニュースの世界進出を支えるログ解析基盤」 https://speakerdeck.com/takus/sumatoniyusufalseshi-jie-jin-chu-wozhi-erurogujie-xi-ji-pan-number-jawsdays-number-tech

Hive Metastore in RDS (スキーマ情報) data in S3

Presto Hive Spark

ログ解析基盤

ログのストリーム

記事在庫

バッチ処理による機械学習

Spark SQLor

read model

ログAPI server

API server

ランキングはDynamoDBに保存(1分くらいごとに更新)

Kinesis

S3

記事ランキングのアーキテクチャ

同時に複数のSparkクラスタを立てて、 異なるランキングアルゴリズムを

試すこともできる

EMR

Spark Streaming• ストリーム処理フレームワーク

• DStream (Discrete Stream)というRDDのフロー

• InputとしてKinesisに対応

• window処理も簡潔に記述

Sparkの公式ページから画像を拝借しました https://spark.apache.org/docs/latest/streaming-programming-guide.html#performance-tuning

ストリーム処理の例: 記事ごとのPVを集計する

オフライン処理の例: ユーザーのクラスタリング1. Hiveのテーブルからユーザー特徴ベクトル取得 2. Spark MLlibのKMeansでクラスタリング 3. Hiveのテーブルとして結果を保存

ストリームとオフライン処理結果をjoinする例 : (クラスタ,記事)のペアごとのPVを集計

Summary

• Kinesis+Spark Streamingに、記事情報とバッチ分析結果を組み込んで、SmartNewsの記事ランキングを作っています

• この仕組みの上でより洗練されたランキングアルゴリズムの開発とABテストをどんどん進めています

おまけ: 会社での他のストリーム処理の事例の紹介

Kinesis + PipelineDB + Chartio で広告の速報値ダッシュボードを作るたむたむ 「PipelineDBをProductionに導入してみました。 How SmartNews Utilizes PipelineDB」 http://developer.smartnews.com/blog/2015/09/09/20150907pipelinedb/

おまけ2: エンジニア募集

• 良質な記事ランキングを一緒に作りましょう!

• スマホアプリ、Webアプリ、ML、NLP、サーバサイド、グロース、などいろいろ募集しています

• おいしくて無料の社食あります