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

Spark context is created every time a batch job is executed in yarn

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

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

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

Have long running Spark Contexts that can be used for multiple Spark jobs, by multiple clients

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

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

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