在批量插入实验 中,在创建Hudi表时,做出了几个配置选择来优化未来对Hudi表的读写性能。在本节中,我们将深入解释一些关键的Hudi概念和操作,以帮助我们完全理解实验笔记本中的调优和配置选择。
Hudi批量插入执行以下步骤:
_hoodie_commit_time
)。hoodie.combine.before.insert
设置为true
(默认为false
),则对输入数据集进行重复数据删除。hoodie.bulkinsert.sort.mode
对数据集进行分区。hoodie.parquet.max.file.size
。Hudi自动尝试创建合适大小的文件(即使用hoodie.parquet.max.file.size
大小)。但是对于批量插入操作,我们需要调整批量插入创建的文件数量以获得合适的文件大小。
唯一性(必需) Hudi通过由记录键和分区路径组成的主键来唯一标识记录。这要求选择Hudi记录键,使得每个记录都有唯一的记录键值(至少在分区内)。
排序(可选) 如果记录键是单调递增的,Hudi可以在索引查找中执行范围裁剪 ,减少需要执行索引查找的文件数量。这可以显著提高索引查找性能,从而提高upsert性能。
Hudi写操作执行文件系统列表以获取数据集中分区和文件的当前视图。对于大型数据集,此列表操作可能会对性能产生负面影响。Hudi元数据表(默认启用)存储分区和文件的列表,以减少递归文件列表操作。
范围裁剪通过文件裁剪提高读写性能,当有有序记录键时:
范围裁剪效果最佳的是当文件具有非重叠的记录键范围时。
Hudi Parquet文件包含以下组件:
hoodie_min_record_key
和hoodie_max_record_key
的值,以了解记录是否可能位于文件中(范围裁剪)。如果可能存在,它继续检查存储在文件中的布隆过滤器(使用文件裁剪)。