目录
0. 相关文章链接
1. 同步工具概述
2. 使用语法及参数
2.1. 语法
2.2. 参数说明
3. 解决依赖问题
3.1. 解决点一:修改hadoop、hive、hudi-hive-sync-bundle-0.12.0.jar的依赖加载
3.2. 解决点二:解决parquet-column的版本冲突
4. JDBC模式同步
5. HMS模式同步
0. 相关文章链接
Hudi文章汇总
1. 同步工具概述
若写入引擎没有开启自动同步,则需要手动利用 Hudi 客户端工具进行同步,Hudi提供Hive sync tool用于同步Hudi最新的元数据(包含自动建表、增加字段、同步分区信息)到hive metastore。
Hive sync tool提供三种同步模式,JDBC,HMS,HIVEQL。这些模式只是针对Hive执行DDL的三种不同方式。在这些模式中,JDBC或HMS优于HIVEQL, HIVEQL主要用于运行DML而不是DDL。
2. 使用语法及参数
脚本位置在hudi源码路径下的hudi-sync/hudi-hive-sync/run_sync_tool.sh
2.1. 语法
#查看语法帮助
./run_sync_tool.sh --help
#语法:
./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 0.5.1版本开始,读时合并优化版本的表默认带有'_ro'后缀。为了向后兼容旧的Hudi版本,提供了一个可选的配置 --skip-ro-suffix,如果需要,可以关闭'_ro'后缀。
2.2. 参数说明
HiveSyncConfig | DataSourceWriteOption | 描述 |
--database | hoodie.datasource.hive_sync.database | 同步到hive的目标库名 |
--table | hoodie.datasource.hive_sync.table | 同步到hive的目标表名 |
--user | hoodie.datasource.hive_sync.username | hive metastore 用户名 |
--pass | hoodie.datasource.hive_sync.password | hive metastore 密码 |
--use-jdbc | hoodie.datasource.hive_sync.use_jdbc | 使用JDBC连接到hive metastore |
--jdbc-url | hoodie.datasource.hive_sync.jdbcurl | Hive metastore url |
--sync-mode | hoodie.datasource.hive_sync.mode | 同步hive元数据的方式. 有效值为 hms, jdbc 和hiveql. |
--partitioned-by | hoodie.datasource.hive_sync.partition_fields | hive分区字段名,多个字段使用逗号连接. |
--partition-value-extractor | hoodie.datasource.hive_sync.partition_extractor_class | 解析分区值的类名,默认SlashEncodedDayPartitionValueExtractor |
3. 解决依赖问题
run_sync_tool.sh这个脚本就是查找hadoop、hive和bundle包的依赖,实际上使用的时候会报错各种ClassNotFoundException、NoSuchMethod,所以要动手修改依赖的加载逻辑:
vim /opt/software/hudi-0.12.0/hudi-sync/hudi-hive-sync/run_sync_tool.sh
3.1. 解决点一:修改hadoop、hive、hudi-hive-sync-bundle-0.12.0.jar的依赖加载
修改一:将34行 HUDI_HIVE_UBER_JAR=xxxx 注释掉
修改二:将52行 HADOOP_HIVE_JARS=xxx注释掉
#在 54行 添加如下:
HADOOP_HIVE_JARS=`hadoop classpath`:$HIVE_HOME/lib/*
HUDI_HIVE_UBER_JAR=/opt/software/hudi-0.12.0/packaging/hudi-hive-sync-bundle/target/hudi-hive-sync-bundle-0.12.0.jar
3.2. 解决点二:解决parquet-column的版本冲突
步骤一:上传parquet-column-1.12.2.jar到/opt/software/,脚本中添加如下:
PARQUET_JAR=/opt/software/parquet-column-1.12.2.jar
步骤二:拼接路径到命令最前面(只能最前面!)
最后,保存退出即可。
4. JDBC模式同步
通过hive2 jdbc协议同步,提供的是hive server2的地址,如jdbc:hive2://hive-server:10000。默认为jdbc。
# 进入hudi-hive-sync目录:
cd /opt/software/hudi-0.12.0/hudi-sync/hudi-hive-sync
# 执行如下脚本:
./run_sync_tool.sh \
--base-path hdfs://hadoop1:8020/tmp/hudi_flink/t2/ \
--database default \
--table t2_flink \
--jdbc-url jdbc:hive2://hadoop1:10000 \
--user atguigu \
--pass atguigu \
--partitioned-by num
5. HMS模式同步
提供hive metastore的地址,如thrift://hms:9083,通过hive metastore的接口完成同步。使用时需要设置 --sync-mode=hms。
如果使用的是远程metastore,那么确保hive-site.xml配置文件中设置hive.metastore.uris。
./run_sync_tool.sh \
--base-path hdfs://hadoop1:8020/tmp/hudi_flink/t3 \
--database default \
--table t3_flink \
--user atguigu \
--pass atguigu \
--partitioned-by age \
--sync-mode hms \
--jdbc-url thrift://hadoop1:9083
注:其他Hudi相关文章链接由此进 -> Hudi文章汇总