【AWS】AWS Glue ~ パフォーマンスチューニング ~

■ はじめに

AWS Glue をつかって、でかいデータを扱ってているのだが
想定していたより、でかいデータだったので、
Glue Jobの パフォーマンスをチューニングする際の知識を
調べたので、メモする。

目次

【1】パフォーマンスに関わるジョブプロパティ
 1)AWS Glue version
 2)Worker type
 3)Number of workers / Maximum capacity
 4)Max concurrency (最大同時実行数)
 5)Job timeout
【2】モニタリング

【1】パフォーマンスに関わるジョブプロパティ

* 以下の公式ドキュメントを参照するのがいい 

https://docs.aws.amazon.com/glue/latest/dg/add-job.html

1)AWS Glue version

* もし古いバージョンを使っていたら、最新バージョンに変えるだけで
 パフォーマンスがあがるかも、、、

AWS Glue ~ Glue Version 2.0 ~
https://dk521123.hatenablog.com/entry/2020/08/19/130118
AWS Glue ~ Glue Version 3.0 ~
https://dk521123.hatenablog.com/entry/2021/09/18/232556

2)Worker type

a) Standard

* 「Maximum capacity (最大キャパシティー)」の値も指定

b) G.1X

* 1 DPU (4 vCPU、16 GB のメモリ、64 GB のディスク)
* AWS Glue バージョン 2.0 以降のデフォルト

c) G.2X

* 2 DPU (8 vCPU、32 GB のメモリ、128 GB のディスク)
* 推奨されている使用例:メモリを大量に消費する機械学習

d) G.025X

* 0.25 DPU (2 vCPU、4 GB のメモリ、64 GB のディスク) 
* AWS Glue バージョン 3.0 のストリーミングジョブでのみ使用
* 推奨されている使用例:少量のストリーミングジョブ

3)Number of workers / Maximum capacity

a) Number of workers

* ジョブの実行時に割り当てられるワーカーの数を指定
* Worker type: G.1X / G.2X の場合、必ず指定する
 (公式ドキュメントには記載がないが、編集する際に説明書きされている)
~~~~~~~~~~~
 +  Worker type: G.1X の場合、最大 299 まで指定可能
 +  Worker type: G.2X の場合、最大 149 まで指定可能
~~~~~~~~~~~

b) Maximum capacity

* AWS Glue バージョン 1.0 以前のジョブでは、Worker type: standard (標準)のみ
 => AWS Glue バージョン 2.0 以降のジョブでは指定できない
* 2~100 の整数 (デフォルト: 10) 

4)Max concurrency (最大同時実行数)

* 対象Glue Jobaが許可される同時実行の最大数を設定
 => 同じJobを並列で動かしたい場合は、その並列数分設定する
* デフォルト: 1

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job.html

より抜粋
~~~~~~~~~~~
このしきい値に達すると、エラーが返されます。
たとえば、新しいインスタンスの開始時に
前回のジョブがまだ実行されている場合、
同じジョブの 2 つのインスタンスが同時に実行されないように
エラーを戻すことができます。
~~~~~~~~~~~

このエラーに関する詳細は、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2022/12/02/163021

Max concurrency の上限について
https://docs.aws.amazon.com/general/latest/gr/glue.html

より抜粋
~~~~~~~~~~~~~~
* Max concurrent job runs per account
(アカウントあたりの同時実行ジョブの最大実行数)
 => Each supported Region: 200

* Max concurrent job runs per job
(ジョブあたりの同時実行ジョブの最大実行数)
 => Each supported Region: 1,000
~~~~~~~~~~~~~~

https://dev.classmethod.jp/articles/aws-glue-job-concurrency/

によると以下のようになる
~~~~~~~~~~~~~~
(ジョブ関係なく)
アカウント内のジョブの最大同時実行数は200
かつ
1つのジョブの最大同時実行数は1000
~~~~~~~~~~~~~~

Number of concurrent job runs per account(デフォルト200)
を増やさないと1000ジョブ実行できない
(デフォルト設定がいけてない気が、、、)
 => AWS へ上限緩和申請により変更可能
 (上の公式サイトで「調整可能:はい」になっている)

5)Job timeout

* 最大の実行時間 (分) を設定
* デフォルト: 2880 分 (48 時間)

【2】モニタリング

* 対象Glue Jobを選択し、
 [Metrics] (メトリクス)タブでグラフとしてみることができる

■ 関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505
AWS Glue ~ Glue Version 2.0 ~
https://dk521123.hatenablog.com/entry/2020/08/19/130118
AWS Glue ~ Glue Version 3.0 ~
https://dk521123.hatenablog.com/entry/2021/09/18/232556
AWS Glue ~ ジョブパラメータ ~
https://dk521123.hatenablog.com/entry/2022/09/28/105558
Glue Job を並列で動かそうとしたら ConcurrentRunsExceededExceptionが発生
https://dk521123.hatenablog.com/entry/2022/12/02/163021