Flink数据,写入HDFS - 使用 StreamingFileSink

一、应用场景:

Flink 消费 Kafka 数据进行实时处理,并将结果写入 HDFS。
在这里插入图片描述

二、Streaming File Sink

由于流数据本身是无界的,所以,流数据将数据写入到分桶(bucket)中。默认使用基于系统时间(yyyy-MM-dd–HH)的分桶策略。在分桶中,又根据滚动策略,将输出拆分为 part 文件。

1、Flink 提供了两个分桶策略,分桶策略实现了

org.apache.flink.streaming.api.functions.sink.filesystem.BucketAssigner 接口:

  • BasePathBucketAssigner,不分桶,所有文件写到根目录;
  • DateTimeBucketAssigner,基于系统时间(yyyy-MM-dd–HH)分桶。

除此之外,还可以实现BucketAssigner接口,自定义分桶策略。

2、Flink 提供了两个滚动策略,滚动策略实现了

org.apache.flink.streaming.api.functions.sink.filesystem.RollingPolicy 接口:

  • DefaultRollingPolicy 当超过最大桶大小(默认为 128 MB),或超过了滚动周期(默认为 60 秒),或未写入数据处于不活跃状态超时(默认为 60 秒)的时候,滚动文件;
  • OnCheckpointRollingPolicy 当 checkpoint 的时候,滚动文件。

在这里插入图片描述

三、编码。

1.pom文件具体依赖

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-filesystem_${
   scala.binary.version}</artifactId>
    <version>${
   flink.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-kafka_${
   scala.binary.version}</artifactId>
    <version>${
   flink.version}</version>

2.为了方便,我们这边使用Socket方式创建source

DataStreamSource<String> socketTextStream = FUtils.createSocketTextStream("cdh1", 13701);

3、添加Sink。

        DefaultRollingPolicy<String, String> defaultRollingPolicy 
  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值