我通过我的边缘节点提交我的spark-submit命令命令。为此我使用客户端模式,现在我通过笔记本电脑访问我的边缘节点(与我的集群在同一网络上)。我知道驱动程序在我的边缘节点上运行,我想知道的是,当我关闭与边缘节点的ssh会话时,为什么我的spark-job会自动挂起?通过VPN /无线互联网打开Edge Node putty连接是否会对火花作业产生影响,而不是使用网络内的以太网电缆?目前火花提交工作非常缓慢,即使集群真的很强大!请帮忙!
谢谢!
答案 0 :(得分:2)
您正在使用--master yarn
提交作业,但可能未指定--deploy-mode cluster
,因此驱动程序应用程序(您的Java代码)在本边缘节点计算机上本地运行。选择--deploy-mode cluster
时,驱动程序将在您的群集上运行,并且总体上会更强大。
当您关闭ssh
连接时,spark作业会因为您在执行此操作时终止驱动程序而死亡,它正在您的终端会话上运行。为避免这种情况,您必须使用&
末尾的spark-submit
将该命令作为后台作业发送。例如:
spark-submit --master yarn --class foo bar zaz &
这会将驱动程序发送到后台,stdout
将被发送到您的tty,污染您的会话但不会在您关闭ssh
连接时终止该进程。
如果您不希望它被污染,可以通过这样做将stdout
发送到/dev/null
:
spark-submit --master yarn --class foo bar zaz &>/dev/null &
但是你不知道为什么事情会失败。您也可以将标准输出重定向到文件而不是/dev/null
。
最后,一旦明确这一点,强烈建议不要像这样部署你的火花作业,因为边缘节点中的驱动程序进程因任何时髦原因而失败将会终止在集群中运行的作业。它也有一个奇怪的行为,因为在集群中死亡的工作(某些运行时问题)不会停止也不会终止边缘节点中的驱动程序,这会导致该机器中的大量浪费内存不要小心手动杀死该机器中的所有旧驱动程序进程。
通过在spark提交中使用标记--deploy-mode cluster
可以避免所有这些。