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
PySparkはSparkを実行するための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内で自分で定出来る関数。
データカタログ・テーブル
S3やDBなどをデータカタログとしてジョブで使用出来る。
クローラー
S3やDBなどをクローリングしてデータカタログにメタデータを追加する。
ジョブ
ETL処理を行うメインの箇所で自分でコードを書ける。
トリガー
ジョブやクローラーのトリガーとなる条件をつけられる。毎時実行などのスケジュールも可能。マネジメントコンソールからはクローラーのトリガーに対応していない(2020/3現在)
ワークフロー
トリガー・クローラー・ジョブを連動して1つずつ順番にフローをかける機能。
パーティション
パーティション分割は、データセットを整理して効率的にクエリを実行可能にする重要な手法です。 S3に日付別フォルダ作られている場合にはデータカタログにフォルダ名の項目が追加されます。
Apache Parquet
Apache Parquetは、Apache Hadoopエコシステムの無料でオープンソースの列指向のデータストレージ形式です。これで保存しておけばAthenaでクエリ実行する際に軽くなります。
料金
ジョブ・クローラーの実行時間、保存オブジェクトの容量・リクエスト数によります。割と高めなサービスの印象です。
監視
CloudWatch Eventsでエラー・タイムアウト・遅延を検知する事が出来ます。検知したらターゲットに渡します。例えばLambdaをターゲットしてAPIを叩いたりSlackに通知といった事が可能です。
メトリクスもありますが、ジョブのオプションで指定しないと出力されません。また、実行時間が短すぎるとメトリクスは出力されません。
その他
その他記事等もリンクしておきます。