【问题标题】:spark submit on edge node在边缘节点上火花提交
【发布时间】:2017-03-12 01:28:03
【问题描述】:

我正在通过我的边缘节点提交我的 spark-submit 命令命令。为此,我正在使用客户端模式,现在我正在通过笔记本电脑访问我的边缘节点(与我的集群位于同一网络上)。我知道驱动程序在我的边缘节点上运行,我想知道的是,为什么当我关闭与边缘节点的 ssh 会话时,我的 spark-job 会自动挂起?通过 VPN/无线互联网打开 Edge Node putty 连接对 spark 作业与使用网络内的以太网电缆有任何影响吗?目前spark提交工作很慢,虽然集群真的很强大!请大家帮忙!

谢谢!

【问题讨论】:

    标签: hadoop apache-spark hdfs hadoop-yarn


    【解决方案1】:

    您正在使用--master yarn 提交作业,但您可能没有指定--deploy-mode cluster,因此驱动程序应用程序(您的Java 代码)在此边缘节点 机器上本地运行。选择 --deploy-mode cluster 时,驱动程序将在您的集群上运行,并且总体上会更加健壮。

    当您关闭ssh 连接时,火花作业会终止,因为您在执行此操作时正在杀死驱动程序,它正在您的终端会话中运行。为避免这种情况,您必须在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 作业,因为 edge 节点 中的驱动程序进程因任何奇怪的原因而失败都会杀死在集群中运行的作业。它还有一个奇怪的行为,因为集群中的工作死亡(一些运行时问题)不会停止也不会杀死 edge 节点中的驱动程序,如果你在该机器上浪费大量内存不要照顾手动杀死该机器中所有那些旧的驱动程序进程。 在您的 spark 提交中使用标志 --deploy-mode cluster 可以避免所有这些。

    【讨论】:

    • 非常感谢,这正是我想要的!我正在使用 --deploy-mode 客户端,我的集群非常强大。为什么我的 spark 作业仍然很慢?我知道只有驱动程序在我的边缘节点上运行,它是否也需要大量内存才能运行?谢谢!
    • 取决于大量内存对你来说意味着什么,对我来说,它们消耗的东西比我在这种机器上所能承受的要多。您应该检查为您的工作分配了多少资源,尝试分配更多的执行器/核心。还要检查你发送作业的纱线队列是否有一些资源限制阻碍你。
    • 谢谢!基本上我的边缘节点有 12 GB 内存,我为此和所有核心分配 10 GB。看起来可能内存太少了?我的本地机器上究竟处理了什么?
    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2017-02-26
    相关资源
    最近更新 更多