「AWS Black Belt Online Seminar AWS Glue」の自分向けメモ
AWS Glueって何?......レベルの人向け
Glue登場の背景
ビッグデータがキーワード
- データ分析のプロセスは以下
- 収集
- 保存
- 分析
- 活用
- ビッグデータが注目される前、ほとんどCSVやRDS上のデータとして保存
- 今日ではIOTによる大量データや様々なデータ形式が使われている
- 大量データの生で保存、かつ必要なときに必要分取得、活用できる保存場所が求められた
データレイクの登場
- 様々なデータソースから生成される生データをそのまま保存する
- 生データは分析するために前処理(ELT処理)が必要
Glue
- フルマネージドでサーバーレスなELTサービス
- データカタログによって、他サービスとの連携が容易
- 暗号化対応
機能
全体像
- クローラーによってデータソースからメタデータ(テーブル構造やスキーマ)をクロール
- クローラーが更新したメタデータをデータカタログにて管理
- トリガーにてサーバーレスエンジンが起動
- サーバーレスエンジンはジョブを実行し、データカタログとデータソースから結果を出力
データカタログ
- データソースのメタデータを管理するリポジトリ機能
- データソースは以下を指定可能
- DynamoDB
- S3
- Redshift
- RDS
- オンプレDB
Apache Hiveメタストアとは
- 実データとは別に表の定義だけ保存する仕組み
- 実データはHDFS(Hadoop Distributed File System)やS3などに保存する
クローラー
- データカタログにメタデータを作成する機能
- スキーマ情報を自動で判断
- パーティションも自動で認識
メタデータ
- テーブル情報
- テーブルプロパティ
- テーブルスキーマ
スキーマ管理
- バージョン管理可能
- バージョン比較(差分表示)も可能
接続管理
- S3、DyanmmoDB:IAMロールで制御
- Redshift、RDS、オンプレDB、EC2:JDBCでアクセス制御
- 事前に接続設定の追加が必要
- セキュリティグループの設定が必要
サーバーレスエンジン
ジョブ作成
- ETLの処理単位(ジョブ)はApache SparkとPython Shellがある
Worker Type
- DPU(ジョブ実行時に割り当てる処理能力)
- G.1xとG.2xを選択可能
SparkでETL実行した際に起きうる課題
- 型が混在すると処理が止まってしまう
- 事前にデータの中身を調査する必要がある
DynamicFrameとは
- 複数の型の可能性を残して、後で決定できるようにする(Choice型)
- 複数の型を発見した場合に両方の型をもつことが可能
ブックマーク機能
- ジョブの実行状態を保持、追跡が可能
- 定常的にELT処理を行う場合に有効
- 処理済みデータを再度処理しない
- 処理結果を重複出力しない
サーバレスETL処理の使い分け
- Lmabda
- 小規模処理
- 15分以内
- 豊富なトリガー
- Glue Python Shell
- 中規模処理
- 実行時間制限なし
- Pandasなどのライブラリ
- Glue Spark
- 大規模処理
- 実行時間制限なし
- 並列分散処理
オーケストレーション
独自ライブラリの利用
- Spack、Python Shellともに利用可能
トリガー
- ジョブを開始するための定義を設定できる機能
- スケジュール、ジョブイベント、手動実行可能
ワークフロー機能
- クローラー、トリガー、ジョブのDAG(有向非巡回グラフ)を生成する機能
開発環境
開発エンドポイント
- ジョブを実行するために開発したコードを動かす実行環境
Notebookサーバー
- プログラムそのものの記述と実行結果を表示する環境
SageMaker Notebook
- Glueのコンソール上でSageMaker Notebookサーバーを起動する
- SageMaker Notebookから直接SparkSQLの実行が可能
開発エンドポイントとNotebookの関係
- ユーザー → Notebook → 開発エンドポイント → Glue
ネットワーク/セキュリティ/監視
GlueからVPCへのアクセス
- プライベートサブネットのENI経由でアクセスしていく
セキュリティグループ
- Glueが利用しているENIをセキュリティグループに自己参照として設定
IAM
- IAMを用いて、Glueの権限管理
リソースレベルによるポリシーとアクセス許可
- データカタログリソースへの制御
暗号化
- KMSキーを指定して、データベース、テーブルを含むデータベースカタログ全体を暗号化
モニタリング
- クローラー、ジョブステータス、ジョブの実行状況の確認可能
Continuous Logging
- Spark ETLジョブの新緑状況をリアルタイムで確認可能
ユースケース
データカタログを用いたメタデータ管理
- EMR、Athena、Redshift利用時のメタデータ管理
- S3条にあるデータのメタデータをデータカタログに登録
ジョブによるSQLの定期実行
- Redshiftに定期クエリを実行
- タイムアウト設定し中断することが可能
- SQLを長時間実行し続けることが可能
ワークフロー機能を用いたELTパイプライン
- 複数ジョブを組み合わせて利用
サーバーレスアナリティクス
- 開発エンドポイント、SageMaker Notebookを用いて分析
データレイクを用いたログ分析基盤
- fluentd、Kinesis Data Streamsでリアルタイムにログデータを可視化(スピードレイヤー)
- fluentd、Kinesis Firehose、S3で収集したログデータをELT処理、可視化(バッチレイヤー)
GlueとSageMagerを用いた機械学習基盤
- Glueにて学習データを作成し、学習の実行とモデルのデプロイをSageMkerで実行
- ワークフロー機能もしくはStep Functionsで構築
料金
- ELTジョブ
- Apatche Spark
- Python Shell
- 開発エンドポイント
- データカタログ
- ストレージ
- リクエスト
- クローラー
まとめ
- サーバーレスのELTサービス
- メタデータを管理
- 他サービスとセキュアに連携