表類型
寫時(shí)復(fù)制(Copy On Write):
僅使用列式文件格式(parquet惦积,基本文件)存儲數(shù)據(jù)。通過在寫入過程中執(zhí)行同步合并并鸵,僅更新版本并重寫新文件苇倡。讀時(shí)合并(Merge On Reader):
使用列式文件格式(parquet,基本文件)+基于行(例如avro审姓,增量文件)的文件格式的組合來存儲數(shù)據(jù)珍特。更新記錄到增量文件中,然后壓縮以同步或異步生成新的列式文件格式魔吐。
查詢類型
- 快照查詢(實(shí)時(shí)查詢):查詢給定提交或壓縮操作中表的最新快照扎筒。如果讀時(shí)合并表,它將通過即時(shí)合并最新文件切片的基本文件和增量文件來公開近乎實(shí)時(shí)的數(shù)據(jù)(幾分鐘)酬姆。對于寫時(shí)復(fù)制表嗜桌,它提供了對現(xiàn)有parquet的直接替換,同時(shí)提供了update/delete和其他寫入方面的功能辞色。
- 增量查詢:通過給定的提交/壓縮骨宠,可看到該提交/壓縮后寫入表的新數(shù)據(jù)。這有效地提供了更改流,提供一種增量查詢的通道去查詢數(shù)據(jù)层亿。
- 讀優(yōu)化查詢:查詢給定提交/壓縮操作中表的最新快照桦卒。與非Hudi柱狀表相比,僅公開最新文件片中的基本/列文件匿又,并保證相同的柱狀查詢性能方灾。
下表總結(jié)了不同查詢類型之間的權(quán)衡。
權(quán)衡 | 快照查詢(實(shí)時(shí)查詢) | 讀優(yōu)化查詢 |
---|---|---|
數(shù)據(jù)延遲 | 更低 | 更高 |
查詢延遲 | 更高(合并列式 + 基于行的增量) | 更低(原始列式性能) |
查詢Hudi數(shù)據(jù)集
具體來說碌更,在寫入過程
中指定兩個(gè)表類型的hudi表迎吵。創(chuàng)建hive表時(shí)指定STORED AS INPUTFORMAT
參數(shù)創(chuàng)建不同的_ro/_rt表。
如果 table name = hudi_trips 并且 table type = COPY_ON_WRITE, 我們將會看到:
-
hudi_trips
支持設(shè)置HoodieParquetInputFormat
的表上進(jìn)行快照查詢和增量查詢针贬,從而提供純列式數(shù)據(jù)(中文文檔:稱實(shí)時(shí)表击费,不建議)。
如果 table name = hudi_trips 并且 table type = MERGE_ON_READ, 我們將會看到:
-
hudi_trips_ro
支持設(shè)置HoodieParquetInputFormat
的表上進(jìn)行讀優(yōu)化查詢桦他,從而提供了純列式數(shù)據(jù)(中文文檔:稱讀優(yōu)化表蔫巩,不建議)。 -
hudi_trips_rt
支持設(shè)置HoodieParquetRealtimeInputFormat
的表上進(jìn)行快照查詢(實(shí)時(shí)查詢)和增量查詢(準(zhǔn)實(shí)時(shí)的數(shù)據(jù))快压,從而提供了基礎(chǔ)文件和日志文件的合并查詢(中文文檔:稱實(shí)時(shí)表圆仔,不建議)。
查詢引擎
下面的表格展示了各查詢引擎支持的查詢類型
- 寫時(shí)復(fù)制表
查詢引擎 | 快照查詢(實(shí)時(shí)查詢) | 增量查詢 |
---|---|---|
Hive | Y | Y |
Spark SQL | Y | Y |
Spark Datasource | Y | Y |
Presto | Y | N |
Impala | Y | N |
注意:寫時(shí)復(fù)制表不支持讀優(yōu)化查詢蔫劣。
- 讀時(shí)合并表
查詢引擎 | 快照查詢(實(shí)時(shí)查詢) | 增量查詢 | 讀優(yōu)化查詢 |
---|---|---|---|
Hive | Y | Y | Y |
Spark SQL | Y | Y | Y |
Spark Datasource | N | N | Y |
Presto | N | N | Y |
Impala | N | N | Y |
Hive中查詢
為了讓Hive識別Hudi表并正確查詢:
HiveServer2需要
hudi-hadoop-mr-bundle-x.y.z-SNAPSHOT.jar
在其輔助jar路徑中提供坪郭。這將確保inputformat類及其依賴項(xiàng)可用于查詢和執(zhí)行。對于MERGE_ON_READ表脉幢,還需要將該捆綁軟件放在整個(gè)集群的hadoop / hive安裝中歪沃,以便查詢也可以選擇自定義RecordReader。(嫌松?沪曙??沒理解透徹)
除了上述設(shè)置之外萎羔,對于beeline cli訪問液走,需要將變量hive.input.format設(shè)置為標(biāo)準(zhǔn)路徑名org.apache.hudi.hadoop.HoodieParquetInputFormat。對于Tez贾陷,還需要將hive.tez.input.format設(shè)置為org.apache.hadoop.hive.ql.io.HiveInputFormat缘眶。然后像其他任何Hive表一樣繼續(xù)查詢該表。
增量拉人璺稀(目前好像只能通過jdbc方式完成)
HiveIncrementalPuller允許通過HiveQL從大型事實(shí)/維表中增量提取更改巷懈, 結(jié)合了Hive(可靠地處理復(fù)雜的SQL查詢)和增量原語的好處(通過增量拉取而不是完全掃描來加快查詢速度)。 該工具使用Hive JDBC運(yùn)行hive查詢并將其結(jié)果保存在臨時(shí)表中瓦哎,這個(gè)表可以被插入更新砸喻。 Upsert實(shí)用程序(HoodieDeltaStreamer)具有目錄結(jié)構(gòu)所需的所有狀態(tài)柔逼,以了解目標(biāo)表上的提交時(shí)間應(yīng)為多少。 例如:/app/incremental-hql/intermediate/{source_table_name}temp/{last_commit_included}割岛。 已注冊的Delta Hive表的格式為{tmpdb}.{source_table}{last_commit_included}愉适。
關(guān)于大數(shù)據(jù)方面技術(shù)問題可以咨詢,替你解決你的苦惱癣漆。微信 hainanzhongjian