更新时间:2024-07-24 GMT+08:00

调整Hudi数据源性能

本章节适用于MRS 3.3.1及以后版本。

HetuEngine具备高速访问Hive、Hudi等数据源的能力。对于Hudi数据源调优,可以分为对Hudi表本身和对集群环境的调优。

Hudi表调优

可参考如下建议优化表和数据设计:

  • 建表时尽量按照频繁使用的过滤条件字段进行分区。
  • 如果大部分查询场景均带有主键或主键子集的等值查询,建议使用bucket索引建表,并将查询字段作为分桶键。
  • 查询MOR表时,定期执行Compaction操作可使查询性能有较大的提升,可参考Compaction

集群环境调优

可以通过调整Yarn配置、集群节点资源配置、元数据缓存和动态过滤等策略对系统整体进行调优,可参考如下内容:

调优案例

某用户使用Hudi MOR表存储其设备的订单出借信息,可通过订单号查询订单详细信息,每天订单量相对稳定,部分节假日可能存在小高峰,该场景存在以下特点:

  • 订单号作为唯一值,并且80%以上的查询场景使用订单号进行等值查询,SQL形如select * from table where order_id = 'id1';
  • 每天订单量稳定,可采用天作为分区键。
  • 历史分区更新不频繁,主要数据更新在新分区。

调优建议:

  1. 使用Bucket索引建表(Spark-SQL),并且索引键为订单ID, 分区键为日期。
  2. 定期使用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')