■ はじめに
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)パフォーマンス向上(起動時間短縮)
より抜粋 ~~~~ Glue バージョン 2.0 の起動時間が 10 倍速くなっていることがわかります ~~~~
実際の動作確認結果
バージョン1.0と2.0で、同じ動作確認したが、 起動時間(Start-up time)が、確かに早くなっていた。 ~~~~ Glue 1.0 : 11分 Glue 2.0 : 1分 ~~~~ 他のケースでも比較してみたが、起動時間(Start-up time)だけでなく (気のせいかもしれないが)処理速度もあがっていた。 (ほかのサイトでも、同様のこと言ってたような、、、) 簡単に確認できるので、試してみる価値はあるかと。
2)ログ
* リアルタイムでのログ出力 * デフォルトロググループは、 /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】サポート外
* 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 に関する設定は、サポート外
# 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分単位での請求になる。
より抜粋 ~~~~~~~~~ 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)」に設定し 保存するだけ。 (ダイアログ選択は、以下のサイトの画面を参照)
注意:「【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 ~ Glue Version 3.0 ~
https://dk521123.hatenablog.com/entry/2021/09/18/232556
AWS Glue ~ Glue Version 4.0 ~
https://dk521123.hatenablog.com/entry/2023/03/15/000000
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