Table of Contents
一. 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
- 解决hadoop依赖问题
注释这两行
新增两行
- 解决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 ;
参考:
- https://hudi.apache.org/docs/0.12.0/syncing_metastore
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。