こんにちは!Dataintelligenceチームの垣内です。
前回、公開した「【PySpark】Pythonで分散処理を体験してみよう」では、簡単にPySparkの書き方をご紹介いたしました。
実務でPySparkで分散処理を実行するとなると、クラウドサービスを使うことになると思います。本連載ではAWSの分散処理サービスである「AWS Glue」を使って、分散処理を実行してみます!第一弾の今回は、AWS Glueとはなにか?そしてローカルでの開発方法や開発に使うサービス・ツールをご紹介します。
AWS Glueとは
AWS Glueは大量のデータを読み込み、加工・変換する際に用いられるサーバーレスサービスです。 ETL/ELTの構築や機械学習・深層学習でモデルを作ったり実験したいときに適しています。詳しく見ていきましょう。
AWS Glueは次の図のようなアーキテクチャとなっています。
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/components-key-concepts.html
AWS Glueを構成する主な要素として「Crawler・DataCatalog・Job」があります。どのようなものか簡単にご紹介します。
機能 | 概要 |
---|---|
DataCatalog | 処理対象のデータに関するメタデータ*1を管理するデータカタログ機能 ETL ジョブの作成と監視に使われる |
Crawler | データソースからメタデータを集め、DataCatalogに登録・更新する機能 |
Job | ETL処理を行う機能 |
今回はETL処理を動かしたいので、Jobを使います。
Jobの作成方法
実際にAWS Glueを開き、左のナビゲーターから「Jobs」をクリックします。するとJobの作成・管理ページに遷移するので「Create Job」でJobを作成していきます。作成したJobは「Your Jobs」で一覧表示されます。
Jobを作るには6通りの方法があり、その特徴を以下の図にまとめました。「Ray script editor」は登場したばかりで、2023年2月現在はプレビューとなっていますが、Sparkとの使い分けや速度が気になるところです!
価格
AWS Glueでは、Crawler とJob、DataCatalogに対して料金が発生します。
CrawlerとJobは、時間当たりの料金が秒単位で発生。
DataCatalogは、メタデータの保存とアクセスに対して月額料金が発生。
DPUとは
AWS Glueの料金表を見ていると、時折出てくる「DPU(Data Processing Unit)」という単位。DPUを日本語に訳すとデータ処理装置という名称になります。CPUやGPUといった処置装置の1つで、データ処理に長けています。 AWS Glueの標準的なDPUでは、1つあたり「4つの vCPUと16GBのメモリ」が提供されています。
Jobの実行時間と料金の注意事項
DPUは1時間あたり$0.44/DPUの料金が発生しますが、価格表には書かれていない注意点が2つあったのでご紹介します。
①Jobは2DPUからしか設定できない
実はAWS GlueのJobを実行するためには最小でも2DPU~しか設定できません。
そのため料金試算する際は、2DPU($0.88)を使うことを念頭に計算をしましょう。
② 10分未満で終わっても、最小請求期間は10分から
Jobが3分や5分といった10分未満で終了したとします。本来ならばDPUに3/60を掛けて金額算出をしたいところですが、Jobの実行時間が10分未満の場合は10/60で計算しなければなりません。これを最小請求期間と呼びます。
そのため、金額の試算時にはこの2項目が考慮されているか確認しておくとよいでしょう。
AWS Glueを使った開発方法
AWS Glueの概要がわかったところで、開発方法を見ていきましょう!こちらの公式のドキュメントでは、開発方法が紹介されています。 docs.aws.amazon.com
AWSのコンソール上で開発エンドポイントというものを用いて開発することもできますが、Jobを実行するたびにお金がかかってきます。
ローコード・ノーコードの場合はコンソールからVisual editorを選択しますが、コードを記述する場合はDockerのイメージ*2利用が推奨されています。
また、複雑なETL処理を書く場合は、複数人で開発することになります。
※開発エンドポイントの詳細はこちら
そのため、同一環境を構築できるDockerやライブラリを使った方法が良いでしょう。尚、こちらの方法はJobの実行に金額は発生しません。
今回、開発で使うツール
今回は、AWS S3・AWS Glue、PostgresSQLという3つのコンテナを作成し、Docker Composeを使って動かしていきます。
AWS S3をローカルで動かすことになりますが、一体どうやって再現するのか...とお考えの皆様に朗報です!安心してください。その疑問、Localstackが解決します!!
Localstackとは?
Localstack、ローカルにAWSのサービスをエミュレート(=再現)してくれるモックフレームワークです。これがあることで、AWSサービスをローカルに再現してくれるので、各種機能・APIがそのまま使えるようになります。そのため、スムーズに開発ができるようになるということです!!
Localstack CLIやDocker、Docker-Composeを用いて使う方法がありますが、今回はDocker-Composeを使ってAWSサービスをエミュレートします。
プラン
Localstackにはプランが4種類あります。一番ベーシックなプランである「Community版」では、基本的な APIとコックピッドというものが利用できます。上位のプランになれば、使えるAPIが増えたりサポートがつきます。 localstack.cloud
今回は「AWS S3」をエミュレートしたいので、こちらからCommunity版でAPIが提供されているか確認しました。
まとめ
本連載で利用するAWS Glueに関する解説と、Localstackについてご紹介いたしました。次回は「環境構築編」と題して、初期化スクリプトの作成とdocker-compose.yamlの書き方や注意点をご紹介します!
*1:メタデータ:データの場所、スキーマといったデータに関する情報