写点什么

云小课|MRS 基础原理之 Hudi 介绍

  • 2022-10-28
    中国香港
  • 本文字数:1918 字

    阅读完需:约 6 分钟

云小课|MRS基础原理之Hudi介绍

本文分享自华为云社区《【云小课】EI第39课 MRS基础原理之Hudi介绍》,作者:Hello EI。



阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。


Hudi 是数据湖的文件组织层,对 Parquet 格式文件进行管理提供数据湖能力,支持多种计算引擎,提供 IUD 接口,在 HDFS 的数据集上提供了插入更新和增量拉取的流原语。


Hudi 结构


Hudi 的架构如下图所示:


Hudi 支持两种表类型

Copy On Write


写时复制表也简称 cow 表,使用 parquet 文件存储数据,内部的更新操作需要通过重写原始 parquet 文件完成。


  • 优点:读取时,只读取对应分区的一个数据文件即可,较为高效。

  • 缺点:数据写入的时候,需要复制一个先前的副本再在其基础上生成新的数据文件,这个过程比较耗时。且由于耗时,读请求读取到的数据相对就会滞后

Merge On Read


读时合并表也简称 mor 表,使用列格式 parquet 和行格式 Avro 两种方式混合存储数据。其中 parquet 格式文件用于存储基础数据,Avro 格式文件(也可叫做 log 文件)用于存储增量数据。


优点:由于写入数据先写 delta log,且 delta log 较小,所以写入成本较低。


缺点:需要定期合并整理 compact,否则碎片文件较多。读取性能较差,因为需要将 delta log 和 老数据文件合并。

Hudi 支持三种视图,针对不同场景提供相应的读能力

Snapshot View


实时视图:该视图提供当前 hudi 表最新的快照数据,即一旦有最新的数据写入 hudi 表,通过该视图就可以查出刚写入的新数据。


cow 表和 mor 均支持这种视图能力。

Incremental View


增量视图:该视图提供增量查询的能力,可以查询指定 COMMIT 之后的增量数据,可用于快速拉取增量数据。


cow 表支持该种视图能力, mor 表也可以支持该视图,但是一旦 mor 表完成 compact 操作其增量视图能力消失。

Read Optimized View


读优化视图:该视图只会提供最新版本的 parquet 文件中存储的数据。


该视图在 cow 表和 mor 表上表现不同:


  • 对于 cow 表,该视图能力和实时视图能力是一样的(cow 表只用 parquet 文件存数据)。

  • 对于 mor 表,仅访问基本文件,提供给定文件片自上次执行 compact 操作以来的数据, 可简单理解为该视图只会提供 mor 表 parquet 文件存储的数据,log 文件里面的数据将被忽略。 该视图数据并不一定是最新的,但是 mor 表一旦完成 compact 操作,增量 log 数据被合入到了 base 数据里面,这个时候该视图和实时视图能力一样。

如何使用 Hudi


目前 Hudi 集成在 MRS 集群的 Spark2x 服务中,使用 Hudi 需要安装 Spark2x 组件,并安装客户端。


  • MRS 集群的创建可参考创建集群,例如购买 MRS 3.1.0 版本集群。

  • 安装 Spark2x 客户端,可参考安装客户端,例如客户端安装目录为:“/opt/client”。

  • 安全模式(开启 Kerberos 认证)集群,在使用 Hudi 时,需要创建一个具有访问 Hudi 权限的用户,可参考创建用户,用户组选择 hadoop、hive 和 supergroup,主组选择 hadoop,角色选择 System_administrator,例如创建人机用户“testuser”。


  1. 使用 root 用户登录集群客户端节点,执行如下命令:cd /opt/client source bigdata_env source Hudi/component_env kinit testuser

  2. 执行以下命令进入 Spark SQL 命令行。spark-sql --master yarn

  3. 准备 Hive 数据表。drop table if exists hivetb_text; create table hivetb_text (id int, comb long, name string, dt date) row format delimited fields terminated by ',' stored as textfile; insert into hivetb_text values (3,301,'0003','2021-09-11'),(4,400,'0004','2021-09-11');

  4. 创建 Hudi Cow 分区表。drop table if exists hudi_test1; create table hudi_test1 (id int, comb long, name string, dt date) using hudi partitioned by (dt) options(type='cow',primaryKey='id', preCombineField='comb');

  5. 执行 insert,插入数据,并查询结果。insert into hudi_test1 values (1,100,'aaa','2021-08-28'),(2,200,'bbb','2021-08-28'); insert into hudi_test1 select 3,300,'ccc','2021-09-11'; select id,comb,dt,name from hudi_test1;

  6. 执行 update,更新数据,并查询结果。update hudi_test1 set name='0001' where id = 1; select id,comb,dt,name from hudi_test1;

  7. 执行 delete,删除数据,并查询结果。delete from hudi_test1 where id = 2; select id,comb,dt,name from hudi_test1;

  8. 执行 merge,写入增量数据,并查询结果。merge into hudi_test1 t1 using hivetb_text t2 on t1.id = t2.id when matched then update set id=t2.id, comb=t2.comb, name='aaaa', dt=t2.dt when not matched then insert *; select id,comb,dt,name from hudi_test1;


好了,本期云小课就介绍到这里,快去体验 MapReduce(MRS)更多功能吧!猛戳这里


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
云小课|MRS基础原理之Hudi介绍_大数据_华为云开发者联盟_InfoQ写作社区