flink读写filesystem

本文介绍了使用Flink SQL将数据写入Parquet格式的细节,包括配置文件系统、设置Parquet块大小和压缩方式。讨论了Parquet文件的生成规则,特别是小文件的优化,如自动合并小文件。总结了Flink在checkpoint时如何生成和合并Parquet文件,以及影响小文件优化的因素。此外,还提到了文件回滚的条件和文件可用的时间点。
摘要由CSDN通过智能技术生成

1 flink-sql写parquet格式

-

1 参考链接

Parquet | Apache Flink

ParquetOutputFormat - parquet-hadoop 1.10.0 javadoc

FileSystem | Apache Flink

注意: 多个链接要结合起来看

-

2 连接文件系统

CREATE TABLE test_fs_table (
  iid STRING,
  local_time TIMESTAMP,
  dt STRING,
  dh STRING
) PARTITIONED BY (dt,dh) WITH (
  'connector'='filesystem',
  'path'='out_path',
  'format'='parquet',
  'parquet.block.size'='128MB', -- 设定文件块大小
  'auto-compaction'='true', -- 开启自动合并小文件
  'compaction.file-size'='12MB', -- 合并文件大小
  'parquet.compression'='SNAPPY'  -- 指定压缩, 生成的文件名没有压缩类型标记
)

-

2 parquet文件生成规则

1) 数据量小, checkpoint内没超过parquet.block.size

2) 数据量较大, checkpoint内超过parquet.block.size

3) 文件回滚的条件

a.下个checkpoint来临

b.文件达到128M(parquet.block.size)

c.下个分区来临

-

3 小文件优化

影响因素:并行度、回滚时间、文件大小、checkpoint、compaction

1 flink-sql写parquet文件到

规则总结:

1)checkpoint时, 生成compact文件(立即可读), 下个checkpoint时删除uncompact(不可读)文件;

2) 只能合并单个checkpoint内的文件,不同checkpoint生成的文件是不会合并的;

3) 分区结束两个checkpoint后文件可用

参考链接:

Flink实战之合并小文件 - 简书

### Flink FileSystem 使用指南 #### 文件系统支持的协议 Flink 支持多种文件系统的访问,包括本地文件系统、HDFS以及其他分布式文件系统。对于这些不同类型的文件系统,可以通过指定路径前缀来区分不同的文件系统协议[^1]。 例如,在配置文件或程序中定义输出路径时可以如下设置: ```properties # Hadoop File System (HDFS) path example output.path: "hdfs://namenode-host:8020/user/flink/output" # Local file system path example output.path: "file:///tmp/flink-output" ``` #### 配置文件中的FileSystem参数设定 当涉及到具体的数据源读取或是数据写出到文件系统操作时,可以在`flink-conf.yaml`里进行相应的配置项调整以适应特定需求。比如要改变默认使用的文件系统实现类或者启用压缩功能等[^3]。 - **state.backend.fs.default-scheme**: 定义用于状态后端连接的目标文件系统的默认方案名,默认为空字符串表示使用URI本身携带的信息决定。 - **fs.hdfs.hadoopconf**: 当目标是HDFS时指向包含客户端配置文件(hdfs-site.xml, core-site.xml)目录的位置;如果未提供,则会尝试加载classpath下的资源作为替代。 #### 实际应用案例展示 下面给出一段Python代码片段展示了如何利用PyFlink API向文件系统写入数据流并保存为Parquet格式文件[^2]: ```python from pyflink.dataset import ExecutionEnvironment from pyflink.table import BatchTableEnvironment, TableConfig from pyflink.table.descriptors import Schema, OldCsv, FileSystem env = ExecutionEnvironment.get_execution_environment() t_config = TableConfig() t_env = BatchTableEnvironment.create(env, t_config) # 描述输入/输出模式 t_env.connect(FileSystem().path('/path/to/save')) \ .with_format(OldCsv() .field('word', 'string') .field_delimiter(',')) \ .with_schema(Schema() .field('word', 'STRING'))\ .register_table_sink('sink') ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值