Flink 1.12.2 写入hdfs有3种方式,依照api出现的先后依次介绍,重点介绍Flink SQL on Hive的方式。
目录
3.2 配置Hive Catalog及使用Flink终端访问Hive
1 streaming file sink
1.7版Flink开始支持通过StreamingFileSink实现写入hdfs,支持exactly-once语义,基于checkpoint实现两阶段提交(即需要设置checkpoint)。一般应用于实时数仓、topic拆分、基于小时的分析处理等。
StreamingFileSink提供了2个写入API:
- forRowFormat方法,把读到的信息按照行存储的格式写入hdfs上,官网上有例子。
- forBulkFormat方法,指定其他的存储格式,例如:parquet,Avro,ORC等等。
Flink 提供了两个分桶策略:
- BasePathBucketAssigner,不分桶,所有文件写到根目录;
- DateTimeBucketAssigner,基于系统时间(yyyy-MM-dd–HH)分桶。
StreamingFileSink的滚动策略有2种,滚动策略实际上就是flink何时写文件的方式:
- (默认)滚动策略生成器DefaultRollingPolicy:当超过最大桶大小(默认为 128 MB),或超过了滚动周期(默认为 60秒),或未写入数据处于不活跃状态超时(默认为 60 秒)的时候,滚动文件;
- checkpoint滚动策略生成器OnCheckpointRollingPolicy: 当 checkpoint 的时候,滚动文件。
需要注意:
- Flink的分桶意义与HDFS不同,Flink的分桶指的是将文件放在不同的文件夹中,相当于HDFS分区的概念
- 当使用forRowFormat方法时,