【问题标题】:Two Spark structured streaming jobs cannot write to same base path两个 Spark 结构化流作业无法写入相同的基本路径
【发布时间】:2020-06-26 18:50:55
【问题描述】:

Spark 结构化流式处理不允许两个结构化流式处理作业将数据写入同一个基目录,这可以通过使用 dstreams 实现。

由于 _spark_metadata 目录将默认为一个作业创建,第二个作业不能使用与基本路径相同的目录,因为 _spark_metadata 目录已由其他作业创建,它会引发异常。

除了为这两个作业创建单独的基本路径之外,是否有任何解决方法。

是否可以在其他地方创建 _spark_metadata 目录或禁用而不丢失任何数据。

如果我必须更改这两个作业的基本路径,那么我的整个框架都会受到影响,所以我不想这样做。

【问题讨论】:

    标签: apache-spark spark-streaming spark-structured-streaming


    【解决方案1】:

    不,还不能更改元数据目录名称或位置。 您可以参考此link 了解更多信息。

    您能否详细说明为什么必须更改项目模型才能更改路径。路径是硬编码的吗?或者您是否以不会受到影响的特定方式读取这些数据?

    编辑 1:您可以在此处使用分区。例如,如果数据存储为镶木地板,则可以在基本路径中进行分区。您可以添加具有数据源的“src”列,例如 SW1 用于 Stream writer 1,SW2 用于 Stream Writer 2。

    这些将在 hdfs 中具有以下路径:

    1. /src=SW1
    2. /src=SW2

    现在您的每个作业都可以直接写入其对应的分区,而您的其他作业可以继续从基本路径读取。

    【讨论】:

    • 基本路径对所有作业都是通用的,有许多作业将从相同的基本路径(内部有多个子文件夹)读取数据。如果我必须更改一个结构化流作业的基本路径,那么我最终将更改许多其他将读取此数据的作业的基本路径。
    • 您可以在基本路径中创建两个分区,一个用于每种编写器作业。您的 writer 作业应该直接写入这些分区,并且仍然可以读取基本路径,而无需对 reader 作业进行任何修改。鉴于您的读取数据模型不是太死板。
    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 2019-09-02
    • 1970-01-01
    • 2018-12-12
    • 2021-11-21
    • 2016-05-30
    • 2019-10-07
    • 2021-11-17
    相关资源
    最近更新 更多