我無法在自己的 Amazon EMR 筆記本上執行 Apache Spark 應用程式
簡短描述
從 EMR 筆記本執行的 Spark 應用程式可能無法啟動,發生下列例外狀況:
The code failed because of a fatal error:
Session 4 did not start up in 60 seconds.
解決方案
以下是針對在 EMR 筆記本上執行 Spark 應用程式的常見疑難排解步驟:
檢查叢集上的資源
請確定 Spark 在叢集中有充分的可用資源供 Jupyter 建立 Spark 內容。您可以使用 Amazon CloudWatch 指標或 Resource Manager 來檢查可用資源。
確保正確設定 Sparkmagic 程式庫
請聯絡您的 Jupyter 管理員,以確定 Sparkmagic 程式庫設定正確無誤。
重新啟動筆記本內核
1. 開啟 EMR 主控台,然後選取 Notebook (筆記本)。
2. 從 Notebooks (筆記本) 清單中選取記事本,然後選擇 Open in JupyterLab (在 JupyterLab 中開啟) 或 Open in Jupyter (在 Jupyter 中開啟)。JupyterLab 或 Jupyter 筆記本編輯器會開啟新的瀏覽器索引標籤。
3. 從 Kernel (內核) 功能表中,選取 Restart Kernel (重新啟動內核)。
增加 JupyterLab 的 Spark 工作階段逾時時間
若要增加 Spark 工作階段逾時期間,請執行下列動作:
1. 開啟 EMR 主控台 並選取 Notebook (筆記本)。
2. 從 Notebooks (筆記本) 清單中選取記事本。
3. 存取 EMR 筆記本的 Jupyter Web 使用者介面。
4. 開啟 EMR 筆記本終端。
5. 使用以下命令開啟 config.json 檔案:
vi /home/notebook/.sparkmagic/config.json
5. 在 config.json 檔案中新增或更新 livy_session_startup_timeout_seconds: xxx 選項。
6. 重新啟動所有內核。
**備註:**如果 EMR 主要執行個體中已安裝 JupyterHub 應用程式,請執行下列動作以增加 Spark 工作階段逾時期間。
1. 執行以下命令:
vi /etc/jupyter/conf/config.json
2. 請將 livy_session_startup_timeout_seconds:60 更新為您的值,然後重新啟動 JupyterHub 容器。
調整 Spark 驅動程式記憶體
調整 Jupyter 筆記本應用程式所使用的 Spark 驅動程式記憶體,以控制資源分配。有關更多資訊,請參閱如何修改 Amazon EMR 筆記本中的 Spark 組態?
確保 Apache Livy 服務處於運作狀態
檢查主要節點執行個體上執行之 Livy 伺服器的狀態
1. 使用下列命令檢查 Livy 伺服器的狀態:
sudo systemctl status livy-server
2. 如果狀態為關閉,請使用下列命令重新啟動 Livy 伺服器:
sudo systemctl start livy-server
增加 Livy 伺服器記憶體
根據預設,筆記本用戶端會嘗試連線到 Livy 伺服器 90 秒。如果 Livy 伺服器在 90 秒內沒有回應,則用戶端會產生逾時。Livy 伺服器沒有回應的最常見原因是缺乏足夠的資源。要解決此問題,請增加 Livy 伺服器的記憶體:
1. 使用 SSH 連線與主節點執行個體。
2. 將下列屬性新增至檔案 /etc/livy/conf/livy-env.sh:
export LIVY_SERVER_JAVA_OPTS="-Xmx8g" (option to your value)
3. 重新啟動 Livy 伺服器,以使變更生效。
sudo systemctl stop livy-server
sudo systemctl start livy-server
在 Livy 中使用叢集模式而非用戶端模式
在用戶端模式下,Spark 應用程式在筆記本上提交,並且 Spark 驅動程式作為 Livy 伺服器的子程序執行。作為子程序執行可能會導致主節點上的資源不足。若要防止 Livy 因資源不足而失敗,請將部署模式變更為叢集模式。在叢集模式下執行期間,驅動程式會在核心和任務節點的主要應用程式上執行,而不是在主節點上執行。
若要使用叢集模式,請執行下列動作:
1. 使用 SSH 連線到主節點。
2. 將以下參數新增至檔案 /etc/livy/conf/livy.conf:
livy.spark.deploy-mode cluster
3. 重新啟動 Livy 伺服器,以使變更生效:
sudo systemctl stop livy-server
sudo systemctl start livy-server