當我在 Amazon EMR 上執行的 Spark 工作完成後,為什麼 YARN 應用程式仍會使用資源?

2 分的閱讀內容
0

我正在 Amazon EMR 叢集上執行 Jupyter 或 Zeppelin 筆記本。即使在我提交的 Apache Spark 工作完成後,YARN 應用程式仍繼續執行。

簡短說明

當您在 Zeppelin 或 Jupyter 中執行 Spark 筆記本時,Spark 會啟動解譯器。解譯器會建立 YARN 應用程式。此應用程式是在您列出應用程式時顯示的 Spark 驅動程式。當您從筆記本完成執行工作時,驅動程式不會終止。根據設計,Spark 驅動程式會保持作用中,以便其可以請求應用程式容器進行即時的程式碼執行。缺點是 YARN 應用程式可能正在使用其他工作需要的資源。若要解決此問題,您可以手動停止 YARN 應用程式。您還可以設定會自動停止應用程式的逾時值。

解決方案

Zeppelin

選項 1: 重新啟動 Spark 解譯器

開始之前,請確保您擁有在 Zeppelin 中重新啟動解譯器的許可。

1.    開啟 Zeppelin。

2.    從使用者名稱旁邊的下拉式清單中,選擇「解譯器」。

3.    找到 Spark 解譯器,然後選擇「重新啟動」。Zeppelin 將在解譯器重新啟動時終止 YARN 工作。

選項 2: 手動停止 YARN 工作

開始之前,請確保下列各項:

  • 您擁有 Amazon EMR 叢集的 SSH 存取權。
  • 您擁有執行 YARN 命令的許可。

使用 -kill 命令來終止應用程式。在下列範例中,將 application_id 取代為您的應用程式 ID。

yarn application -kill application_id

選項 3: 設定解譯器逾時值

Zeppelin 0.8.0 版及更新版本 (適用於 Amazon EMR 5.18.0 版及更新版本) 包括解譯器的生命週期管理程式。使用 TimeoutLifecycleManager 設定以在達到指定的閒置逾時期間後終止解譯器:

1.    建立含有下列內容的 etc/zeppelin/conf/zeppelin-site.xml 檔案。在此範例中,逾時期間設為 120,000 毫秒 (2 分鐘)。選擇適用於您的環境的逾時值。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

<property>
  <name>zeppelin.interpreter.lifecyclemanager.class</name>
  <value>org.apache.zeppelin.interpreter.lifecycle.TimeoutLifecycleManager</value>
  <description>This is the LifecycleManager class for managing the lifecycle of interpreters. The interpreter terminates after the idle timeout period.</description>
</property>

<property>
  <name>zeppelin.interpreter.lifecyclemanager.timeout.checkinterval</name>
  <value>60000</value>
  <description>The interval for checking whether the interpreter has timed out, in milliseconds.</description>
</property>

<property>
  <name>zeppelin.interpreter.lifecyclemanager.timeout.threshold</name>
  <value>120000</value>
  <description>The idle timeout limit, in milliseconds.</description>
</property>
</configuration>

2.    執行下列命令以重新啟動 Zeppelin:

$ sudo stop zeppelin
$  sudo start zeppelin

Jupyter

選項 1: 手動關閉筆記本

工作完成後,在 Jupyter 使用者介面中使用下列其中一種方法停止核心:

  • 在 Jupyter 筆記本介面中,開啟「檔案」功能表,然後選擇「關閉並停止」。
  • 在 Jupyter 儀表板上,開啟「執行」索引標籤。針對您想要停止的筆記本選擇「關機」。

選項 2: 手動關閉核心

在 Jupyter 筆記本介面中,開啟「核心」功能表,然後選擇「關機」。

選項 3: 設定逾時屬性

如果您在關閉核心前關閉筆記本索引標籤或瀏覽器視窗,YARN 工作會繼續執行。若要防止這種情況發生,請設定 NotebookApp.shutdown_no_activity_timeout 屬性。即使您關閉索引標籤或瀏覽器視窗,此屬性也會在達到指定的閒置逾時期間後終止 YARN 工作。

請執行下列動作以設定 NotebookApp.shutdown_no_activity_timeout 屬性:

1.    開啟主節點上的 /etc/jupyter/jupyter_notebook_config.py 檔案,然後新增類似下列內容的項目。在此範例中,逾時屬性設為 120 秒。選擇適用於您的環境的逾時值。

c.NotebookApp.shutdown_no_activity_timeout = 120

2.    執行下列命令以重新啟動 jupyterhub

sudo docker stop jupyterhub
sudo docker start jupyterhub

相關資訊

Apache Zeppelin

在 Amazon EMR 上使用 Zeppelin 時的考量事項

Amazon EMR 上的 Jupyter 筆記本

AWS 官方
AWS 官方已更新 3 年前