閱識風云是華為云資訊大咖,擅長將復雜資訊多元化呈現,其出品的一張圖(云圖說)、深入淺出的博文(云小課)或短視頻(云視廳)總有一款能讓您快速上手華為云,更多精彩內容請單擊此處,
摘要:Hudi是資料湖的檔案組織層,對Parquet格式檔案進行管理提供資料湖能力,支持多種計算引擎,
本文分享自華為云社區《【云小課】EI第39課 MRS基礎原理之Hudi介紹》,作者:Hello EI ,
Hudi是資料湖的檔案組織層,對Parquet格式檔案進行管理提供資料湖能力,支持多種計算引擎,提供IUD介面,在 HDFS的資料集上提供了插入更新和增量拉取的流原語,
Hudi結構
Hudi的架構如圖1-1所示,
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集成在Spark2x中,使用Hudi需要安裝Spark2x組件,并安裝Spark2x的客戶端,
- MRS集群的創建可參考MRS快速入門中的“創建集群”章節,例如購買MRS 3.1.0版本集群,
- 安裝Spark2x客戶端,可參考MRS用戶指南中的“安裝客戶端”章節,例如客戶端安裝目錄為:“/opt/client”,
- 安全模式(開啟Kerberos認證)集群,在使用Hudi時,需要創建一個具有訪問Hudi權限的用戶,可參考MRS用戶指南中的“創建用戶”章節,用戶組選擇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)更多功能吧!猛戳這里
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/522992.html
標籤:其他
上一篇:教你處理數倉慢SQL常見定位問題
下一篇:說說 Redis 事務
