大佬们好,有用过1.15 FileSink DataStream api的合并小文件功能吗,我这里写文件用gz格式压缩,发现合并后的文件读不了。
Format
Type使用的是FileSink.forBulkFormat;BulkWriter.Factory使用的是CompressWriterFactory,使用gz压缩;合并文件的Compactor使用的是原生的ConcatFileCompactor。
以下是使用FileSink的相关代码:
CompressWriterFactory writer =
CompressWriters.forExtractor(new DefaultExtractor())
.withHadoopCompression("Gzip", new Configuration());
FileSink hdfsSink = FileSink.forBulkFormat(new Path("hdfs://xxxx"), writer)
.withBucketCheckInterval(60000)
.enableCompact(
FileCompactStrategy.Builder.newBuilder()
.setNumCompactThreads(1024)
.enableCompactionOnCheckpoint(3)
.build(),
new ConcatFileCompactor())
.build();
当压缩的小文件被合并后,发现这个被合并的文件不可读:
使用hdfs dfs -text
/xxxx/2022-08-03--13/compacted-part-00857a94-bf23-4ae7-a55b-d39c2fdca565-0.gz后
报错:text: invalid block type
请问是1.15 FileSink DataStream api目前是还不支持压缩文件的合并吗?还是我有什么地方用错了或者没注意到的?
感谢各位大佬抽空解答!