【AWS】AWS Glue ~ Glue Version 2.0 ~

■ はじめに

AWS Glue のJobタイプ「Spark」で、Glue version 2.0 がでたらしく、
ぱっと調べた限りでよさそうだったので、徐々にメモしていく。

2021/04/07追記

 Glue2.0 の Python Version が、
いつの間にか、Python3.6 => 3.7 になっている。。。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/release-notes.html

Glue バージョン Spark Python2 Python3 備考
0.9 Spark 2.2.1 Python 2.7 - -
1.0 Spark 2.4.3 Python 2.7 Python 3.6 -
2.0 Spark 2.4.3 - Python 3.7 ★今回のテーマ★
3.0 Spark 3.1.1 - Python 3.7

目次

【1】新機能
 1)パフォーマンス向上
 2)ログ
 3)pip3によるモジュールインストール搭載
 4)Python モジュール拡充
【2】サポート外
【3】料金
【4】移行(Glue1.0 ⇒ Glue2.0)

【1】新機能

* An upgraded infrastructure for running Apache Spark ETL jobs in AWS Glue with reduced startup times.
* Default logging is now realtime, with separate streams for drivers and executors, and outputs and errors.
* Support for specifying additional Python modules or different versions at the job level.

気になる点

1)パフォーマンス向上(起動時間短縮)
2)ログ
3)pip3によるモジュールインストール搭載
4)Python モジュール拡充

1)パフォーマンス向上(起動時間短縮)

https://aws.amazon.com/jp/blogs/news/aws-glue-version-2-0-featuring-10x-faster-job-start-times-and-1-minute-minimum-billing-duration/

より抜粋
~~~~
Glue バージョン 2.0 の起動時間が 10 倍速くなっていることがわかります
~~~~

実際の動作確認結果

 バージョン1.0と2.0で、同じ動作確認したが、
起動時間(Start-up time)が、確かに早くなっていた。
~~~~
Glue 1.0 : 11分
Glue 2.0 : 1分
~~~~
他のケースでも比較してみたが、起動時間(Start-up time)だけでなく
(気のせいかもしれないが)処理速度もあがっていた。
(ほかのサイトでも、同様のこと言ってたような、、、)

簡単に確認できるので、試してみる価値はあるかと。

2)ログ

https://docs.aws.amazon.com/glue/latest/dg/reduced-start-times-spark-etl-jobs.html#reduced-start-times-logging

* リアルタイムでのログ出力
* デフォルトロググループは、 /aws-glue/jobs/logs-v2

などなど

ロググループについて

* デフォルトロググループで影響がでる場合は、
 カスタム AWS CloudWatch ロググループ名「--continuous-log-logGroup」
 を指定すれば、解決できるかも。
=> '--continuous-log-logGroup': '/aws-glue/jobs/output' みたいな。
=> 「--continuous-log-logGroup」については、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2019/10/09/000000

3)pip3によるモジュールインストール搭載

* 以下に詳しく記載されているので、そちらを参照。

https://dev.classmethod.jp/articles/20200812-aws-glue-version2-python-module-update/
失敗談

* 以下の関連記事で実際にチャレンジしたけど、ダメだった話。

AWS Glue ~ Excelを扱うには / PySpark (Glue2.0) 版 ~
https://dk521123.hatenablog.com/entry/2020/10/09/144520

4)Python モジュール拡充

https://docs.aws.amazon.com/glue/latest/dg/reduced-start-times-spark-etl-jobs.html

より抜粋
~~~~
Python Modules Already Provided in Glue Version 2.0
Glue version 2.0 supports the following python modules out of the box:

setuptools—45.2.0
subprocess32—3.5.4
ptvsd—4.3.2
pydevd—1.9.0
PyMySQL—0.9.3
docutils—0.15.2
jmespath—0.9.4
six—1.14.0
python_dateutil—2.8.1
urllib3—1.25.8
botocore—1.15.4
s3transfer—0.3.3
boto3—1.12.4
certifi—2019.11.28
chardet—3.0.4
idna—2.9
requests—2.23.0
pyparsing—2.4.6
enum34—1.1.9
pytz—2019.3
numpy—1.18.1
cycler—0.10.0
kiwisolver—1.1.0
scipy—1.4.1
pandas—1.0.1
pyarrow—0.16.0
matplotlib—3.1.3
pyhocon—0.3.54
mpmath—1.1.0
sympy—1.5.1
patsy—0.5.1
statsmodels—0.11.1
fsspec—0.6.2
s3fs—0.4.0
Cython—0.29.15
joblib—0.14.1
pmdarima—1.5.3
scikit-learn—0.22.1
tbats—1.0.9
~~~~

 めちゃくちゃ増えた。
「pandas」「Cython」などもうれしい。

【2】サポート外

https://docs.aws.amazon.com/glue/latest/dg/reduced-start-times-spark-etl-jobs.html#reduced-start-times-limitations

* Development endpoints
* FindMatches machine learning transforms
* AWS Glue streaming ETL jobs
* AWS Glue version 2.0 does not run on Apache YARN,
  so YARN settings do not apply
* AWS Glue version 2.0 does not have a Hadoop Distributed File System (HDFS)
* AWS Glue version 2.0 does not use dynamic allocation,
  hence the ExecutorAllocationManager metrics are not available
* For AWS Glue version 2.0 jobs, you specify the number of workers and worker type,
  but do not specify a maxCapacity.

Development endpoints

* 開発エンドポイントは、サポート外

FindMatches machine learning transforms

* FindMatches 機械学習転送は、サポート外

AWS Glue streaming ETL jobs

* ジョブタイプ「Glue streaming」は、サポート外

Apache YARN

# AWS Glue version 2.0 does not run on Apache YARN,
# so YARN settings do not apply
* Apache YARN/YARN に関する設定は、サポート外

HDFS

# AWS Glue version 2.0 does not have a Hadoop Distributed File System (HDFS)
* HDFSは、サポート外

Dynamic allocation

# AWS Glue version 2.0 does not use dynamic allocation,
# hence the ExecutorAllocationManager metrics are not available
* HDFSは、dynamic allocation/ExecutorAllocationManager は、サポート外

maxCapacity

# For AWS Glue version 2.0 jobs, you specify the number of workers and worker type,
# but do not specify a maxCapacity.
* maxCapacityは、サポート外(worker typeやworker数でチューニング)

【3】料金

https://aws.amazon.com/glue/pricing/?nc1=h_ls

より抜粋
~~~~~~~~~
An Apache Spark job run in AWS Glue requires a minimum of 2 DPUs.
By default, AWS Glue allocates 10 DPUs to each Apache Spark job.
You are billed $0.44 per DPU-hour in increments of 1 second, rounded up to the nearest second.
Glue Spark jobs using Glue version 2.0 have a 1-minute billing duration.
Glue Spark jobs using AWS Glue version 0.9 or 1.0 have a 10-minute minimum billing duration.
~~~~~~~~~

Glue0.9/1.0は、10分単位での請求に対して、
Glue2.0は、1分単位での請求になる。

https://aws.amazon.com/jp/blogs/news/aws-glue-version-2-0-featuring-10x-faster-job-start-times-and-1-minute-minimum-billing-duration/

より抜粋
~~~~~~~~~
AWS Glue バージョン 2.0 の Spark ジョブでは、
最小の請求期間が 10 分の 1
 (すなわち 10 分の最小請求期間から 1 分の最小請求期間) になり、
1 秒単位で請求されます。
~~~~~~~~~

上記の英語の記述で判断するなら、
単位当たりの料金が変わっていないし、すごくいいこと。

【4】移行(Glue1.0 ⇒ Glue2.0)

* めちゃくちゃ、簡単だった

 [Edit Job] で、「Glue job version」のダイアログ選択を
「Saprk 2.4, Python 3 with improved job startup times(Glue Version 2.0)」に設定し
保存するだけ。
(ダイアログ選択は、以下のサイトの画面を参照)

https://aws.amazon.com/jp/blogs/news/aws-glue-version-2-0-featuring-10x-faster-job-start-times-and-1-minute-minimum-billing-duration/

注意:「【2】サポート外」の考慮について

ただし、「【2】サポート外」であるように
「maxCapacityは、サポート外」などがあるので
移行する際には、サポート外などの仕様変更も
視野に入れる必要がある。

補足:boto3 でのJob作成の場合

https://dk521123.hatenablog.com/entry/2019/10/14/000000

で扱った boto3 でジョブを作成している場合は、
以下のAPIに従えば、「Glue version」を「2.0」にするだけっぽい。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_job
https://docs.aws.amazon.com/glue/latest/dg/add-job.html

参考文献

公式サイト
https://aws.amazon.com/jp/blogs/news/aws-glue-version-2-0-featuring-10x-faster-job-start-times-and-1-minute-minimum-billing-duration/
一般サイト
https://dev.classmethod.jp/articles/20200811-aws-glue-version2/
https://dev.classmethod.jp/articles/20200812-aws-glue-version2-python-module-update/

関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505
AWS Glue ~ Excelを扱うには / PySpark (Glue2.0) 版 ~
https://dk521123.hatenablog.com/entry/2020/10/09/144520
AWS Glue ~ ログ ~
https://dk521123.hatenablog.com/entry/2019/10/09/000000
AWS Glue ~ Workflows / Boto3・AWS CLI
https://dk521123.hatenablog.com/entry/2019/10/14/000000