我想对无法在 Amazon EMR Notebook 中运行的 Apache Spark 应用程序进行故障排除。
简短描述
在 Amazon EMR Notebook 中运行的 Spark 应用程序可能无法启动并显示以下错误:
"The code failed because of a fatal error: Session 4 did not start up in 60 seconds."
解决方法
检查集群上的资源
确保 Spark 在集群中有足够的可用资源,以供 Jupyter 创建 Spark 上下文。要查看可用资源,请使用 Amazon CloudWatch 指标或资源管理器。
确保 Sparkmagic 库已正确配置
请联系您的 Jupyter 管理员,确保 Sparkmagic 库已正确配置。
重新启动 Notebook 内核
完成以下步骤:
- 打开 Amazon EMR 控制台。
- 在导航栏中,选择 Workspaces (Notebooks)。
- 从 Workspaces (Notebooks) 列表中选择工作区,然后选择 Quick Launch(快速启动)。或者从列表中选择工作区,然后选择 Attach(连接),再选择 Launch in JupyterLab(在 JupyterLab 中启动)或 Launch in Jupyter(在 Jupyter 中启动)。
- 选择 Kernel(内核),然后选择 Restart Kernel(重新启动内核)。
增加 JupyterLab 的 Spark 会话超时时间
完成以下步骤:
-
打开 Amazon EMR 控制台。
-
在导航栏中,选择 Workspaces (Notebooks)。
-
从 Workspaces (Notebooks) 列表中选择工作区,然后选择 Quick Launch(快速启动)。JupyterLab 编辑器会打开一个新的浏览器标签页。
-
打开 notebook terminal(Notebook 终端)。
-
运行以下命令打开 config.json 文件:
vi /home/notebook/.sparkmagic/config.json
**注意:**如果您在 Amazon EMR 主实例中安装了 JupyterHub 应用程序,请运行以下命令:
vi /etc/jupyter/conf/config.json
-
在 config.json 文件中添加或更新 livy_session_startup_timeout_seconds: ### 选项。
-
重新启动所有内核。
**注意:**如果您在 Amazon EMR 主实例中安装了 JupyterHub 应用程序,请重新启动 JupyterHub 容器。
调整 Spark 驱动程序内存
修改 Jupyter Notebook 应用程序所使用的 Spark 驱动程序内存,以便控制资源分配。有关更多信息,请参阅如何修改 Amazon EMR Studio Workspace 中的 Spark 配置?
确保 Livy 服务正常运行
检查在主节点实例上运行的 Livy 服务器的状态
完成以下步骤:
-
要检查 livy-server 的状态,请运行以下命令:
sudo systemctl status livy-server
-
如果服务器状态为关闭,则运行以下命令重新启动 livy-server:
sudo systemctl start livy-server
增加 Livy 服务器内存
默认情况下,Notebook 客户端尝试连接到 Apache Livy 服务器的时间为 90 秒。如果 Livy 服务器在 90 秒内没有响应,则客户端会生成超时。Livy 服务器无响应的最常见原因是资源不足。要解决此问题,请增加 Livy 服务器的内存。
完成以下步骤:
-
使用 SSH 连接到主节点实例。
-
将以下属性添加到 /etc/livy/conf/livy-env.sh 文件中:
export LIVY_SERVER_JAVA_OPTS="-Xmx8g" (option to your value)
-
重新启动 Livy 服务器。
sudo systemctl stop livy-server; sudo systemctl start livy-server
在 Livy 中使用集群模式而非客户端模式
当您使用客户端模式在 Notebook 上提交 Spark 应用程序时,Spark 驱动程序会作为 Livy 服务器的子进程运行。如果您运行子进程,则可能会遇到主节点上资源不足的问题。为防止因资源不足导致 Livy 出现故障,请将部署模式更改为集群模式。当您在集群模式下运行 Spark 应用程序时,驱动程序会在核心节点和任务节点上运行,而不是在主节点上运行。
完成以下步骤:
-
使用 SSH 连接到主节点。
-
将以下参数添加到 /etc/livy/conf/livy.conf 文件中:
livy.spark.deploy-mode cluster
-
重新启动 Livy 服务器:
sudo systemctl stop livy-server; sudo systemctl start livy-server