flink提供了一个file system connector,可以使用DDL创建一个table,然后使用sql的方法将数据写入hdfs、local等文件系统,支持的写入格式包括json、csv、avro、parquet、orc。
一个最简单的DDL如下:
CREATE TABLE fs_table (
user_id STRING,
order_amount DOUBLE,
dt STRING,
h string,
m string
) PARTITIONED BY (dt,h,m) WITH (
'connector'='filesystem',
'path'='file:///tmp/abc',
'format'='orc'
);
下面我们简单的介绍一下相关的概念和如何使用。
滚动策略
| Key | Default | Type |
Description
|
|---|---|---|---|
| sink.rolling-policy.file-size |
128MB
|
MemorySize
|
分区文件的最大值,超过这个大小,将会启动一个新文件。 |
| sink.rolling-policy.rollover-interval | 30 m | Duration | 分区文件滚动的最大时间间隔,超过这个时间,将会新启动一个文件 |
| sink.rolling-policy.check-interval | 1 m | Duration | 一个时间间隔,定期去检查上面那个配置指定的策略下,文件是否应该滚动生成新文件. |
- 在写入列格式(比如parquet、orc)的时候,上述的配置和checkpoint的间隔一起来控制滚动策略,也就是说sink.rolling-policy.file-size、sink.rolling-policy.rollover-interval、checkpoint间隔,这三个选项,只要有一个条件达到了,然后就会触发分区文件的滚动,结束上一个文件的写入,生成新文件。
- 对于写入行格式的数据,比如json、csv,主要是靠sink.rolling-policy.file-size、sink.rolling-policy.rollover-interval,也就是文件的大小和时间来控制写入数据的滚动策略.
分区提交
在往一个分区写完了数据之后,我们希望做一些工作来通知下游。比如在分区目录写一个SUCCESS文件,或者是对于hive来说,去更新metastore的数据,自动刷新一下分区等等。
分区的提交主要依赖于触发器和提交的策略:
- 触发器:即什么时候触发分区的提交,
- 提交策略:也就是分区写完之后我们做什么,目前系统提供了两种内置策略:1.往分区目录写一个空SUCCESS文件;2.更新元数据.

本文介绍Flink中文件系统连接器的使用,包括滚动策略、分区提交、时间抽取和提交策略等内容,通过示例展示了如何配置写入格式、触发器及延迟,适用于HDFS、本地文件系统等。
最低0.47元/天 解锁文章
1253





