AWS入門ブログリレー2024〜AWS Glue編〜

ますます多機能となりAWSにおけるデータ分析を支えてくれているAWS Glueの2024年時点の機能について、入門におすすめのものをご紹介します。
2024.05.12

当エントリは弊社AWS事業本部による『AWS 入門ブログリレー 2024』の42日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2024 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。今回のテーマは『AWS Glue』です。

AWS Glueとは

AWS Glueは、AWSにおけるサーバーレスでスケーラブルなデータ統合サービスです。Glueを使うことにより、AWS内外の複数のソースからデータを検出・準備・移動・統合することができるため、データ分析・機械学習やそのほかのデータを活用したアプリケーション開発を非常に便利に進めることができます。

Glueの機能は非常に多岐に渡るため、一言で説明するのがなかなか難しいですが、以下はその概念図になります。

AWS Glue の概念

(引用元:AWS Glue concepts

詳細については以降のセクションで説明していきますが、機能の具体的なイメージとしては、例えばApache SparkによるETLを実行するためのサーバーレスな機能(Glueの機能のうち、Jobsという機能)が分かりやすいと思います。Sparkのサーバーを自分で構築しなくても、PySparkを使ったPythonスクリプトなどSpark向けのコードを用意して簡単なジョブの設定をするだけで、非常に手軽にに誰でもApache SparkによるETLを実現できます。

また、Glue Data CatalogはAmazon Athenaと統合されており、Athenaで作成したテーブルは基本的にGlue Data Catalogに登録されます。

このように、GlueはAWSにおけるデータ活用を幅広く支えてくれている非常に重要なサービスになります。

AWS Glueが支えるデータ分析の観点

データ分析系サービスとしてどのような観点をGlueが担っているのかを、私なりに整理してみました。

データの変換・統合

チーム内で運用しているシステムのデータを結合・集計したり、異なる背景を持つ別チームからもらったデータを自分のチームのデータと統合してさらなる価値を生み出したりします。

作成したデータはS3バケットにオブジェクトとして保存したり、Amazon RedshiftなどのDWHにロードしたりなど、Glueの機能により各種サービスに連携が可能です。

変換したデータはAmazon QuickSightのようなBIツールで分析・モニタリングしたり、Amazon SageMakerなどの機械学習サービスで機械学習モデルを構築したりするために使われます。

この観点では、AWS GlueはJobsの機能を使って簡単にETLを開発することができます。ユーザーはApache SparkまたはPython向けのスクリプトを作成すれば、サーバーレスな実行環境であるGlue Jobを作成することでスクリプトを実行できます。

ビックデータ処理に必要なシステム的なメタデータ管理

ビッグデータ処理をする上で、どこにどんなデータがあるのかというシステム的なメタデータを管理することは重要です。例えば、このテーブルに該当するデータは、このS3バケットのこのパスにあり、フォーマットはParquetである、などです。

AWS GlueではGlue Data Catalogとしてこの機能を提供しています。Glue Data CatalogはGlueだけではなく、Amazon AthenaやAmazon Redshiftなど別のAWSのデータ分析系サービスからも使用されます。

また、データソース(データ分析系サービスから見てデータを提供してくれるシステム)への接続情報も重要なメタデータです。これは接続(Connections)で管理できます。

データ品質管理

海外では個人が特定できる情報の取り扱いが非常に厳しくなっており、今後日本も含めてより多くの地域でデータマネジメントの重要性が増してくると想像されます。データマネジメントを行うための技術的な要素としてはさまざまありますが、AWS Glueではそのうちのデータ品質向けの機能であるGlue Data Qualityを持っています。

Glue Data Qualityを使うと設定しておいた品質チェックのためのルールを処理対象のデータが満たしているかチェックし、その結果からデータの品質をシステム的に評価することが可能です。データ品質は各種分析や機械学習モデルにも大きく影響します。また、その価値を継続的に評価・把握することにも繋がります。いまやデータは企業や個人の持つ重要な資産の一つといえるため、この機能は重要になります。

オーケストレーション

AWS Glueによるデータ処理の実行制御は、ワークフローやトリガーによって設定が可能です。例えば、Glueコンソールからワークフローをポチポチと作成することで毎日この時間にGlueクローラーを実行してからJobを実行する、といった設定が簡単にできます。

こういった観点ごとのGlueの役割はAWSの『AWS Black Belt Online Seminar』などでも紹介されているため、いくつかの資料をみた上でGlueの立ち位置のイメージを掴んでいただくとよいかと思います。

AWS Glueの機能

代表的な機能の一覧

記事執筆時点の代表的な機能は以下です。

  • Jobs関係
    • Spark Jobs
    • Python Shell Jobs
    • Streaming Jobs
    • Glue Studio
  • Data Catalog関係
    • データベース
    • テーブル
    • クローラー
    • 接続
    • Streaming schema registry
  • データ品質関係
    • Glue Data Quality
  • オーケストレーション関係
    • トリガー
    • ワークフロー

※ 上記でほとんどの機能を網羅していますが、より正確にはガイドも参照してください。

以下では入門のため紹介しておきたいと思った内容をご紹介します。

Spark Jobs

Apache SparkにてETLを実行できます。現在、PySparkおよびScalaにてETLスクリプトが実装できます。

ユーザーはGlueコンソールのコードエディタを使ってスクリプトを実装するか、ローカルで作成したプログラムをアップロードするかのどちらかで実行内容を定義した後、ETLを実行するためのジョブの設定(例えばノードの数やオートスケール設定など)を行うだけで、簡単にビッグデータに対するETLを実行できます。

Glueのランタイムにはあらかじめライブラリがインストールされていますが、--additional-python-modulesパラメータを設定しておくことでpip3を使って追加のライブラリをインストールしたり、既存のライブラリのバージョンアップが可能です。

Glueは非常に便利にSparkによるビッグデータ処理を実行することが可能ですが、Sparkのジョブを使用するためにはApache Sparkの知識が必要になります。日本語にてApache Sparkが学べる書籍が少なく、どうしても周りに分かっている人がいないと手が出しづらい状況でしたが、2024/4に翔泳社様から『Apache Spark徹底入門』が発売され、非常に学びやすい状況になりました。Glueによるビッグデータ処理に興味がある方や、やることになった方はぜひ読まれると良いと思います。

Python Shell Jobs

PythonによるETLを実行できます。Spark Jobsと同じように使えますが、Python Shell Jobsは数十MB程度の比較的小さなデータに対するETLを対象としています。

軽量なPythonスクリプトを実行するという点ではFargateやLambdaと似たような役割ですが、Python Shell Jobsは実行時間が非常に長く、コンテナを使わないという点で異なります。VPCも必須ではありません。とにかく手軽にETL用のPythonスクリプトを実行したい、それ以外のことは特に考えていない、という場合に使いやすい優れた機能です。一方で、クラスターにて処理を行うSpark Jobsとは根本的に動作が異なるので、将来的なデータ量のスケールに耐えられるか考えた上で採用するのが良いと思います。

Glue Studio

AWS Glue によるETL(Extract Transform Load)開発が容易になるビジュアルインタフェースです。

AWS GlueのJobsはもともとはコードエディタを使うか、ローカルで作成したプログラムをアップロードするかのどちらかでしたが、2020年にこのビジュアルインタフェースが登場してからは、UIからコンポーネントを配置することで誰でもETLジョブを開発可能になりました。ユーザーはUIでETL処理を定義でき、また対応するPythonスクリプトも生成されるため、それをさらに修正したりほかのジョブにコピーして流用したりすることができます。

UIは以下のようなイメージです。

Glue Studioのイメージ

個人的には、この機能の大きなポイントとしては以下の2つがあると考えています。

  • UIから誰でもDynamicFrameを使ったETLジョブの開発ができる
  • AWS Glueの多岐に渡る機能に対する見通しがよい

DynamicFrameは、Apache SparkのDataFrameの制限(具体的には事前にスキーマを指定する必要があるなど)を解消するために導入された、AWS Glueのデータフレーム機能です。DynamicFrameでの実装はApache Sparkに加えてこのデータフレームの仕様にも詳しい必要があるため、Glue Studioから生成されたスクリプトをそのまま使用できるのは強力です。私もよくまずはGlue Studioからスクリプトを作ってみて、中身を確認したりします。

AWS Glueの多岐に渡る機能をUIから簡単に利用できるのも重要です。Glueは組み込みでデータ処理向けの強力な機能を複数搭載しており、例えば個人識別情報(PII)のマスク機能が利用できます。

この機能はスクリプトで直接実装が可能なものの、基本的にはGlue StudioからUIで設定することを想定しているものと思います。

ほかにもGlue Studioから機能を閲覧したほうが、機能の一覧性が高く実装効率もよいため、Apache Sparkに詳しい方でもGlueの機能をフル活用したい場合は、まずはGlue Studioから作ってみることをおすすめします。

なお、ETLジョブはJupyter Notebook環境を利用してインタラクティブに開発することも可能です。その場合はセッションに課金が発生するため注意しましょう。

Glue Data Catalog

データの場所・スキーマ・パーティションメタデータなどのシステム的な情報をテーブルとしてGlue Data Catalogに登録できます。この情報は、Glueからだけではなく、Amazon AthenaやAmazon Redshiftなど別のAWSのデータ分析系サービスからも使用されます。

データベースはテーブルをまとめるためのものになっています。データベースという一階層を設けることにより、IAMやLakeFormationによるアクセス制御を行いやすくなるほか、単純にコンソールなどからの検索性もよくなります。

テーブルは長らくApache Hiveメタストアとしての働きをしてきていますが、最近ではApache Hudi・Delta Lake・Apache Icebergといったデータレイクフレームワークにも対応しています。

テーブルは以下のようなイメージです。

Glueテーブルのイメージ

Apache Hudi・Delta Lake・Apache Icebergといったデータレイクフレームワークに対応するメリットの一つとしては、データがAmazon S3に保存されている場合(つまりデータレイクとして使っている場合)に、一貫性のあるトランザクションによる読み書きが実行できることが挙げられます。海外では個人が特定できる情報の取り扱いが非常に厳しくなっており、ユーザーから依頼があった場合に迅速にデータを削除する必要があります。このように一貫性を持った操作をデータレイクに対しても実現することで、データレイクとしてはより安全にデータを管理することができます。

GlueコンソールのGlue Data Catalogページは、そのほかいくつかの機能のインターフェースにもなっています。

  • Glue Data Quality: 設定したデータ品質ルールに基づき、データ品質を計算する
  • 自動コンパクション: Icebergテーブルに対して定期的にメンテナンス処理を実行する
  • 列統計: Glueテーブルであらかじめ計算しておくことで、実行するSQLをより最適化できるようにする

クローラー

Amazon S3やそのた対応するデータベースなどから自動的にデータの形式・スキーマ・関連プロパティなどをクロールし、Glueテーブルを作成することができます。

クローラーはオンデマンドまたはスケジュール実行が可能です。増分の検出も可能で、例えばS3バケットにあるデータが新しいパーティションにあった場合、パーティションメタデータをGlue Data Catalogに登録します。一方で、大きくスキーマが異なるといった場合はエラーで停止するため、データを変更するといったケアが必要になります。

カタログを使用したデータ参照

(引用元:【AWS Black Belt Online Seminar】AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-

接続

各種データベースやBigQueryやSnowflakeなどの接続情報を保持します。

また、大きなポイントとして、VPC内でGlueを実行したい場合にも使用します。

Glue Data Quality

Glueテーブルに対してデータ品質ルールを簡単に設定することができます。データ品質ルールは定期実行ができ、失敗時にはアラートを上げることが可能です。

Glue Data Qualityの基本的な使い方

(引用元:[まるクラ勉強会 ONLINE #1] 20分で大体わかる!AWS Glue Data Qualityによるデータ品質検査 | DevelopersIO

ルールは手動定義しなくても既存データを分析して作成できます。

トリガー・ワークフロー

Glueの機能であるトリガーを使うと、Glueジョブやクローラをオンデマンドやスケジュールで起動することができます。

ワークフローは複数のクローラ・ジョブを伴う複雑なETLを定義することができるものです。ワークフローもトリガーによりスケジュール起動ができます。

UIのイメージとしては以下のようなものです。

ワークフローのイメージ

ただ個人的には、ほかのサービスと一緒に使うことを考えると、AWS Step Functionsを使うことが多いです。

そのほかのトピック

AWS Glue for Ray

GlueはRayを実行することも可能です。RayはPythonによる分散並列処理をとてもシンプルに記述できるように設計されたフレームワークです。

Amazon EMRとの違い

AWS Glueと同じような役回りなのがAmazon EMRです。どちらを使うとよいか迷う方もいるかと思いますが、個人的にはETLごとに実行環境を分けておいた方が扱いやすいため、特別な理由がなければまずはAWS Glueを使用するのがよいと思います。

Amazon EMRはAWS Glueより以前にリリースされた、ビッグデータワークロードを簡単に実行するためのサービスです。AWS GlueがETL単位でクラスターを用意するのに対して、Amazon EMRは共通クラスターにジョブを実行させるようなイメージとなります。Amazon EMRでもApache Sparkが実行でき、EMRに最適化されたSparkランタイムが用意されているため、高速に動作するなどEMRのメリットもあります。

一方で、HadoopやAmazon EMRへの知見が深いメンバーがいる場合であれば、スポットインスタンスなどを使いつつ安価に非常に大きな規模のデータを処理できるため、EMRを選択されるというのはとても良いと思います。

Amazon EMRについては以下に詳細な記事も公開しているためご確認ください。

最後に

以上、『AWS 入門ブログリレー 2024』の42日目のエントリ『AWS Glue』編でした。 次回、5/13(月)は弊社平木佳介による『Amazon EC2』編の予定です。