如何更改_spark_metadata目录的位置?

时间:2018-06-13 23:06:40

标签: apache-spark amazon-s3 parquet spark-structured-streaming

我使用Spark Structured Streaming的流式查询使用以下代码将镶木地板文件写入S3:

ds.writeStream().format("parquet").outputMode(OutputMode.Append())
                .option("queryName", "myStreamingQuery")
                .option("checkpointLocation", "s3a://my-kafka-offset-bucket-name/")
                .option("path", "s3a://my-data-output-bucket-name/")
                .partitionBy("createdat")
                .start();

我在s3存储桶my-data-output-bucket-name中获得了所需的输出,但随着输出,我得到了_spark_metadata文件夹。如何摆脱它?如果我无法摆脱它,如何将它的位置更改为不同的S3存储桶?

1 个答案:

答案 0 :(得分:6)

我的理解是,Spark 2.3可以

  1. 元数据目录的名称始终为_spark_metadata

  2. _spark_metadata目录始终位于path选项指向的位置

  3. 我认为“修复”它的唯一方法是在Apache Spark's JIRA中报告问题,并希望有人会选择它。

    塔内

    流程是DataSource请求流式查询的create the sink并采用path选项。有了它,它就会创建一个FileStreamSinkpath选项只会成为写入结果的basePath以及元数据。

    您可以找到initial commit对于理解元数据目录的用途非常有用。

      

    为了在保持一次语义的同时正确处理部分失败,每个批处理的文件都写出到一个唯一的目录,然后原子地附加到元数据日志中。当基于DataSource的镶木地板被初始化以供阅读时,我们首先检查此日志目录并在存在时使用它而不是文件列表。