每次在纱线中执行批处理作业时都会创建 Spark 上下文

Posted

技术标签:

【中文标题】每次在纱线中执行批处理作业时都会创建 Spark 上下文【英文标题】:Spark context is created every time a batch job is executed in yarn 【发布时间】:2021-10-04 03:57:01 【问题描述】:

我想知道,有什么方法可以让我在 YARN 集群中创建一次 spark-context,然后传入的作业将重新使用该上下文。在我的集群中,上下文创建需要 20 秒甚至更多时间。我正在使用 pyspark 编写脚本并使用 livy 提交作业。

【问题讨论】:

【参考方案1】:

一个选项是使用Apache Livy。 Livy 是 Yarn 集群中的附加服务器,它为想要在集群上运行 Spark 作业的客户端提供接口。 Livy 的特点之一是您可以

拥有可被多个客户端用于多个 Spark 作业的长时间运行的 Spark 上下文

如果客户端是用 Scala 或 Java 编写的,则可以使用 programmatic API:

LivyClient client = new LivyClientBuilder()....build();
Object result = client.submit(new SparkJob(sparkParameters)).get();

所有其他客户端都可以使用REST API。

【讨论】:

【参考方案2】:

不,你不能只在 Yarn 中运行一个常设的 SparkContext。也许另一个想法是在客户端模式下运行,客户端拥有自己的 SparkContext(这是 Apache Zeppelin 和 spark-shell 等工具使用的方法)。

【讨论】:

嗯。如果有某种机制可以在服务器上添加远程创建的驱动程序,同时提交作业。 ? 是的,应该可以创建一个接受查询并解释它们的应用程序。 Spark thrift-server 就是这样工作的。问题是你正在构建一个完整的应用程序来处理你想要做的事情。客户端模式更简单。

以上是关于每次在纱线中执行批处理作业时都会创建 Spark 上下文的主要内容,如果未能解决你的问题,请参考以下文章

如何创建触发器,以便每次帐户的所有者ID更改时都会创建事件?

为啥我的函数每次调用时都会创建一个新对象?

xcode 6.2 每次运行应用程序时都会创建一个新的模拟器路径

为啥在 Kubernetes cron 作业中可能会创建两个作业,或者可能不会创建作业?

如何在 Spark 中处理非常小的文件

Spark 执行器在 jdbc 源中没有增加