Apache spark 修复spark结构化流中的检查点
当spark无法从\u spark\u元数据文件夹中找到文件时,我在生产中遇到了检查点问题Apache spark 修复spark结构化流中的检查点,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,当spark无法从\u spark\u元数据文件夹中找到文件时,我在生产中遇到了检查点问题 18/05/04 16:59:55 INFO FileStreamSinkLog: Set the compact interval to 10 [defaultCompactInterval: 10] 18/05/04 16:59:55 INFO DelegatingS3FileSystem: Getting file status for 's3u://data-bucket-prod/data/in
18/05/04 16:59:55 INFO FileStreamSinkLog: Set the compact interval to 10 [defaultCompactInterval: 10]
18/05/04 16:59:55 INFO DelegatingS3FileSystem: Getting file status for 's3u://data-bucket-prod/data/internal/_spark_metadata/19.compact'
18/05/04 16:59:55 ERROR FileFormatWriter: Aborting job null.
java.lang.IllegalStateException: s3u://data-bucket-prod/data/internal/_spark_metadata/19.compact doesn't exist when compacting batch 29 (compactInterval: 10)
已经有了一个解决方案,但目前还没有解决方案
在检查点文件夹中,我看到批处理29尚未提交,因此我可以从检查点的
源
、状态
和/或偏移量
中删除一些内容,以防止spark因缺少\u spark\u元数据/19.compact
文件而失败。问题是您正在将检查点存储到S3。S3中的检查点不是100%可靠的。阅读S3不可靠的确切原因
解决方案1:使用HDFS存储检查点
解决方案2:如果您想使用AmazonWeb服务,请使用EFS。提供设置EFS的所有详细步骤
解决方案3:使用NFS感谢您提供博客帖子的链接!然而,我们决定转向AWS Glue并使用他们的书签机制,因为问题是关于修复现有的检查点,而答案更多的是关于问题的原因和替代解决方案,所以Stead无法将其标记为正确答案。无论如何,修复现有检查点结构需要您更改AWS S3的行为是有用的。目前,Spark函数基于先读后写语义。所以“Spark首先将所有数据写入临时目录,只有在完成后才会尝试列出写入的目录,确保文件夹存在,然后才将检查点目录重命名为其真实名称。根据S3文档,在S3中的PUT操作之后列出目录最终是一致的,并且可能是导致检查点任务完全失败的偶发故障的原因。“不一致性导致了检查点问题,我的应用程序在启动后总是失败。有两种选择:1。修复检查点文件以排除导致失败的最新批或2。找出哪些文件已被处理但仍存在于源文件夹中,并将其删除,然后删除整个检查点文件夹。在从检查点文件中删除最后一批信息的一些实验之后,我决定使用第二个选项。现有的检查点没有修复。请关注最新更新。在此之前,人们应该将HDFS用作接收器&一个存储检查点的地方,然后最终将数据从HDFS复制到S3