首页 > 解决方案 > 如何将 jar 附加到正在执行作业的 spark 集群?

问题描述

Spark 流式传输真的很棒。但是当我使用它时,我遇到了一个问题。

场景:我使用 Spark Streaming 来消费来自 Kafka 的消息。目前有两个主题,我对它们进行了硬编码。但这不利于可扩展性。

例如,如果有一个新主题,我需要为 parquet 模式定义一个 scala 类。然后停止运行的火花并再次启动火花。

我期待的是 spark 仍在运行,我可以添加新的 jar 库并通知 spark 在新 jar 中加载新类。因此 spark 可以消费新的主题消息并将相关的 parquet 写入 HDFS。

非常感谢您能给我一些建议。我搜索了动态加载,但问题是如何将新 jar 附加到现有正在运行的 spark 而不停止它。

先感谢您。

标签: javascalaapache-spark

解决方案


元数据是您案例的理想解决方案。您需要维护一个元数据服务,该服务由 spark 流应用程序用作其消费者的参考。

像这样的东西通过 REST API 暴露出来——

{
topicName: {},
schema: {},
outputPath:
}

并从自定义 SparkListener 实现中添加触发器。


推荐阅读