大數(shù)據(jù)Hadoop之——Apache Hudi 數(shù)據(jù)湖實(shí)戰(zhàn)操作(Spark,F(xiàn)link與Hudi整合)
一、概述
Hudi(Hadoop Upserts Deletes and Incrementals)?,簡稱?Hudi?,是一個流式數(shù)據(jù)湖平臺,支持對海量數(shù)據(jù)快速更新,內(nèi)置表格式,支持事務(wù)的存儲層、 一系列表服務(wù)、數(shù)據(jù)服務(wù)(開箱即用的攝取工具)以及完善的運(yùn)維監(jiān)控工具,它可以以極低的延遲將數(shù)據(jù)快速存儲到HDFS或云存儲(S3)的工具,最主要的特點(diǎn)支持記錄級別的插入更新(Upsert)和刪除,同時還支持增量查詢。
GitHub地址:https://github.com/apache/hudi
官方文檔:https://hudi.apache.org/cn/docs/overview
關(guān)于Apache Hudi 數(shù)據(jù)湖 也可以參考我這篇文章:大數(shù)據(jù)Hadoop之——新一代流式數(shù)據(jù)湖平臺 Apache Hudi
二、Hudi CLI
構(gòu)建hudi后,可以通過cd hudi cli&&./hudi-cli.sh啟動shell。一個hudi表駐留在DFS上的一個稱為basePath的位置,我們需要這個位置才能連接到hudi表。Hudi庫有效地在內(nèi)部管理此表,使用.hoodie子文件夾跟蹤所有元數(shù)據(jù)。
編譯生成的包如下:
三、Spark 與 Hudi 整合使用
Hudi 流式數(shù)據(jù)湖平臺,協(xié)助管理數(shù)據(jù),借助HDFS文件系統(tǒng)存儲數(shù)據(jù),使用Spark操作數(shù)據(jù)。
Hadoop 安裝可參考我這篇文章:大數(shù)據(jù)Hadoop原理介紹+安裝+實(shí)戰(zhàn)操作(HDFS+YARN+MapReduce)?Hadoop HA安裝可參考我這篇文章:大數(shù)據(jù)Hadoop之——Hadoop 3.3.4 HA(高可用)原理與實(shí)現(xiàn)(QJM)Spark 環(huán)境配置可以參考我這篇文章:大數(shù)據(jù)Hadoop之——計算引擎Spark
1)Spark 測試
2)Spark 與 Hudi 整合使用
官方示例:https://hudi.apache.org/docs/quick-start-guide/在spark-shell命令行,對Hudi表數(shù)據(jù)進(jìn)行操作,需要運(yùn)行spark-shell命令是,添加相關(guān)的依賴包,命令如下:
1、啟動spark-shell
【第一種方式】在線聯(lián)網(wǎng)下載相關(guān)jar包
【第二種方式】離線使用已經(jīng)下載好的jar包
2、導(dǎo)入park及Hudi相關(guān)包
3、定義變量
4、模擬生成Trip乘車數(shù)據(jù)
其中,DataGenerator可以用于生成測試數(shù)據(jù),用來完成后續(xù)操作。
5、將模擬數(shù)據(jù)List轉(zhuǎn)換為DataFrame數(shù)據(jù)集
6、將數(shù)據(jù)寫入到hudi
本地存儲
HDFS 存儲
四、Flink 與 Hudi 整合使用
官方示例:https://hudi.apache.org/docs/flink-quick-start-guide
1)啟動flink集群
下載地址:http://flink.apache.org/downloads.html
2) 啟動flink SQL 客戶端
3)添加數(shù)據(jù)
HDFS上查看
4)查詢數(shù)據(jù)(批式查詢)
5)更新數(shù)據(jù)
6)Streaming Query(流式查詢)
首先創(chuàng)建表t2,設(shè)置相關(guān)屬性,以流的方式查詢讀取,映射到上面表:t1
- read.streaming.enabled 設(shè)置為true,表明通過streaming的方式讀取表數(shù)據(jù);
- read.streaming.check-interval 指定了source監(jiān)控新的commits的間隔時間4s
- table.type 設(shè)置表類型為 MERGE_ON_READ
注意:查看可能會遇到如下錯誤:
[ERROR] Could not execute SQL statement. Reason: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
【解決】添加hadoop-mapreduce-client-core-xxx.jar和hive-exec-xxx.jar到Flink lib中。
Hive 與 Hudi的整合,小伙伴可以先看官網(wǎng)文檔:https://hudi.apache.org/docs/syncing_metastore/#flink-setup