質問・問題
AWS Glue でジョブを実行した際、以下エラーが発生しました。
原因と解決方法について教えてください。
エラーメッセージ
```
An error occurred while calling ~ Could not execute broadcast in 300 secs. You can increase the timeout for broadcasts via spark.sql.broadcastTimeout or disable broadcast join by setting spark.sql.autoBroadcastJoinThreshold to -1
```
回答・解決方法
■ 原因
こちらのエラーは、Apache Spark の broadcastTimeout のデフォルト値 300 秒に抵触したために発生したものとなります。(ご参考資料[1])
Glue ジョブ実行時に処理するデータ量等に応じて該当のジョブ実行時に上記の値を超える時間がかかったと推測されます。
また、Glue 3.0 をご利用いただいている場合、ご参考資料[2]の Spark 3.2 未満での既知の問題の影響を受けた可能性も考えられます。
■ 対応方法
エラーメッセージに記載のとおり、以下のいずれかの設定を行うことをご検討ください。
・spark.sql.broadcastTimeout の値を 300 より大きくし、broadcast のタイムアウトまでの時間を延ばす
・spark.sql.autoBroadcastJoinThreshold の値を -1 とし、broadcast を無効とする
Spark の設定値は、ジョブパラメータにて以下のように設定いただくことで変更可能です。
例)
キー: --conf
値: spark.sql.broadcastTimeout=600
上記のパラメータを調整いただいてもエラーが頻発する場合は、原因の切り分けのため以下の対応をお試しいただくことをご検討ください。
Glue 4.0 を利用する
Glue 4.0 は Spark 3.3.0 を使用しているため、前述の Spark の既知の問題の影響は受けません。(ご参考資料[3])
【ご参考資料】
[1] Performance Tuning - Spark 3.1.1 Documentation
https://spark.apache.org/docs/3.1.1/sql-performance-tuning.html
=====
spark.sql.broadcastTimeout
300
Timeout in seconds for the broadcast wait time in broadcast joins
=====
[2] [SPARK-33933] Broadcast timeout happened unexpectedly in AQE - ASF JIRA
https://issues.apache.org/jira/browse/SPARK-33933
[3] AWS Glue のバージョン
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/release-notes.html
※ 上記内容は執筆時点でのAWSドキュメントや、AWSサポートへの問い合わせの回答に基づいたものとなっております。将来的な仕様変更やドキュメント修正等により変更となる可能性がございます。