当我在 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.    在用户名旁边的下拉列表中,选择 Interpreter(解释器)。

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 笔记本界面中,打开 File (文件)菜单,然后选择 Close and Halt(关闭并停止)。
  • 在 Jupyter 控制面板中打开运行选项卡。为您要停止的笔记本选择 Shutdown(关机)。

选项 2:手动关闭内核

在 Jupyter 笔记本界面中,打开 Kernel(内核)菜单,然后选择 Shutdown(关机)。

选项 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 Notebook

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