Hudi系列15:Hudi元數據同步到Hive 一. hive sync tool工具介紹 二. 問題排查 三. 實操 參考:

一. hive sync tool工具介紹

使用DataSource writer或HoodieDeltaStreamer寫入數據支持將表的最新模式同步到Hive metastore,這樣查詢就可以獲得新的列和分區。在這種情況下,最好從命令行或在一個獨立的jvm中運行,Hudi提供了一個HiveSyncTool,一旦你構建了Hudi -hive模塊,就可以如下所示調用它。以下是我們如何同步上述Datasource Writer寫入的表到Hive metastore。

語法:

cd hudi-hive
./run_sync_tool.sh  --jdbc-url jdbc:hive2:\/\/hiveserver:10000 --user hive --pass hive --partitioned-by partition --base-path <basePath> --database default --table <tableName>

二. 問題排查

hudi自身帶的 hive sync tool會存在一定的問題,直接運行會報各種各樣不同的錯誤。

修改

vim run_sync_tool.sh
  1. 解決hadoop依賴問題
    註釋這兩行


新增兩行


  1. 解決Parquet衝突
    上傳到/home/software目錄
wget https://repo.maven.apache.org/maven2/org/apache/parquet/parquet-column/1.12.2/parquet-column-1.12.2.jar

三. 實操

代碼:

cd /home/hudi-0.12.0/hudi-sync/hudi-hive-sync
./run_sync_tool.sh  --jdbc-url jdbc:hive2:\/\/hp5:10000 --base-path hdfs://hp5:8020/tmp/hudi/flink_hudi_mysql_cdc5 --database test --table flink_hudi_mysql_cdc5

運行記錄:

Flink SQL 查看建表語句:

Flink SQL> show create table flink_hudi_mysql_cdc5;
CREATE TABLE `hive_catalog`.`hudidb`.`flink_hudi_mysql_cdc5` (
  `id` BIGINT NOT NULL,
  `name` VARCHAR(100),
  CONSTRAINT `PK_3386` PRIMARY KEY (`id`) NOT ENFORCED
) WITH (
  'write.precombine.field' = 'name',
  'compaction.async.enabled' = 'false',
  'hoodie.datasource.write.recordkey.field' = 'id',
  'path' = 'hdfs://hp5:8020/tmp/hudi/flink_hudi_mysql_cdc5',
  'connector' = 'hudi',
  'changelog.enabled' = 'true',
  'table.type' = 'MERGE_ON_READ'
)

Hive端查看建表語句:

MySQL 端持續插入數據:

DELIMITER //

CREATE PROCEDURE p5()
BEGIN
  
  declare l_n1 int default 21;
 
  
  while l_n1 <= 10000000 DO  
     insert into mysql_cdc (id,name) values (l_n1,concat('test',l_n1));
     set l_n1 = l_n1 + 1;
  end while;
  

END;
//

DELIMITER ;

參考:

  1. https://hudi.apache.org/docs/0.12.0/syncing_metastore
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章