我的 Amazon EMR 主節點出現 “502 Bad Gateway (502 錯誤閘道)” 或 “504 Gateway Time-out (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 連線到主節點。然後,檢閱執行個體狀態日誌檔。
- 分析執行個體指標,例如即時狀態日誌中列出的記憶體和磁碟。您可以使用 Linux 命令 (例如 free -m 和 df -h) 來分析這些指標。
- 使用日誌檔結果來判斷主節點使用大量磁碟或記憶體的原因。
針對主節點 EC2 執行個體狀態檢查失敗進行疑難排解
- 檢視執行個體狀態檢查指標,以判斷主要執行個體狀態檢查是否失敗。
- 針對執行個體狀態檢查失敗進行疑難排解。請注意,啟動和停止 EC2 執行個體會導致 EMR 叢集終止。
針對已關閉終止保護且叢集已終止的主節點進行疑難排解