データ管理・活用でAWS/Azule/その他で使えそうなサービス探し

AWS/Azure問わず、データ管理・活用形のサービスを調べることになったので、自分用メモ

AWSから
https://aws.amazon.com/jp/big-data/datalakes-and-analytics/
上記のページを参考に構成してみる

#データ管理・活用サービス構成例
|カテゴリ  |ユースケース  |AWS のサービス  |
|---|---|---|
|分析  |インタラクティブ分析  |Amazon Athena  |
| |ビッグデータ処理   |Amazon EMR  |
| |データウェアハウジング   |Amazon Redshift  |
| |リアルタイム分析   |Amazon Kinesis  |
| |運用上の分析   |Amazon Elasticsearch Service  |
| |ダッシュボードと可視化   |Amazon QuickSight  |
|予測分析と機械学習|フレームワークとインターフェイス|AWS 深層学習 AMI|
||プラットフォームサービス|Amazon SageMaker|
|データの移動|リアルタイムのデータ移動|Amazon Managed Streaming for Apache Kafka (MSK)|
|||Amazon Kinesis Data Streams|
|||Amazon Kinesis Data Firehose|
|||Amazon Kinesis Data Analytics|
|||Amazon Kinesis Video Streams |
|||AWS Glue |
|データ統合・データ処理|データ統合・品質管理|AWS Glue|
|データ統合・データ処理|データ統合・品質管理|AWS Lambda|
|データレイク|オブジェクトストレージ|Amazon S3 /AWS Lake Formation|
||バックアップとアーカイブ|Amazon S3 Glacier/AWS Backup|
||データカタログ|AWS Glue AWS Lake Formation|
||サードパーティーのデータ| AWS Data Exchange|

# S3に対してクエリ等でデータを呼び出せるサービス
## Amazon Athena
概要：S3に保存・蓄積したログに対してSQLクエリを投げて分析を行えるサービスです。
特徴：サーバーレスでS3上のデータに対して直接クエリを投げられます。
　　　というかほぼほぼPrestoという理解でよさそう。
　　　ただ、説明を見ていると結構Hiveに近いもののイメージ
　　　Amazon Document DB/Amazon Dynamo DB/Amazon HBase/Amazon Athena Elasticsearchに対してもクエリを投げられる機能あり
　　　なお、限定的だがAmazon Athena Lambda JDBCを利用すると一般のDBにクエリを投げる機能もある模様(MySQL、PostgresSQL、Amazon Redshift)
　　　https://docs.aws.amazon.com/ja_jp/athena/latest/ug/athena-prebuilt-data-connectors.html
　　　S3上のファイルに対してクエリを投げられるエンジンということで、一般的なDBへのアクセスはできないことに注意
　　　非構造化データに対してが扱えるのが強みだと思われる(一般的なログ、CSVなど、画像データなんかはSparkで加工したものだったら入れられそう)
　　　https://aws.amazon.com/jp/athena/faqs/
　　　データベース・テーブル作成はHiveのものをそのまま使っているようなので、シリアライザ・デシリアライザも共通で使えるっぽい
　　　機械学習機能が搭載された(https://aws.amazon.com/jp/athena/features/?nc=sn&loc=2)
　　　制約として、原則S3上のファイルに対してのみクエリを飛ばせることから、データはS3に投入する必要がある
　　　また、データベースとS3間でのクエリの実行は不可
　　　データ加工ツールとしては非推奨で、データ分析ツールとして使うことを推奨しているもよう
EMRやRedShiftとの違い：EMRやRedShiftはインスタンス管理の手間がかかるが、こちらはクエリエンジンなので手間かからず
使い道考察：
　　　S3に投入できる非構造化データ・半構造化データ・構造化データを取り扱えるということで、ログ解析などには使用できそう。
　　　ただし、一般的なDBとの接続が困難であるため、データ分析に使用するには機能不足(一般的なDB上のデータが扱えないので)
　　　また、クエリによる加工しかできないので、加工ツールとしての機能もいまいちかなという印象
　　　DB上のデータと非構造データを取り扱えるほかのツールを探す必要がありそう(そういう意味でtrifactaとかDataRefineryは高性能だと思う)
使用できるファイル形式：
　　　S3上のファイルに対してクエリを実行するということで、以下のファイル形式をサポート
　　　CSV、JSON、ORC、Avro、Parquet 
料金体系：
　　　Amazon Athena では、実行したクエリに対してのみ料金が発生します。
　　　各クエリでスキャンされるデータ量に基づいて課金されます。
　　　データの圧縮、分割、列形式への変換を行うと、大幅なコスト削減とパフォーマンス向上を実現できます。
　　　このようなオペレーションにより、Athena でクエリを実行するためにスキャンする必要のあるデータ量が減少するためです。
　　　　→パーティションの設計とかちゃんとしておこうねっていうことだと思うが、大容量データを使用した場合の課金量が増大する懸念がある
　　
## Amazon EMR
概要：Hadoopクラスタです。
　　　使用できるHadoopのサービスは以下
　　　https://aws.amazon.com/jp/emr/features/?nc=sn&loc=5
使い道考察：
　　　Hadoopクラスタの一般的なサービス+ sqoop,spark,各種ノートブック,Tensorflowなどが入っているのでビックデータ向け解析基盤として利用できそう
　　　ただ、これも一般的なDB上のデータを統合する際に工夫が必要となりそう
　　　データ格納先としてはS3またはHDFSを使用しているもよう
　　　Amazon Athenaとの差別化はS3上のデータに対しての分析処理をどの程度複雑にやりたいか+扱うデータ量になるか
　　　クエリを実行するデータ量が多いほど、EMRを使用したほうがよさそう(ビッグデータ向け)
　　　AthenaとEMRは費用曲線作ってもよさそう
料金体系：
　　　Amazon EMR の料金は、Amazon EC2 の料金 (基本的なサーバーの料金) と (Amazon EBS ボリュームをアタッチしていれば) Amazon EBS の料金に別途追加されます。こちらも 1 秒ごとに課金、最小課金時間は 1 分となっています。Amazon EC2 にはさまざまな料金オプションが用意されています。例えば、オンデマンド (下記参照)、1 年間および 3 年間のリザーブドインスタンス、スポットインスタンスなどです。スポットインスタンスは予備の Amazon EC2 キャパシティーで、オンデマンド料金と比べて最大 90% の割引価格でご利用いただけます。オンデマンドと比較したスポットインスタンスの費用節約については、スポットインスタンスアドバイザーのページで「EMR でサポートされるインスタンスタイプ」でフィルタリングしてご確認ください。

## Amazon RedShift
概要：中身postgresqlっぽい列指向DB
特徴：S3をデータ格納元としてデータ管理するための列指向データベース
使い道考察：AWSサービス上にDWHを作成する場合は、RedShiftを使用するのが定番のようす
　　　　　　S3をデータ格納先とするクラスタを作成、DBとしてRedShiftを使用しているイメージ
　　　　　　ただ、使い方を見ているとS3上にソースデータを配置する際はS3側で作業していて、S3上のデータをロードするところからRedShiftの機能のようにみえるので、S3にデータを入れた後、それが見られるならAthenaでもよい？


##サービスごとの使い分けについて：
https://aws.amazon.com/jp/athena/faqs/

Q: Amazon Athena、Amazon EMR、Amazon Redshift の違いは何ですか?
Amazon Athena などのクエリサービス、Amazon Redshift などのデータウェアハウス、Amazon EMR などの洗練されたデータ処理フレームワークはすべて、異なるニーズおよびユースケースに対応します。その作業に適したツールを選択する必要があります。Amazon Redshift では、特に複数の結合やサブクエリを伴うきわめて複雑な SQL を使用する場合に、エンタープライズレポートやビジネスインテリジェンスワークロードで高速なクエリパフォーマンスが利用できます。Amazon EMR を使用すると、オンプレミスのデプロイと比較して、Hadoop、Spark、Presto などの高度に分散された処理フレームワークをシンプルでコスト効率の高い方法で実行できます。Amazon EMR は柔軟性を備えています。カスタムアプリケーションやコードを実行し、詳細なコンピューティング、メモリ、ストレージ、およびアプリケーションパラメータを定義して、分析要件を最適化できます。Amazon Athena を使用すると、サーバーのセットアップや管理をしなくても、S3 内のデータに対してアドホッククエリを簡単に実行できます。
 
Q: Amazon Redshift のようなフル機能のエンタープライズデータウェアハウスと、Amazon Athena のようなクエリサービスはどのように使い分ければよいですか?
Amazon Redshift のようなデータウェアハウスは、在庫システム、金融システム、および小売販売システムなどのさまざまなソースからデータを一般的な形式で取得し、長期間保存して、履歴データから洗練されたビジネスレポートを構築する必要がある場合に適しています。こうした場合には、Amazon Redshift のようなデータウェアハウスは最適です。
 
データウェアハウスは、企業全体からデータを収集し、「信頼できる唯一の情報源」としてレポート生成および分析に使用できます。データウェアハウスでは、多くのソースからデータが取得され、形式化および整理され、保存されます。また、ビジネスレポートの生成を行う複雑で高速なクエリに対応しています。Amazon Redshift のクエリエンジンは、非常に大規模なデータベーステーブルを多数結合する複雑なクエリを実行する必要がある場合のユースケースで、パフォーマンスを特に発揮するように最適化されています。TPC-DS は、このユースケースをレプリケートするために設計された標準のベンチマークで、Redshift では、これらのクエリを非構造化データ用に最適化されているクエリサービスと比べて最大 20 倍高速で実行します。非常に大規模な多数のテーブル間で多数の結合がある、高度に構造化されたデータに対してクエリを実行する必要がある場合は、Amazon Redshift をお勧めします。
 
これに対して、Amazon Athena のようなクエリサービスを使用すると、データの形式化やインフラストラクチャの管理について心配することなく、Amazon S3 のデータに対して直接インタラクティブにクエリを実行できます。例えば、Athena は、一部のウェブログですばやくクエリを実行し、サイトのパフォーマンス問題のトラブルシューティングのみが必要とされる場合に適しています。クエリサービスを使用すると、迅速に開始できます。データのテーブルを定義し、標準 SQL を使用してクエリを開始するのみです。
 
また、両方のサービスを併用することもできます。Amazon Redshift にロードする前に、Amazon S3 でデータをステージングすると、そのデータも Amazon Athena で登録され、クエリを実行できます。
 
Q: Amazon EMR とAmazon Athena はどのように使い分ければよいですか?
Amazon EMR の機能は、単なる SQL クエリの実行をはるかに超えるものです。EMR を使用すれば、機械学習、グラフ分析、データ変換、ストリーミングデータ、および実質的にコード可能なすべてのアプリケーション向けに、スケールアウトする幅広いデータ処理タスクを実行できます。Spark、Hadoop、Presto、Hbase などの最新のビッグデータ処理フレームワークを使って、きわめて大規模なデータセットを処理および分析するためにカスタムコードを使用する場合は、Amazon EMR を使用できます。Amazon EMR では、クラスターの構成や、インストールされているソフトウェアを完全に制御できます。
 
Amazon S3 のデータに対して、インフラストラクチャやクラスターを管理せずにインタラクティブなアドホック SQL クエリを実行する場合は、Amazon Athena を使用できます。

#リアルタイムデータ処理
　　　リアルタイムデータ処理については後回し
## Amazon Kinesis
特徴：リアルタイムデータストリーミング　
　　　kafkaのようなもの


## Amazon Elasticsearch Service
特徴：全文検索エンジン
　　　OSのログやアプリケーションのログを収集して、一画面上でログの閲覧
使い道：
　　　いちいちOSに入ってログを探さなくても、Elasticsearchで収集して検索することで高い効率でログ解析できる。
　　　サーバー台数が多い、openshiftなどでリソースが変化(サーバー台数が動的に変わる)して監視が難しい環境などには効果が高いと思われる
　　　比較されるものとしてelastic + kibana とsplunkがある
　　　https://blog.yoslab.com/entry/2014/11/22/002107
　　　非構造データの取り扱いは一番強そうに感じる
　　　代表的なお試し例はTwitter→Spark→Elasticsearch→kibanaの可視化例
　　　
　　　ほかにはS3 → lambda → elasticsearchなどの流れ

　　　ただ、データ分析するにあたって、クエリエンジンではなく独特な使用感なのがネックになりそう
　　　trifactaとかに入れて加工できたら便利かな
　　　なお、データ格納先としてelasticsearch→hiveでデータ検索(クエリを使える)も実装できるもよう
　　　ただし、並列化の数はelasticsearchのシャード数で固定されるようなので、速度的な問題がありそう

## Amazon Lambda
特徴：プログラム実行環境の提供
　　　以下の言語の開発環境を提供する
　　　Java
　　　Go
　　　PowerShell
　　　Node.js
　　　C#
　　　Python
　　　Ruby
　　　さらに、拡張機能(Lambdaレイヤー)を利用することで、以下の言語にも対応
　　　C++
　　　Rust
　　　Erlang
　　　Elixir
　　　COBOL
　　　PHP
使い道：
　　　上記の言語に対応していることであれば大体何でもできそう
　　　ログ収集・データ加工・分析・機械学習など
　　　使用者のスキルレベル依存になると思うので、プログラムが使用できる人向けになりそう
　　　IT企業としては導入しやすいと思うが、他企業だとIT部門以外には導入が厳しいように感じる。
　　　Excelくらい簡単にとか、GUIでやりたいとか言われそう
　　　データ統合に使う場合、Glueと比較してどちらがやりやすいか
　　　ただ、できること自体はLambdaのほうが万能(プログラム作るので・・・)