awsで作るビッグデータ解析今とこれから
DESCRIPTION
AWSで作るビッグデータの話です! AWSさんの拡散事例に載りたいんでみんな拡散してください!TRANSCRIPT
AWSで作るビッグデータ解析 今とこれから
Shohei Kobayashi Twitter http://twitter.com/srockstyle
Facebook https://www.facebook.com/srockstyle Github https://github.com/srockstyle
月刊ライトニングトーク年末特別号@いいオフィス
Shohei Kobayashi• Cloud Infra Server Engineer
• AWS、Azure
• Ruby,PHP,Perl,Python,JavaScript,Golang <-New!
• 2005~2011: Infra Server Engineer
• 2011~2013:Front&Serverside Engineer
• 2014~:Cloud Infra Server Engineer
8月のLT大会では弊社のつるが大変お世話になりまんた
今回はこのプレゼンのバックエンド、インフラサイドのお話です
今回は集計システムのバックエンド、インフラサイドのお話です
今年6月のCreators Meetupでこんな発表したよ
会社がやってるアプリの新・集計システム• データ増大によりそれまで使ってた集計システムがパンクしたため2014年4月に同僚ふたりと開発開始。
• 二人にMapperとReducer、SQL、管理画面などのフロント全般を任せ、僕がクラウドを使った集計インフラの設計とAWSのプロダクトをコントロールするプログラムを担当。
• AWSをキックする仕組み全般を僕が作り、二人には集計データのまとめと集計に必要なリソースを書くYamlファイルの作成だけお願いした。
• Yamlのフォーマットはこちらで決めた
2014年11月段階で動いている新・集計
細かい仕組み等
0.アプリからS3へ
0:アプリからS3にログをあげることでやってること
だいたいこの3パターン
• 経由するAPIの方でログを生成し、S3にアップ
• DynamoDBに収めたログをS3にエクスポート。
• API内でログを生成したものをFluentdを経由してS3にアップ。
1.mapperとreducerをS3へ
1:MapperとReducerをS3へ
• クラウドをキックするコントロールアプリケーション内にmapperとreducerはフォルダを切って、集計したい事案ごとに格納。
• 集計が走る段階でCronを回し、その瞬間にS3にmapperとreducerも一緒にアップロードされる。
• 普段はコントロールアプリケーションと一緒にGit管理。(スクリプトは常に変更が走る可能性があるため、毎回S3にあるやつは消して今あるものをアップロードしてる)
ログ集計したいときにやっちゃいます
3.EMRクラスタ作成と起動と実行
3:EMRクラスタの作成と起動と実行その1
• 必要なパラメータはYamlファイルに書いてもらい、それをプログラム内でEMRクラスタの作成・起動に必要なJob-Flowスクリプトに変換してる。(集計インフラの仕組みを理解してなくても、mapperとReducerを書く集計担当のエンジニアが集計作業ができるように)
• 現在は一つの集計のたびにいちいちクラスタは起動せず、一回クラスタ立ち上げたら複数のMapReduceを連続で流してます。(EC2インスタンス大量起動による経費削減のため)
Yamlファイルで設定したものをJob-Flowに変換してます
3:EMRクラスタの作成と起動と実行その2
• Javaを書きたくなかった(Rubyでやりたかった)
• EMRを起動するためのスクリプト”Job-Flow Script”が当時ドキュメントがなくて、Yamlを変換するところ作るの死ぬほど苦労した(存在する日本語ドキュメント全部間違ってて辛かった)
• AWS-SDKフル活用
HadoopはHadoop-streamingで使ってます
3:EMRクラスタの作成と起動と実行その3
• 最初inputフォルダしかログファイルおかないとだめだとおもったらS3のバケットのフォルダ直接指定でいけた……(inputフォルダにログコピーに6時間かかってたのが0分になった)
• ログを「-input=“<ログフォルダ>”」で指定する
• 一度に指定できるログフォルダの数は~1024程度ぽい。(前さ過去3年の日付分のフォルダを指定したら怒られた)
ログフォルダは移動しなくても全部フォルダ指定
4.Redshiftへのインポート
4:Redshiftへのインポート
• MapReduceしたログをJsonでS3上に吐き出したものに対してimportコマンドを使うことでRedshiftのテーブルにインポートできる
• データウェアハウスではなくデータマート的な使い方だけど、本当はデータをただ貯めとくだけでもOK
とにかく最後はRedshift
今後やりたいこと会社でやるかは未定だけどデータ集計関連で 個人的にこうなるのかなーっていう感じのアレ
• ログが上がり終わるなどのイベントでLambda関数を発動
• Lambda関数内でnode.jsのAWS-SDKを使ってEMRのjob-flowを送りクラスタの作成と起動
• EMRが処理終わった段階で別なLambda関数を使ってRedshiftへのインポート
AWS Lambdaでやりたいイベントドリブンな集計操作 コントロールアプリの撤廃
Google Data Flowでやりたい 次世代データ集計
• バッチとリアルタイム処理で同じAPIをつかって作業
• パイプラインらへんはGoogleに任せて、解析のロジックだけに開発者は集中できる
• 集計サーバとかいらなくなるね!楽!
(AWS Lambdaで実装すればいいかも……/ぼそっ)
• RedshiftほどAWSとの親和性はないけど、とにかく安い。クエリも早い。(1.2億行なら2円)
• 1TBを1秒でフルスキャンするために5000台のディスクをインデックスなしで並列稼働させてるから早いらしい(ナニソレ
• S3にログを集める以降の処理はAWSからGoogle Dataflowに飛ばしてからのBigQuery格納でいい気がしてる。
Google DataFlow だとBigQuery?
(現状ではRedshiftのパフォーマンスは満足なので Redshiftさん値下がりしないかな……/ぼそっ)
今はフルAWSで作ってます
AWSのRedshift紹介ページに掲載されたいその1
AWSのEMR紹介ページに掲載されたいその2
AWSさんの導入事例に掲載されたいんで、 SlideShareにあげたこの資料のURL拡散 なにそつよろしくお願いいたします!
掲載されたら拡散してくれた人の中から 抽選で寿司か焼肉おごります僕が
うちの会社、絶賛エンジニア募集してるよぼそっ
ご静聴あざした!