Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 修复spark结构化流中的检查点_Apache Spark_Spark Structured Streaming - Fatal编程技术网

Apache spark 修复spark结构化流中的检查点

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

当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/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