我有一个常见问题,即我启动 AWS EMR 集群并通过 SSH 登录,然后运行spark-shell
来测试一些 Spark 代码,有时我失去了互联网连接,Putty 会抛出连接丢失的错误。
但似乎与Spark相关的进程仍在运行。当我重新连接到服务器并再次运行spark-shell
时,我收到很多以下错误:
17/02/07 11:15:50 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container marked as failed: container_1486465722770_0002_01_000003 on host: ip-172-31-0-217.eu-west-1.compute.internal. Exit status: 1. Diagnostics: Exception from container-launch.
谷歌搜索此错误表明分配的内存存在问题,但由于我在测试集群上使用小节点,我什至不想分配更多内存,我只想释放使用的资源重新启动spark-shell
,但我没有看到任何"Spark"进程正在运行。
如何轻松解决此问题?我是否应该尝试关闭/重新启动其他进程,例如hadoop,mapred,yarn等?我不想每次遇到这种情况时都启动一个新集群。
你可以使用 Yarn api。SSH 到主控后,运行此
yarn application -list
以查看是否有应用程序正在运行。如果有,您可以使用此命令杀死它们:
yarn application -kill <application id>
还可以使用资源管理器 Web UI 执行相同的操作。(作为集群 EMR 页面首页上的链接提供(。
顺便说一句,您可以使用齐柏林飞艇来运行您在Spark-shell上运行的相同内容,而不必担心断开连接..它在EMR上可用(您需要在设置集群时选择它作为应用程序之一(。
学习如何正确使用和配置需要一些时间,但可能会对您有所帮助。