2024年Flink之FileSink将数据写入parquet文件_flink写parquet文件(3)

    env.enableCheckpointing(30000);
    // 两次checkpoint间隔最少是20秒
    env.getCheckpointConfig().setMinPauseBetweenCheckpoints(20000);
    // 程序取消或者停止时不删除checkpoint
    env.getCheckpointConfig().setExternalizedCheckpointCleanup(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN\_ON\_CANCELLATION);
    // checkpoint必须在60秒结束,否则将丢弃
    env.getCheckpointConfig().setCheckpointTimeout(60000);
    // 同一时间只能有一个checkpoint
    env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
    // 设置EXACTLY\_ONCE语义,默认就是这个
    env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY\_ONCE);
    // checkpoint存储位置
    env.getCheckpointConfig().setCheckpointStorage("file:///Users/xxx/data/testData/checkpoint");
    
    // 添加数据源(这里使用的是自定义数据源CustomizeSource,方便测试)
    DataStreamSource<CustomizeBean> sourceStream = env.addSource(new CustomizeSource());
    // 将数据流中的数据存储到bean对象中
    SingleOutputStreamOperator<User> userMapStream = sourceStream.map(bean -> new User(bean.getName(), bean.getAge(), bean.getGender(), bean.getHobbit()));
    // 构建parquetWriterFactory
    ParquetWriterFactory<User> parquetWriterFactory2 = AvroParquetWriters.forReflectRecord(User.class);
    // 构建FileSink
    FileSink<User> parquetFileSink = FileSink
            // 使用Bulk模式,并配置路径和对应的schema
            .forBulkFormat(new Path("/Users/xxx/data/testData/"), parquetWriterFactory2)
            // 分桶策略,使用默认的
            .withBucketAssigner(new DateTimeBucketAssigner<User>())
            // 每100毫秒检查一次分桶
            .withBucketCheckInterval(100)
            // 滚动策略,Bulk的滚动策略只有一种,就是发生Checkpoint的时候才进行滚动(为了保证列式文件的完整性)
            .withRollingPolicy(OnCheckpointRollingPolicy.build())
            .build();
    // 输出到文件
    userMapStream.sinkTo(parquetFileSink);
    env.execute();

}

}

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值