【AWS】AWSを用いたビッグデータ分析基盤まとめ【re:Invent2018】

# はじめに
ラスベガスでAWSの最大規模のイベント「re:Invent2018」が絶賛行われているようですね。
ビッグデータ分析基盤のセッションでAWSリソースを用いた網羅的な解説してくれたものがあったらしく内容を簡単にまとめてみました。

Big Data Analytics Architectural Patterns and Best Practices

名前は知ってるけどユースケースよくわからんという自分にとっては嬉しい情報だったので、似たような人の手助けになればと思います。

# ビッグデータ基盤の網羅的な技術候補
### ビッグデータのアーキテクチャを考える上で
* 正しいツールを使えているか  
データの構成,レイテンシ,スループット,データへのアクセス形式によって最適なものを選ぶ必要がある
* マネージドやサーバーレスのサービスを効率よく使えているか
* コストを最適化できいるか
* 機械学習基盤が必要かどうか

## ビッグデータの処理の流れ
* 収集,貯蓄,加工/分析,利用というシンプルな流れがある
* このビッグデータ処理においてレイテンシ,スループット,コストという点も考慮がする必要がある

### 収集,貯蓄
* データに温度がある → Hot/Warm/Cold

<img width="751" alt="スクリーンショット 2018-11-27 16.39.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/148317/c7348b68-1dd6-ff0b-d696-ae51dabd4eac.png">

* それぞれにはデータサイズ,純度,コストといった特徴がある
* データは分類できる → 分類からデータストアが決まる
 * データ構成(data structure)/データベースのレコード  
 → トランジションデータ  
 → In-memory,NoSQL,SQL
 * メディアファイル/ログ  
 → ファイル/オブジェクトデータ  
 → File store,object store
 * データストリーム  
 → イベントデータ  
 → kafka,kinesis stream,kinesis firehose

#### Stream storage
* Apach kafka  
高いスループットをストリーミングプラットホーム  
https://kafka.apache.org/
* Amazon Kinesis Data Streams  
フルマネージドなストリームストレージ  
https://aws.amazon.com/jp/kinesis/data-streams/ 
<-- AWSが正式にサポート！！  
* Amazon Kinesis Data Firehose  
フルマネージドなデータデリバリーサービス  
https://aws.amazon.com/jp/kinesis/data-firehose/
* ストリーム/メッセージ ストレージの一覧表
<img width="707" alt="スクリーンショット 2018-11-27 16.41.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/148317/6e8f4391-2bbb-e55d-08cb-03b85e8b3935.png">

#### File/object storage
* Amazon Simple Storage Service(S3)  
大量のデータを格納できる  
ビッグデータフレームワークにサポートされてる  
ストレージ機能と処理機能が分離されている
99%のdurability
同一リージョンではレプリケーションにコストがかからない  
https://aws.amazon.com/jp/s3/

#### Cache & database
* Amazon ElastiCache  
フルマネージドなRedisサービス  
https://aws.amazon.com/jp/elasticache/
* Amazon DynamoDB Accelerator  
DynamoDBのIn-MemoryCache  
https://aws.amazon.com/jp/dynamodb/dax/
* Amazon Neptune  
フルマネージドなグラフデータベース  
https://aws.amazon.com/jp/blogs/news/amazon-neptune-a-fully-managed-graph-database-service/
* Amazon DynamoDB  
フルマネージドなキーバリュー/ドキュメント データベース  
https://aws.amazon.com/jp/dynamodb/
* Amazon RDS  
フルマネージドなリレーショナルデータベース  
https://aws.amazon.com/jp/rds/

#### どのストレージを使うべきか？
以下の自問自答してみると良い
* データの構成はなんなのか？
* どのようにデータにアクセスするか？
* データの温度はどんなもんか？
* ソリューションまでのコストをどんなものか？

### 分析
#### Interactive & batch Analytics
* Amazon Elasticsearch Service  
フルマネージドなElasticsearch  
https://aws.amazon.com/jp/elasticsearch-service/
* Amazon Redshift & Amazon Redshift Spectrum
フルマネージドなデータウェアハウス  
spectrumはS3に対してクエリを投げることもできる  
https://aws.amazon.com/jp/redshift/
* Amazon Athena  
フルマネージドなインタラクティブクエリサービス  
https://aws.amazon.com/jp/athena/
* Amazon EMR  
https://aws.amazon.com/jp/emr/

#### Streaming/message Analytics
* Amazon Kinesis Data Analytics  
スリーミングデータに対してSQLを実行できるフルマネージドサービス  
https://aws.amazon.com/jp/kinesis/data-analytics/
* Amazon KCL
Amzon Kinesis Client Library
* AWS Lambda  
サーバーレスでの実行  
S3のようなサービスがイベントをlambda向けにpublishできる  
Kinesisからイベントをプールできる  


#### どの分析を使うか？
* Batch  
分単位~時間単位の定期処理(Ex. Daily/Weekly/Monthly)  
→ Amazon EMR
* Interactive  
秒単位での処理  
→ Amazon Redshift/Amazon Athena/Amazon EMR
* Stream  
ミリ秒単位~秒単位での即時処理  
→ Amazon EMR(Spark Streaming)/Amazon Kinesis Data Analitics/Amazon KCL/AWS Lambda

### 加工
* ETL/ELT:Raw dataを使いやすくするための準備
* 例えば、標準化/分割/圧縮/ストレージの最適化
* AWS Glueが威力を発揮するよ

以下、ETL/ELTにおける技術一覧
<img width="952" alt="スクリーンショット 2018-11-27 16.41.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/148317/52d3c9c8-b887-7e4d-51bd-ec991ab90ee9.png">


### 利用
#### データサイエンティスト/データエンジニア
分析ツール

* AI Apps
* Jupyter
* Anaconda
* Rstudio

#### ビジネスユーザー
可視化できるBIツール群

* Kibana
* Amazon QuickSight
* Tableau
* looker
* Qlik

#### ビッグデータ基盤における技術一覧
<img width="986" alt="スクリーンショット 2018-11-27 16.42.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/148317/4ee68de8-c76e-2ce3-f209-9819fc5bddcf.png">


### ストリーミング分析
<img width="817" alt="スクリーンショット 2018-11-27 16.44.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/148317/f437c7d8-5fe3-e448-2643-9661446ef6fe.png">


### インタラクティブ&バッチ分析
<img width="993" alt="スクリーンショット 2018-11-27 16.43.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/148317/6267eb5f-842f-9362-5640-093492417d13.png">

# おわりに
聞いた内容をざっくりまとめてみました。

個人的にはストリームに対するデータストアや処理にどんなAWSリソースが使えるかを知れたのが嬉しかったです。普段、仕事で関わらないとなかなか知識が入ってこないので。