flink sink 到hdfs文件系统

本文介绍如何使用 Apache Flink 将实时数据流写入 HDFS,并通过 StreamingFileSink 进行详细配置,包括设置检查点、文件滚动策略及分区策略等。

flink将数据保存到hdfs中,官网支持–StreamingFileSink

public class StreamFileSinkDemo {
    public static void main(String[] args)throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStreamSource<String> lines = env.socketTextStream("localhost", 8888);
        SingleOutputStreamOperator<String> upper = lines.map(String::toUpperCase);

        //然后建将官网写好的代码复制到这个平台
        String patha = "D:\\test\\out";

        //必须要设置,检查点10秒钟
        env.enableCheckpointing(10000);

		//指定分区分配策略,默认按每小时分桶
		BucketAssigner<String, String> assigner = new DateTimeBucketAssigner<>("yyyy-MM-dd", ZoneId.of("Asia/Shanghai"));
        StreamingFileSink<String> fileSink = StreamingFileSink.<String>forRowFormat(
                new Path("你的输出路径"),//hdfs-->"hdfs://198.16.1.23:9870/flink/"
                new SimpleStringEncoder<>("UTF-8"))//编码格式字符集
                .withRollingPolicy(
                        DefaultRollingPolicy.builder()//文件滚动策略
                                .withRolloverInterval(TimeUnit.MINUTES.toMillis(15))//至少包含 15 分钟的数据
                                .withInactivityInterval(TimeUnit.MINUTES.toMillis(5 ))//最近 5 分钟没有收到新的数据
                                .withMaxPartSize(1024 * 1024 * 1024)//文件大小已达到 1 GB
                                .build())
                .withBucketAssigner(assigner)//指定分桶策略
                .build();

        // 将record-->过滤上传数据-->转换成jsonstring-->写入到hdfs
        record.map(line->JSON.toJSONString(line)).addSink(fileSink);
        env.execute();
    }
}
--你在8888端口依次输入:
--我要保存在本地路:
--他就会在你的D:\\test\\下生成一个out文件夹,里面就有我们刚才输入的信息!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值