AWS Glueまとめ

GlueはETL処理のマネージド型サービスです。

ETL処理とは. Extract(抽出) Transform(変換) Load(格納) の略で、データを抽出し、抽出したデータを変換・加工した上で次の処理へ渡す処理のことです。

スポンサーリンク

Glueは難しい

Glueを触る前、名前と機能からして簡単に出来る・わかりやすいサービス的な感覚だったのですが、出来る事も多く、理解すべき概念も多く、分散処理も初だと理解し難く、AWSのサービスの利用しやすさも低めに感じ、情報も少なく、正直ギャップが半端なく、とにかく凄い時間がかかりました。。

概念・前提知識

Glueは分散処理が基盤となっています。簡単な処理ならGlueのウィザードベースで出来ますが、ジョブスクリプト編集をしていくには、分散処理が初めての自分は色々な概念を理解する必要がありました。また、Glueの中でそれらを便利に使う為にまた別の技術も取り入れられていたりして、本当に沢山の技術について触れる機会がありましたので記録しておきます。

MapReduce

MapReduceは、コンピュータ機器のクラスター上での巨大なデータセットに対する分散コンピューティングを支援する目的で、Googleによって2004年に導入されたプログラミングモデルです。

MapReduceとは並列分散処理用のフレームワークです。

Hadoop

MapReduceを実現する為のソフトウェアで、Java製です

Glueで使われる技術

Apache Spark

Apache SparkはHadoop MapReduceを改善したもので、巨大なデータに対して高速に分散処理を行うオープンソースのフレームワークです。JavaやScala、Pythonなどいろいろなプログラミング言語のAPIが用意されています。

PySpark

PySparkSparkを実行するためのPython APIのことです。

DataFrame

Sparkにより作成されたデータオブジェクト。データをテーブルのように使いやすくしたもの。データに対して.selectや.showなどオペレーションが使用出来るようになる。

DynamicFrame

spark の DataFrame をラッピングして使いやすくしたもの。

一例として値としてjsonと認識できるデータが入っていればstring型で定義してもstruct型とみなしてくれる。

RDD

RDD(Resilient Distributed Dataset)とは不変(イミュータブル)で並列実行可能な(分割された)コレクション、です。以下にドキュメントの説明を抜粋します。

Hive

Hive(ハイブ)とは、オープンソースの大規模分散計算フレームワークHadoop上で動作するデータウェアハウス(DWH)向けのプロダクトで、 Hiveは初めFacebookによって開発されました。

UDF

UserDefineFunctionの頭文字。Spark内で自分で定出来る関数。

AWS Glue PySpark UDFの使い方・複数引数
AWS Glue PySparkでのUDFの使い方があまりに少なく、わかるまで時間がかかったので記録しておきます。 コード f...

データカタログ・テーブル

S3やDBなどをデータカタログとしてジョブで使用出来る。

クローラー

S3やDBなどをクローリングしてデータカタログにメタデータを追加する。

ジョブ

ETL処理を行うメインの箇所で自分でコードを書ける。

トリガー

ジョブやクローラーのトリガーとなる条件をつけられる。毎時実行などのスケジュールも可能。マネジメントコンソールからはクローラーのトリガーに対応していない(2020/3現在)

AWS Glueでトリガーの時間を変更出来ない
AWS Glueでワークフローからクローラーのトリガーを作成した場合、そのトリガーの時間を変更出来なくなります。ただこれは現時点でのマネジ...

ワークフロー

トリガー・クローラー・ジョブを連動して1つずつ順番にフローをかける機能。

パーティション

パーティション分割は、データセットを整理して効率的にクエリを実行可能にする重要な手法です。 S3に日付別フォルダ作られている場合にはデータカタログにフォルダ名の項目が追加されます。

Apache Parquet

Apache Parquetは、Apache Hadoopエコシステムの無料でオープンソースの列指向のデータストレージ形式です。これで保存しておけばAthenaでクエリ実行する際に軽くなります。

料金

ジョブ・クローラーの実行時間、保存オブジェクトの容量・リクエスト数によります。割と高めなサービスの印象です。

監視

CloudWatch Eventsでエラー・タイムアウト・遅延を検知する事が出来ます。検知したらターゲットに渡します。例えばLambdaをターゲットしてAPIを叩いたりSlackに通知といった事が可能です。

メトリクスもありますが、ジョブのオプションで指定しないと出力されません。また、実行時間が短すぎるとメトリクスは出力されません。

その他

その他記事等もリンクしておきます。

AWS Glue PySpark 環境変数の使い方
AWS Glueでの環境変数の使い方について記録しておきます。 コード import sys args = getResolv...
AWS Glue Struct型のハマるポイント
AWS Glue にてStruct型でハマったポイントについて解説しておきたいと思います。 クローラー クローラーの設定で項目...