Download - Spark Streaming on AWS -S3からKinesisへ-

Transcript
Page 1: Spark Streaming on AWS -S3からKinesisへ-

Spark Streaming on AWS

-S3からKinesisへ- !

2015-09-25 JAWS-UG Meguro #2

Page 2: Spark Streaming on AWS -S3からKinesisへ-

自己紹介• 島本 多可子(@chibochibo03)

• 株式会社ビズリーチ CTO室

• ここ数年はScalaを書いてます

• 一応、GitBucketのコミッタです

• https://github.com/takezoe/gitbucket

Page 3: Spark Streaming on AWS -S3からKinesisへ-

検索エンジン作ってます

Page 4: Spark Streaming on AWS -S3からKinesisへ-
Page 5: Spark Streaming on AWS -S3からKinesisへ-

アーキテクチャ概要

• 主要言語はScala

• 検索部分はElasticsearch

• サービスのほとんどはAWS上に構築

Page 6: Spark Streaming on AWS -S3からKinesisへ-

どこにSpark使ってる?

Page 7: Spark Streaming on AWS -S3からKinesisへ-

求人データの投入

Page 8: Spark Streaming on AWS -S3からKinesisへ-

新鮮な求人を

Page 9: Spark Streaming on AWS -S3からKinesisへ-

リアルタイムに検索結果へ

Page 10: Spark Streaming on AWS -S3からKinesisへ-

求人の投入

• 元ネタはクロールで取得

• クロールデータを??へ投入

• Spark上で抽出・加工して検索用ESへ投入

??クロール

Page 11: Spark Streaming on AWS -S3からKinesisへ-

Spark Streaming

• EC2に自前でStandalone Clusterで構築

• 規模としてはミドルデータ

• Apache Stormのような本当のストリーム基盤までは(今のところ)求めてない

Page 12: Spark Streaming on AWS -S3からKinesisへ-

??って何

Page 13: Spark Streaming on AWS -S3からKinesisへ-

求人の投入

• 元ネタはクロールで取得

• クロールデータを??へ投入

• Spark上で抽出・加工して検索用ESへ投入

??クロール

この部分 (Sparkのインプット)

Page 14: Spark Streaming on AWS -S3からKinesisへ-

選定に右往左往した

Page 15: Spark Streaming on AWS -S3からKinesisへ-

その1:

S3

Page 16: Spark Streaming on AWS -S3からKinesisへ-

なぜS3を選定した?

• ロストが許されない求人が混在していた

• 耐障害性を考えるとSparkのストレージはファイルがいいのではという過信

• 1コア(--total-executor-cores)でもプロセス起動可能

Page 17: Spark Streaming on AWS -S3からKinesisへ-

しかし

Page 18: Spark Streaming on AWS -S3からKinesisへ-

毎日ログをチェック

Page 19: Spark Streaming on AWS -S3からKinesisへ-

理由• (当然ながら)S3はバッチ向け

• ある程度サイズのあるファイルが少数の方が向いている

• サイズの小さいファイルが多数の場合はスキャンにかかる時間がボトルネックになる

• ウインドウ幅の時間にスキャン時間も含まれる

Page 20: Spark Streaming on AWS -S3からKinesisへ-

タスクが遅れ始めた

Page 21: Spark Streaming on AWS -S3からKinesisへ-

つらい

Page 22: Spark Streaming on AWS -S3からKinesisへ-

その2:

Kinesis

Page 23: Spark Streaming on AWS -S3からKinesisへ-

なぜKinesisを選定した?

• ロストが許されない求人は別で担保

• Spark1.4でKafkaとKinesisのサポートが強化されたのも魅力だった

• シャード増減でスケールにも対応できそう

Page 24: Spark Streaming on AWS -S3からKinesisへ-

そして

Page 25: Spark Streaming on AWS -S3からKinesisへ-

幸福が訪れる

Page 26: Spark Streaming on AWS -S3からKinesisへ-

ちなみに

Page 27: Spark Streaming on AWS -S3からKinesisへ-

監視

• mackerelに集約

• バッチ間隔ごとの進捗状況はStreamingListenerを継承した独自リスナを使って通知

Page 28: Spark Streaming on AWS -S3からKinesisへ-

ありがとうございました