<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Hudi源表對應一份HDFS資料,可以通過Spark,Flink 元件或者Hudi使用者端將Hudi表的資料對映為Hive外部表,基於該外部表, Hive可以方便的進行實時檢視,讀優化檢視以及增量檢視的查詢。
這裡以Hive3.1.1、 Hudi 0.9.0為例, 其他版本類似
將hudi-hadoop-mr-bundle-0.9.0xxx.jar , hudi-hive-sync-bundle-0.9.0xx.jar 放到hiveserver 節點的lib目錄下
修改hive-site.xml找到hive.default.aux.jars.path 以及hive.aux.jars.path 這兩個設定項,將第一步中的jar包全路徑給設定上去: 設定後如下
<name>hive.default.aux.jars.path</name> <value>xxxx,jar,xxxx,jar,file:///mypath/hudi-hadoop-mr-bundle-0.9.0xxx.jar,file:///mypath/hudi-hive-sync-bundle-0.9.0xx.jar</value>
設定完後重啟hive-server
對於Hudi的bootstrap表(tez查詢),除了要新增hudi-hadoop-mr-bundle-0.9.0xxx.jar , hudi-hive-sync-bundle-0.9.0xx.jar這兩個jar包,還需把hbase-shaded-miscellaneous-xxx.jar, hbase-metric-api-xxx.jar,hbase-metrics-xxx.jar, hbase-protocol-shaded-xx.jar,hbase-shaded-protobuf-xxx.jar,htrce-core4-4.2.0xxxx.jar按上述步驟新增進去。
一般來說Hudi表在用Spark或者Flink寫入資料時會自動同步到Hive外部表, 此時可以直接通過beeline查詢同步的外部表, 若寫入引擎沒有開啟自動同步,則需要手動利用hudi使用者端工具run_hive_sync_tool.sh 進行同步具體可以參考官網檢視相關引數。
使用Hive查詢Hudi表前,需要通過set命令設定hive.input.format,否則會出現資料重複,查詢異常等錯誤,如下面這個報錯就是典型的沒有設定hive.input.format 導致的
java.lang.IllegalArgumentException: HoodieRealtimeReader can oly work on RealTimeSplit and not with xxxxxxxxxx
除此之外對於增量查詢,還需要set命令額外設定3個引數
set hoodie.mytableName.consume.mode=INCREMENTAL; set hoodie.mytableName.consume.max.commits=3; set hoodie.mytableName.consume.start.timestamp=commitTime;
注意這3個引數是表級別引數
引數名 | 描述 |
---|---|
hoodie.mytableName.consume.mode | Hudi表的查詢模式。 增量查詢 :INCREMENTAL非增量查詢:不設定或者設為SNAPSHOT |
hoodie.mytableName.consume.start.timestamp | Hudi表增量查詢起始時間 |
hoodie. mytableName.consume.max.commits | Hudi表基於hoodie.mytableName.consume.start.timestamp 之後要查詢的增量commit次數。提交次數,如設定為3時,代表增量查詢從指定的起始時間之後commit 3次的資料,設為-1時,增量查詢從指定的起始時間之後提交的所有資料 |
例如Hudi原表表名為hudicow,同步給hive之後hive表名hudicow
設定hive.input.format 為org.apache.hadoop.hive.ql.io.HiveInputFormat或者org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat後,像普通的hive表一樣查詢即可
set hive.input.format= org.apache.hadoop.hive.ql.io.HiveInputFormat; select count(*) from hudicow;
除了要設定hive.input.format,還需要設定上述的3個增量查詢引數,且增量查詢語句中的必須新增where 關鍵字並將_hoodie_commit_time
> 'startCommitTime'作為過濾條件(這地方主要是hudi的小檔案合併會把新舊commit的資料合併成新資料,hive是沒法直接從parquet檔案知道哪些是新資料哪些是老資料)
set hive.input.format = org.apache.hadoop.hive.ql.io.HiveInputFormat; set hoodie.hudicow.consume.mode = INCREMENTAL; set hoodie.hudicow.consume.max.commits = 3; set hoodie.hudicow.consume.start.timestamp = xxxx; select count(*) from hudicow where `_hoodie_commit_time` > 'xxxx'
注意_hoodie_commit_time
的引號是反引號(tab鍵上面那個)不是單引號, 'xxxx'是單引號
例如mor型別Hudi源表的表名為hudimor,對映為兩張Hive外部表hudimor_ro(ro表)和hudimor_rt(rt表)
實際上就是讀 ro表,和cow表類似設定完hiveInputFormat 之後 和普通的hive表一樣查詢即可。
設定了hive.input.format之後,即可查詢到Hudi源表的最新資料
set hive.input.format = org.apache.hadoop.hive.ql.io.HiveInputFormat; select * from hudicow_rt;
這個增量查詢針對的rt表,不是ro表。通COW表的增量查詢類似
set hive.input.format = org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat; // 這地方指定為HoodieCombineHiveInputFormat set hoodie.hudimor.consume.mode = INCREMENTAL;set hoodie.hudimor.consume.max.commits = -1; set hoodie.hudimor.consume.start.timestamp = xxxx; select * from hudimor_rt where `_hoodie_commit_time` > 'xxxx'; // 這個表名要是rt表
說明如下
set hive.input.format=org.apache.hudi.hadoop.hive.HoodieCombineHiveInputFormat;
最好只用於rt表的增量查詢,當然其他種類的查詢也可以設定為這個,這個引數會影響到普通的hive表查詢,因此在rt表增量查詢完成後,應該設定
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
或者改為預設值
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
用於其他表的查詢。
set hoodie.mytableName.consume.mode=INCREMENTAL;
僅用於該表的增量查詢模式,若要對該表切換為其他查詢模式,應設定
set hoodie.hudisourcetablename.consume.mode=SNAPSHOT;
當前Hudi(0.9.0)對接Hive的一些問題,請使用master分支或即將釋出的0.10.0版本
hive讀hudi表會將所有的資料給列印出來有嚴重的效能問題和資料安全問題。
MOR表的實時檢視讀取 請按需設定mapreduce.input.fileinputformat.split.maxsize的大小 禁止hive取切分讀取的檔案,否則會出現資料重複。這個問題當前是無解的,spark讀hudi實時檢視的時候程式碼直接寫死不會切分檔案,hive需要手動設定。
如果碰到classNotFound, noSuchMethod等錯誤請檢查hive lib庫下面的jar包是否出現衝突。
為支援Hive查詢Hudi的純log檔案需要對Hive側原始碼進行修改。
具體修改org.apache.hadoop.hive.common.FileUtils 如下函數
public static final PathFilter HIDDEN_FILES_PATH_FILTER = new PathFilter() { @Override public boolean accept(Path p) { String name = p.getName(); boolean isHudiMeta = name.startsWith(".hoodie"); boolean isHudiLog = false; Pattern LOG_FILE_PATTERN = Pattern.compile("\.(.*)_(.*)\.(.*)\.([0-9]*)(_(([0-9]*)-([0-9]*)-([0-9]*)))?"); Matcher matcher = LOG_FILE_PATTERN.matcher(name); if (matcher.find()) { isHudiLog = true; } boolean isHudiFile = isHudiLog || isHudiMeta; return (!name.startsWith("_") && !name.startsWith(".")) || isHudiFile; } };
重新編譯hive, 把新編譯的hive-common-xxx.jar
, hive-exec-xxx.jar
替換到hive server的lib目錄下注意許可權和名字和原來的jar包保持一致。
最後重啟hive-server即可。
以上就是Apache教學Hudi與Hive整合手冊 的詳細內容,更多關於Apache Hudi與Hive整合手冊 的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45