為什麼我無法在 EMR 筆記本上執行 Spark 應用程式?

上次更新日期:2023 年 1 月 18 日

我無法在自己的 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

此文章是否有幫助?


您是否需要帳單或技術支援?