- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 Spark Structured Streaming 实现了流应用程序,它尝试从 Kafka 主题读取数据并将其写入 HDFS 位置。
有时应用程序失败并出现异常:
_spark_metadata/0 doesn't exist while compacting batch 9
java.lang.IllegalStateException: history/1523305060336/_spark_metadata/9.compact doesn't exist when compacting batch 19 (compactInterval: 10)
我们无法解决此问题。
val df = spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", <server list>)
.option("subscribe", <topic>)
.load()
[...] // do some processing
dfProcessed.writeStream
.format("csv")
.option("format", "append")
.option("path",hdfsPath)
.option("checkpointlocation","")
.outputmode(append)
.start
最佳答案
错误信息
_spark_metadata/n.compact doesn't exist when compacting batch n+10
当你出现时可以出现
IllegalStateException
正在抛出,我们需要了解在提供的文件输出路径中幕后发生了什么。让
outPathBefore
是此路径的名称。当您的流作业正在运行并处理数据时,该作业会创建一个文件夹
outPathBefore/_spark_metadata
.在该文件夹中,您将找到一个以微批次标识符命名的文件,其中包含数据已写入的文件(分区文件)列表,例如:
/home/mike/outPathBefore/_spark_metadata$ ls
0 1 2 3 4 5 6 7
在这种情况下,我们有 8 个微批次的详细信息。其中一个文件的内容看起来像
/home/mike/outPathBefore/_spark_metadata$ cat 0
v1
{"path":"file:///tmp/file/before/part-00000-99bdc705-70a2-410f-92ff-7ca9c369c58b-c000.csv","size":2287,"isDir":false,"modificationTime":1616075186000,"blockReplication":1,"blockSize":33554432,"action":"add"}
默认情况下,每十个微批次,这些文件都会被压缩,这意味着文件 0、1、2、...、9 的内容将存储在名为
9.compact
的压缩文件中。 .
/home/mike/outPathBefore/_spark_metadata/0
/home/mike/outPathBefore/_spark_metadata/1
...
/home/mike/outPathBefore/_spark_metadata/8
/home/mike/outPathBefore/_spark_metadata/9.compact
/home/mike/outPathBefore/_spark_metadata/10
...
/home/mike/outPathBefore/_spark_metadata/15
在第十五个微批处理之后,您停止了流式作业并将文件接收器的输出路径更改为
outPathAfter
.当您保持相同的 checkpointLocation 时,流作业将继续使用 micro-batch 16。但是,它现在在新的输出路径中创建元数据文件:
/home/mike/outPathAfter/_spark_metadata/16
/home/mike/outPathAfter/_spark_metadata/17
...
现在,这就是抛出异常的地方:当达到微批次 19 时,该作业会尝试压缩 spark 元数据文件夹中的第 10 个最新文件。但是,它只能找到文件 16, 17, 18 但它没有找到 9.compact, 10 等。因此错误消息说:
java.lang.IllegalStateException: history/1523305060336/_spark_metadata/9.compact doesn't exist when compacting batch 19 (compactInterval: 10)
文档
"Changes to output directory of a file sink are not allowed: sdf.writeStream.format("parquet").option("path", "/somePath") to sdf.writeStream.format("parquet").option("path", "/anotherPath")"
关于scala - 非法状态异常 : _spark_metadata/0 doesn't exist while compacting batch 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56390492/
我正在使用 Spark Structured Streaming 的流式查询使用以下代码将 Parquet 文件写入 S3: ds.writeStream().format("parquet").ou
我们使用 Spark Structured Streaming 实现了流应用程序,它尝试从 Kafka 主题读取数据并将其写入 HDFS 位置。 有时应用程序失败并出现异常: _spark_metad
我的结构化流应用程序正在写入 parquet,我想摆脱它创建的 _spark_metadata 文件夹。我使用了下面的属性,看起来不错 --conf "spark.hadoop.parquet.ena
我正在 EMR 5.11.1、Spark 2.2.1 中构建一个 Kafka 摄取模块。我的意图是使用结构化流从 Kafka 主题中消费,进行一些处理,并以 parquet 格式存储到 EMRFS/S
我是一名优秀的程序员,十分优秀!