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

15
Stream処理(Spark Streaming+Kinesis) Offline処理(Hive)の統合 西尾 亮一 (スマートニュース株式会社) JAWS-UG Meguro #2

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

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

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

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

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

自己紹介

• 西尾 亮一

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

• ログ解析・機械学習

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

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

SmartNewsのご紹介

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

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

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

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

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

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

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

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

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

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

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

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

記事分析基盤

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

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

cloudsearch

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

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

Webの海

crawler

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

ログ解析基盤• ストレージ層とアプリケーション層を分離 • データと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

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

ログ解析基盤

ログのストリーム

記事在庫

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

Spark SQLor

read model

ログAPI server

API server

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

Kinesis

S3

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

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

試すこともできる

EMR

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

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

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

• InputとしてKinesisに対応

• window処理も簡潔に記述

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

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

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

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

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

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

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

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

Summary

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

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

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

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

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

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

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

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

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

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