目录

0. 相关文章链接

1. 内存参数

2. MOR

3. COW


0. 相关文章链接

 Hudi文章汇总 

1. 内存参数

名称

说明

默认值

备注

write.task.max.size

一个 write task 的最大可用内存

1024

当前预留给 write buffer 的内存为

write.task.max.size -compaction.max_memory

当 write task 的内存 buffer达到阈值后会将内存里最大的 buffer flush 出去

write.batch.size

Flink 的写 task 为了提高写数据效率,会按照写 bucket 提前 buffer 数据,每个 bucket 的数据在内存达到阈值之前会一直 cache 在内存中,当阈值达到会把数据 buffer 传递给 hoodie 的 writer 执行写操作

256

一般不用设置,保持默认值就好

write.log_block.size

hoodie 的 log writer 在收到 write task 的数据后不会马上 flush 数据,writer 是以 LogBlock 为单位往磁盘刷数据的,在 LogBlock 攒够之前 records 会以序列化字节的形式 buffer 在 writer 内部

128

一般不用设置,保持默认值就好

write.merge.max_memory

hoodie 在 COW 写操作的时候,会有增量数据和 base file 数据 merge 的过程,增量的数据会缓存在内存的 map 结构里,这个 map 是可 spill 的,这个参数控制了 map 可以使用的堆内存大小

100

一般不用设置,保持默认值就好

compaction.max_memory

同 write.merge.max_memory: 100MB 类似,只是发生在压缩时。

100

如果是 online compaction,资源充足时可以开大些,比如 1GB

2. MOR

  • state backend 换成 rocksdb (默认的 in-memory state-backend 非常吃内存)
  • 内存够的话,compaction.max_memory 调大些 (默认是 100MB 可以调到 1GB)
  • 关注 TM 分配给每个 write task 的内存,保证每个 write task 能够分配到 write.task.max.size 所配置的大小,比如 TM 的内存是 4GB 跑了 2 个 StreamWriteFunction 那每个 write function 能分到 2GB,尽量预留一些 buffer,因为网络 buffer,TM 上其他类型 task (比如 BucketAssignFunction 也会吃些内存)
  • 需要关注 compaction 的内存变化,compaction.max_memory 控制了每个 compaction task 读 log 时可以利用的内存大小,compaction.tasks 控制了 compaction task 的并发

注意: write.task.max.size - compaction.max_memory 是预留给每个 write task 的内存 buffer

3. COW

  • state backend 换成 rocksdb(默认的 in-memory state-backend 非常吃内存)。
  • write.task.max.size 和 write.merge.max_memory 同时调大(默认是 1GB 和 100MB 可以调到 2GB 和 1GB)。
  • 关注 TM 分配给每个 write task 的内存,保证每个 write task 能够分配到 write.task.max.size 所配置的大小,比如 TM 的内存是 4GB 跑了 2 个 StreamWriteFunction 那每个 write function 能分到 2GB,尽量预留一些 buffer,因为网络 buffer,TM 上其他类型 task(比如 BucketAssignFunction 也会吃些内存)。

注意:write.task.max.size - write.merge.max_memory 是预留给每个 write task 的内存 buffer。