调整Hudi数据源性能
本章节适用于MRS 3.3.1及以后版本。
HetuEngine具备高速访问Hive、Hudi等数据源的能力。对于Hudi数据源调优,可以分为对Hudi表本身和对集群环境的调优。
Hudi表调优
可参考如下建议优化表和数据设计:
- 建表时尽量按照频繁使用的过滤条件字段进行分区。
- 如果大部分查询场景均带有主键或主键子集的等值查询,建议使用bucket索引建表,并将查询字段作为分桶键。
- 查询MOR表时,定期执行Compaction操作可使查询性能有较大的提升,可参考Compaction。
集群环境调优
可以通过调整Yarn配置、集群节点资源配置、元数据缓存和动态过滤等策略对系统整体进行调优,可参考如下内容:
- 调整Yarn配置可参考调整Yarn资源分配。
- 调整集群节点资源配置可参考调整HetuEngine集群节点资源配置。
- 调整元数据缓存配置可参考调整HetuEngine元数据缓存。
- 调整动态过滤配置可参考调整HetuEngine动态过滤。
调优案例
某用户使用Hudi MOR表存储其设备的订单出借信息,可通过订单号查询订单详细信息,每天订单量相对稳定,部分节假日可能存在小高峰,该场景存在以下特点:
- 订单号作为唯一值,并且80%以上的查询场景使用订单号进行等值查询,SQL形如select * from table where order_id = 'id1';
- 每天订单量稳定,可采用天作为分区键。
- 历史分区更新不频繁,主要数据更新在新分区。
调优建议:
- 使用Bucket索引建表(Spark-SQL),并且索引键为订单ID, 分区键为日期。
- 定期使用compaction合并日志,提高查询性能。
SQL示例:
set hoodie.compact.inline=true; set hoodie.schedule.compact.only.inline=true; set hoodie.run.compact.only.inline=false; create table hudi_mor (order_id int, comb int, col1 string, col2 string, dt int) using hudi partitioned by(dt) options(type='mor', primaryKey='order_id', preCombineField='comb', hoodie.index.type = 'BUCKET', hoodie.bucket.index.num.buckets=100, hoodie.bucket.index.hash.field = 'order_id')