更新时间:2026-06-13 GMT+08:00
分享

Hudi创建表参数简化指导

在Hudi中,MOR表和COW表的创建可以通过指定少量参数来简化配置。本章节将指导用户在创建MOR表和COW表时如何简化参数,通过这些简化配置,用户可以更方便地创建MOR表和COW表,同时确保读写性能和存储效率的优化。

约束限制

本章节仅支持MRS 3.6.0-LTS.1及之后版本。

Spark场景

  • MOR表
    create table hudi_mor(业务字段) using hudi options(
    type="mor",
    primaryKey="主键字段",
    hoodie.bucket.index.num.buckets="20"
    )

    MOR表只需要上述3个参数,它会自动补充以下参数去设置preCombineField属性为主键字段(联合主键会取第一个作为preCombineField)、设置索引为BUCKET、设置写入方式为LSM、设置Parquet文件的压缩格式为zstd以及开启Log文件的Log Index,这些能力会提升读写性能和存储优化。注意MOR表已经默认BUCKET索引,必须手动设置hoodie.bucket.index.num.buckets来指定桶数。上述建表语句实现的效果等价于:

    create table hudi_mor(业务字段) using hudi options(
    type="mor",
    primaryKey="主键字段",
    preCombineField="主键字段",
    hoodie.index.type="BUCKET",
    hoodie.bucket.index.num.buckets="20",
    hoodie.lsm.style="true",
    hoodie.parquet.compression.codec="zstd",
    hoodie.log.index.enable="true",
    hoodie.datasource.write.hive_style_partitioning="true"
    )
  • COW表
    create table hudi_cow(业务字段) using hudi options(
    primaryKey="主键字段"
    )

    COW表只需要上述1个参数,它自动补充以下参数去设置preCombineField属性为主键字段(联合主键会取第一个作为preCombineField)、设置索引为SIMPLE、设置Parquet文件的压缩格式为zstd。上述建表语句实现的效果等价于:

    create table hudi_cow(业务字段) using hudi options(
    type="cow",
    primaryKey="主键字段",
    preCombineField="主键字段",
    hoodie.index.type="SIMPLE",
    hoodie.parquet.compression.codec="zstd"
    )
  • Bulk Insert写入(数据纯新增写入,不更新存量)

    insert into和insert overwrite只需要在insert语句前set hoodie.datasource.write.operation=bulk_insert即可开启,效果等价于:

    set hoodie.datasource.write.operation=bulk_insert;
    set hoodie.bucket.support.bulk.insert=true;
    set hoodie.combine.before.insert=true;
    set hoodie.bulkinsert.sort.mode=NONE;
    insert into ......
  • 表服务托管

    如果MRS集群有LDMS服务,MOR表和COW表在建表时可以添加hoodie.managed.by.ldms="true",这些表的Compaction/Clean/Archive将由LDMS服务自己维护。

Flink场景

  • MOR表
    create table hudi_mor (业务字段)
    with (
    'connector'='hudi',
    'path' = 'hdfs://hacluster/tmp/hudi/stream_mor',
    'table.type'='MERGE_ON_READ',
    'hoodie.datasource.write.recordkey.field'='主键字段',
    'hoodie.bucket.index.num.buckets'='20',
    'hoodie.managed.by.ldms'='true',
    'hive_sync.enable' = 'true',
    'hive_sync.table' = '要同步到Hive的表名',
    'hive_sync.db' = '要同步到Hive的数据库名',
    'hive_sync.mode' = 'hms',
    'hive_sync.metastore.uris' = 'Hive客户端hive-site.xml文件中hive.metastore.uris的值',
    'properties.hive.metastore.kerberos.principal' = 'Hive客户端hive-site.xml文件中hive.metastore.kerberos.principal的值'
    )

    Flink写MOR表的场景,如果MRS集群有LDMS服务,则可以在Sink Hudi表的With属性里添加hoodie.managed.by.ldms配置(必须同时配置Hive同步),它会自动设置当前MOR表只生成Compaction计划并关闭Clean和Archive,交给LDMS服务来托管该表的Compaction/Clean/Archive维护操作。并且它还会自动补充以下参数去设置write.precombine.field属性为主键字段(联合主键会取第一个作为write.precombine.field)、设置索引为BUCKET、设置写入方式为LSM、设置Parquet文件的压缩格式为zstd以及开启Log文件的Log Index,这些能力会提升读写性能和存储优化。上述建表语句实现的效果等价于:

    create table hudi_mor (业务字段)
    with (
    'connector'='hudi',
    'path' = 'hdfs://hacluster/tmp/hudi/stream_mor',
    'table.type'='MERGE_ON_READ',
    'hoodie.datasource.write.recordkey.field'='主键字段',
    'write.precombine.field'='主键字段',
    'index.type'='BUCKET',
    'hoodie.bucket.index.num.buckets'='20',
    'hoodie.managed.by.ldms'='true',
    'hoodie.lsm.style'='true',
    'hoodie.parquet.compression.codec'='zstd',
    'hoodie.log.index.enable'='true',
    'hoodie.datasource.write.hive_style_partitioning'='true',
    'compaction.delta_commits'='10',
    'compaction.async.enabled'='false',
    'compaction.schedule.enabled'='true',
    'clean.async.enabled'='false',
    'hoodie.clean.automatic'='false',
    'hoodie.archive.automatic'='false',
    'hive_sync.enable' = 'true',
    'hive_sync.table' = '要同步到Hive的表名',
    'hive_sync.db' = '要同步到Hive的数据库名',
    'hive_sync.mode' = 'hms',
    'hive_sync.metastore.uris' = 'Hive客户端hive-site.xml文件中hive.metastore.uris的值',
    'properties.hive.metastore.kerberos.principal' = 'Hive客户端hive-site.xml文件中hive.metastore.kerberos.principal的值'
    )
  • COW表
    create table hudi_cow (业务字段,PRIMARY KEY (主键字段) NOT ENFORCED)
    with (
    'connector'='hudi',
    'path' = 'hdfs://hacluster/tmp/hudi/stream_cow',
    'hoodie.managed.by.ldms'='true',
    'hive_sync.enable' = 'true',
    'hive_sync.table' = '要同步到Hive的表名',
    'hive_sync.db' = '要同步到Hive的数据库名',
    'hive_sync.mode' = 'hms',
    'hive_sync.metastore.uris' = 'Hive客户端hive-site.xml文件中hive.metastore.uris的值',
    'properties.hive.metastore.kerberos.principal' = 'Hive客户端hive-site.xml文件中hive.metastore.kerberos.principal的值'
    )

    Flink写COW表的场景,如果MRS集群有LDMS服务,则可以在Sink Hudi表的With属性里添加hoodie.managed.by.ldms配置(必须同时配置Hive同步),它会自动关闭COW表的Clean和Archive,交给LDMS服务来托管该表的Clean和Archive维护操作。并且它还会自动补充以下参数去设置write.precombine.field属性为主键字段(联合主键会取第一个作为write.precombine.field)、设置索引为MEMORY、设置Parquet文件的压缩格式为zstd。上述建表语句实现的效果等价于:

    create table hudi_cow (业务字段,PRIMARY KEY (主键字段) NOT ENFORCED)
    with (
    'connector'='hudi',
    'path' = 'hdfs://hacluster/tmp/hudi/stream_cow',
    'write.operation' = 'upsert', --默认是更新模式,可设置为insert开启append模式
    'index.type' = 'MEMORY',
    'write.precombine.field'='主键字段',
    'hoodie.parquet.compression.codec'='zstd',
    'hoodie.managed.by.ldms'='true',
    'clean.async.enabled'='false',
    'hoodie.clean.automatic'='false',
    'hoodie.archive.automatic'='false',
    'hive_sync.enable' = 'true',
    'hive_sync.table' = '要同步到Hive的表名',
    'hive_sync.db' = '要同步到Hive的数据库名',
    'hive_sync.mode' = 'hms',
    'hive_sync.metastore.uris' = 'Hive客户端hive-site.xml文件中hive.metastore.uris的值',
    'properties.hive.metastore.kerberos.principal' = 'Hive客户端hive-site.xml文件中hive.metastore.kerberos.principal的值'
    )
  • Append模式写入(数据纯新增写入,不更新存量)

    Append模式写入就使用COW表,再搭配高性能小文件合并命令和LDMS来自动托管Clean/Archive。

    create table hudi_cow (业务字段,PRIMARY KEY (主键字段) NOT ENFORCED)
    with (
    'connector'='hudi',
    'path' = 'hdfs://hacluster/tmp/hudi/stream_cow',
    'write.operation' = 'insert',
    'hoodie.managed.by.ldms'='true',
    'hive_sync.enable' = 'true',
    'hive_sync.table' = '要同步到Hive的表名',
    'hive_sync.db' = '要同步到Hive的数据库名',
    'hive_sync.mode' = 'hms',
    'hive_sync.metastore.uris' = 'Hive客户端hive-site.xml文件中hive.metastore.uris的值',
    'properties.hive.metastore.kerberos.principal' = 'Hive客户端hive-site.xml文件中hive.metastore.kerberos.principal的值'
    )

相关文档