更新时间:2024-12-11 GMT+08:00

配置Doris对接Hudi数据源

在MRS集群元数据存储在Hive MetaStore的场景中,Doris 2.0.13版本支持通过Catalog的方式对接Hudi 0.15.0版本数据源,支持对接Hudi所有的数据字段类型。

Doris支持查询的Hudi表类型

Doris支持的Hudi表类型和对应的查询类型如下:

  • COW表:支持Snapshot Query和TimeTravel Query。
  • MOR表:支持Snapshot Query、TimeTravel Query和Read Optimized Query。

以下操作以使用TimeTravel Query查询Hudi COW表为例进行演示。

  1. 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。

    集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:

    export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1

    mysql -u数据库登录用户 -p -PFE查询连接端口 -hDoris FE实例IP地址

    执行命令后输入数据库登录用户密码。

    • Doris FE的查询连接端口,可以通过登录Manager,选择“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
    • Doris FE实例IP地址可通过登录MRS集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
    • 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。

  2. 参考3创建Hudi Catalog,例如:hudi_catalog。
  3. 参考1在MySQL客户端连接Doris,执行以下命令切换到2创建的Hudi Catalog:

    switch hudi_catalog;

  4. 执行以下命令查看创建的Hudi表:

    refresh catalog hudi_catalog;

    use 数据库名称;

    show tables;

  5. 执行以下命令使用TimeTravel Query查看某个时间之前插入的表数据:

    select * from hudi_cow for time as of '20240409162842365' where id = 1;

Doris on Hudi查询加速

Doris on Hudi支持以下方式的查询加速:

  • Doris支持Hudi Parquet表的Bucket Shuffle Join操作

    Doris支持使用Bucket Shuffle Join对Hudi数据源查询进行加速,当前支持对Hudi所有字段类型及存储在OBS上的Hudi表进行该操作。该功能由session级别变量“enable_hudi_bucket_shuffle” 控制是否启用,默认关闭,可通过连接Doris后执行set enable_hudi_bucket_shuffle=true;命令开启。

    • 在等值Join条件之中包含两张表的分桶列,当左表的分桶列为等值的Join条件时,很大概率会被规划为Bucket Shuffle Join。
    • 左表的分桶列的类型与右表等值Join列的类型需要保持一致。
    • Bucket Shuffle Join功能只生效于等值Join的场景。
    • Bucket Shuffle Join功能只能在左表为单分区时生效。
    • 支持参与Join的两张表,一张是Hudi表,一张是Doris内部表。
  • Doris支持Hudi的隐式分区功能(受限特性)

    Doris支持Hudi的隐式分区功能以进行查询加速。该功能由变量“enable_hudi_hidden_partition”控制是否启用,默认关闭,可通过连接Doris后执行ADMIN SET FRONTEND CONFIG ("enable_hudi_hidden_partition" = "true");命令开启。

  • Doris支持对Hudi表进行桶裁剪(受限特性)

    Doris支持对Hudi表进行桶裁剪以进行查询加速。该功能由变量“enable_hudi_bucket_prunning”控制是否启用,默认关闭,可通过连接Doris后执行ADMIN SET FRONTEND CONFIG ("enable_hudi_bucket_prunning" = "true");命令开启。

  1. 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。

    集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:

    export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1

    mysql -u数据库登录用户 -p -PFE查询连接端口 -hDoris FE实例IP地址

    执行命令后输入数据库登录用户密码。

    • Doris FE的查询连接端口,可以通过登录Manager,选择“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
    • Doris FE实例IP地址可通过登录MRS集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
    • 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。

  2. 参考3创建Hudi Catalog,例如:hudi_catalog。
  3. 参考1在MySQL客户端连接Doris,执行以下命令切换到Hudi Catalog:

    switch hudi_catalog;

  4. 执行以下命令查看创建的Hudi表:

    refresh catalog hudi_catalog;

    use 数据库名称;

    show tables;

  5. 执行以下命令开启Doris on Hudi查询加速,并进行查询:

    • 开启Bucket Shuffle Join并进行查询。

      仅支持Hudi的Bucket索引表,即待查询的Hudi表属性包含hoodie.index.type='BUCKET'hoodie.bucket.index.num.buckets='xxx'hoodie.bucket.index.hash.field='xxx'

      set enable_hudi_bucket_shuffle = true;

      select t1.name, t2.age from hudi_testt1 t1, hudi_testt2 t2 where t1.id=t2.id;

      可执行以下命令查看是否命中Bucket Shuffle Join:

      explain select t1.name, t2.age from hudi_testt1 t1, hudi_testt2 t2 where t1.id=t2.id;

      在执行结果中查看是否存在BUCKET_SHUFFLE关键字,如果存在,则表示本次查询命中了Bucket Shuffle Join。

    • 开启Hudi表的隐式分区功能,并进行查询。

      仅支持Hudi隐式分区表,即待查询的Hudi表属性包含hoodie.hidden.partitioning.rule = 'xxx'hoodie.hidden.partitioning.enabled = 'true'

      ADMIN SET FRONTEND CONFIG ("enable_hudi_hidden_partition" = "true");

      select * from hudi1 where col0 like '%2';

    • 开启Hudi表的桶裁剪功能,并进行查询。

      仅支持Hudi的Simple Bucket索引表,即待查询的Hudi表属性包含hoodie.index.type='BUCKET'hoodie.bucket.index.num.buckets='xxx'hoodie.bucket.index.hash.field='xxx'hoodie.index.bucket.engine = 'SIMPLE'hoodie.metadata.index.column.stats.enable = 'true'

      ADMIN SET FRONTEND CONFIG ("enable_hudi_bucket_prunning" = "true");

      select * from hudi_cow_tbl where id > 1 and id < 3;