1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Copy On Write 写时复制表中的文件片,仅包含基本列文件,每次提交都会生成新版本的基本文件 此存储类型使客户端能够以列式文件格式(当前为parquet)摄取数据 使用COW存储类型时,任何写入Hudi数据集的新数据都将写入新的parquet文件 更新现有的行将导致重写整个parquet文件(这些parquet文件包含要更新的受影响的行) 因此,所有对此类数据集的写入都受parquet写性能的限制,parquet文件越大,摄取数据所花费的时间就越长
Merge On Read 读时合并表,仅通过最新版本的数据文件来支持读取查询 此存储类型使客户端可以快速将数据摄取为基于行(如avro)的数据格式 使用MOR存储类型时,任何写入Hudi数据集的新数据都将写入新的日志/增量文件,这些文件在内部将数据以avro进行编码 压缩(Compaction)过程(配置为嵌入式或异步)将日志文件格式转换为列式文件格式(parquet)
如果满足以下条件,则选择写时复制(COW)存储: 寻找一种简单的替换现有的parquet表的方法,而无需实时数据 当前的工作流是重写整个表/分区以处理更新,而每个分区中实际上只有几个文件发生更改 想使操作更为简单(无需压缩等),并且摄取/写入性能仅受parquet文件大小以及受更新影响文件数量限制 工作流很简单,并且不会突然爆发大量更新或插入到较旧的分区 COW写入时付出了合并成本,因此,这些突然的更改可能会阻塞摄取,并干扰正常摄取延迟目标
如果满足以下条件,则选择读时合并(MOR)存储: 希望数据尽快被摄取并尽可能快地可被查询 工作负载可能会突然出现模式的峰值/变化(例如,对上游数据库中较旧事务的批量更新导致对DFS上旧分区的大量更新) 异步压缩(Compaction)有助于缓解由这种情况引起的写放大,而正常的提取则需跟上上游流的变化
|