Flink 如何读取 kafka 数据后以 gzip 压缩格式写入hdfs?

Flink官方提供了 StreamingFileSink 用来写行或者列式数据到 hdfs,官方提供了 Row-encoded 和 Bulk-encoded 的例子,并分别以 String 类型和 parquet 类型提供了示例。
https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/connectors/streamfile_sink.html

但是如何只以 Gzip 格式将字符串写入 hdfs 呢?
下面的链接提供了对 Object 进行 Gzip 压缩写入hdfs的实现:
https://stackoverflow.com/questions/56474706/how-to-do-failure-tolerance-for-flink-to-sink-data-to-hdfs-as-gzip-compression
但是写入的文件用 zcat 读取时,会有部分乱码,这是因为ObjectOutputStream.writeObject()方法会先写入类信息,所以读取文件时也需要通过ObjectOutputStream类来读,才不会出现乱码,zcat应该是直接使用的 GZIPOutputStream 吧。
如何才能使用 zcat 读又不会出现乱码呢?我对上面的代码进行了一些修改:

使用 GZIPOutputStream.write 直接写入 String

public class GzipStringBulkWriter<T> implements BulkWriter<T> {
   

    private final GZIPOutputStream gzipOutputStream;
    //private final ObjectOutputStream objectOutputStream;

    public GzipStringBulkWriter(GZIPOutputStream gzipOutputStream) {
   
        //this.objectOutputStream = objectOutputStream;
        this.gzipOutputStream = gzipOutputStream;
    }

    @Override
    public void addElement(T t) throws IOException {
   
        //objectOutputStream.writeUTF(String.valueOf(t));
        // write String only
        gzipOutputStrea
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值