首页 > 解决方案 > 从 Flink BucketingSink 生成的有效长度文件中恢复压缩文件

问题描述

我正在使用 Flink BucketingSink 的自定义 Gzip 压缩编写器在 hdfs 上编写压缩文本文件。我想确保水槽是一次性的。在我的情况下,hadoop < 2.7,如果作业有时失败,BucketingSink 将生成一个有效长度文件,记录该文件的有效字节长度。截断纯文本文件很容易,但 gzip 压缩文件有很大不同,将文件截断到有效长度会损坏 gzip。但是使用 bash 应用程序“zcat”可以在不验证格式和 crc32 的情况下显示数据。

但是为了将gz文件恢复为有效,现在我需要一些步骤:1.下载所有失败的gz文件2.按有效长度截断它们。3. zcat 截断的 gz 文件并重定向到一个文本文件。4.使用gzip重新压缩文本文件。5.将修改后的文件上传到hdfs

该方法非常慢,因为我可能有数百个文件来完成这些工作。有什么好主意来做我的工作吗?我认为一些并行分布式方法可能有效。

标签: gzipapache-flink

解决方案


推荐阅读