私の Amazon EMR プライマリノードに障害が生じており、「502 Bad Gateway」(502 不正なゲートウェイ) または「504 Gateway Timeout」(504 ゲートウェイタイムアウト) エラーが表示されています。
簡単な説明
EMR プライマリノードは、次のいずれかのエラーで障害を起こすことがあります。
The master failed: Error occurred:<html>?? <head><title>502 Bad Gateway</title></head> <body>?? <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx/1.20.0</center>?? </body>?? </html>??
The master failed: Error occurred: <html>??<head><title>504 Gateway Time-out</title></head>??<body>??<center><h1>504 Gateway Time-out</h1></center>??<hr><center>nginx/1.16.1</center>??</body>??</html>??
これらのエラーが発生する一般的な原因は次のとおりです。
- インスタンスコントローラーデーモンが停止状態であるか、またはプライマリノードインスタンスでダウンしている。
- プライマリノードのメモリまたはディスク領域が不足している。
- Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのステータスチェックが失敗する。
解決方法
プライマリノードのインスタンスコントローラーデーモンの障害をトラブルシューティングする
プライマリノードのインスタンスコントローラー (I/C) は、EMR コントロールプレーンおよびクラスターの他の部分と通信するデーモンです。インスタンスコントローラーが EMR コントロールプレーンと通信できない場合、プライマリノードは異常と分類され、クラスターは終了します。
これを解決するには、インスタンスコントローラーのログを分析して、プロセスが失敗した理由を特定します。インスタンスコントローラーのログは /emr/instance-controller/log/ にあります。
終了保護がオンになっている場合は、SSH でプライマリノードに接続し、インスタンスコントローラープロセスを再起動します。
Amazon EMR 5.30.0 以降のリリースバージョン:
1. 次のコマンドを使用して、I/C のステータスを確認します。
sudo systemctl status instance-controller.service
2. ステータスがダウンである場合は、次のコマンドを実行して I/C を再起動します。
sudo systemctl start instance-controller.service
Amazon EMR 4.x-2.x リリースバージョン:
1. 次のコマンドを使用して、I/C のステータスを確認します。
sudo /etc/init.d/instance-controller status
2. ステータスがダウンである場合は、次のコマンドを実行して I/C を再起動します。
sudo /etc/init.d/instance-controller start
ログファイルを分析して、メモリとディスクの問題をトラブルシューティングする
- 終了保護がオンになっている場合は、SSH を使用してプライマリノードに接続します。その後、インスタンス状態ログファイルを確認します。
- インスタント状態ログにリストされているメモリやディスクなどのインスタンスメトリクスを分析します。これらのメトリクスは、free -m や df -h などの Linux コマンドを使用して分析できます。
- ログファイルの結果を使用して、プライマリノードが大量のディスクまたはメモリを使用している理由を特定します。
プライマリノード EC2 インスタンスのステータスチェックの失敗をトラブルシューティングする
終了保護がオフになっていて、クラスターが既に終了しているプライマリノードをトラブルシューティングする