■ はじめに
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