hadoop - 边缘节点上的 Spark 提交

标签 hadoop apache-spark hdfs hadoop-yarn

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

谢谢!

最佳答案

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

当您关闭 ssh 连接时,spark 作业终止,因为您在执行此操作时正在终止驱动程序,它正在您的终端 session 上运行。为避免这种情况,您必须在 spark-submit 末尾使用 & 将命令作为后台作业发送。例如:

spark-submit --master yarn --class foo bar zaz &

这会将驱动程序发送到后台,并且 stdout 将发送到您的 tty,污染您的 session 但不会在您关闭 ssh 连接时终止进程。 但是,如果您不希望它受到如此污染,您可以通过以下方式将 stdout 发送到 /dev/null:

spark-submit --master yarn --class foo bar zaz &>/dev/null &

但是您不会知道为什么会失败。您也可以将标准输出重定向到一个文件,而不是 /dev/null

最后,一旦这一点足够清楚,我强烈建议不要像这样部署你的 spark 作业,因为 edge node 中的驱动程序进程因任何奇怪的原因而失败都会终止在集群中运行的作业。它还有一个奇怪的行为,因为在集群中死亡的作业(一些运行时问题)不会停止也不会杀死你在边缘节点中的驱动程序,如果你不要手动处理那台机器中所有那些旧的驱动程序进程。 所有这一切都可以通过在您的 spark 提交中使用标志 --deploy-mode cluster 来避免。

关于hadoop - 边缘节点上的 Spark 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730820/

相关文章:

hadoop - Hive Protocol Buffer - 在 Hive 中创建表时出现 NullPointerException

apache-spark - Kubernetes WatchConnectionManager : Exec Failure: HTTP 403

hadoop - 尝试在Pig中使用Python UDF时无法存储别名C

hadoop - hadoop流作业无法报告?

hadoop - org.apache.hadoop.hbase.PleaseHoldException : Master is initializing

scala - 在 spark 代码中使用配置文件管理 conf.setMaster() 以自动设置本地或 yarn 集群

apache-spark - Hadoop客户端无法连接到datanode

database - 创建 Hive Metastore 数据库表错误

hadoop - 使用相同的mapreduce代码/jar启动多个mapreduce作业

java - KafkaUtils.createDirectStream 未采用正确的参数 - Spark Streaming + Kafka