From eef3f9c74acfe0ebec77694044b416696cfc7c2d Mon Sep 17 00:00:00 2001 From: todd5167 <313328862@qq.com> Date: Sat, 2 Apr 2022 21:16:10 +0800 Subject: [PATCH] [HUDI-3771] flink supports sync table information to aws glue (#5202) --- .../org/apache/hudi/aws/sync/AwsGlueCatalogSyncTool.java | 2 +- .../java/org/apache/hudi/sink/utils/HiveSyncContext.java | 6 ++++++ .../src/main/java/org/apache/hudi/hive/HiveSyncConfig.java | 2 +- .../main/java/org/apache/hudi/hive/ddl/HiveSyncMode.java | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/hudi-aws/src/main/java/org/apache/hudi/aws/sync/AwsGlueCatalogSyncTool.java b/hudi-aws/src/main/java/org/apache/hudi/aws/sync/AwsGlueCatalogSyncTool.java index ec55e9c5d..bb1be377c 100644 --- a/hudi-aws/src/main/java/org/apache/hudi/aws/sync/AwsGlueCatalogSyncTool.java +++ b/hudi-aws/src/main/java/org/apache/hudi/aws/sync/AwsGlueCatalogSyncTool.java @@ -45,7 +45,7 @@ public class AwsGlueCatalogSyncTool extends HiveSyncTool { super(props, new HiveConf(conf, HiveConf.class), fs); } - private AwsGlueCatalogSyncTool(HiveSyncConfig hiveSyncConfig, HiveConf hiveConf, FileSystem fs) { + public AwsGlueCatalogSyncTool(HiveSyncConfig hiveSyncConfig, HiveConf hiveConf, FileSystem fs) { super(hiveSyncConfig, hiveConf, fs); } diff --git a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/utils/HiveSyncContext.java b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/utils/HiveSyncContext.java index 768d36e0a..52ffa8565 100644 --- a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/utils/HiveSyncContext.java +++ b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/utils/HiveSyncContext.java @@ -18,10 +18,12 @@ package org.apache.hudi.sink.utils; +import org.apache.hudi.aws.sync.AwsGlueCatalogSyncTool; import org.apache.hudi.common.fs.FSUtils; import org.apache.hudi.configuration.FlinkOptions; import org.apache.hudi.hive.HiveSyncConfig; import org.apache.hudi.hive.HiveSyncTool; +import org.apache.hudi.hive.ddl.HiveSyncMode; import org.apache.hudi.table.format.FilePathUtils; import org.apache.hudi.util.StreamerUtil; @@ -48,6 +50,10 @@ public class HiveSyncContext { } public HiveSyncTool hiveSyncTool() { + HiveSyncMode syncMode = HiveSyncMode.of(syncConfig.syncMode); + if (syncMode == HiveSyncMode.GLUE) { + return new AwsGlueCatalogSyncTool(this.syncConfig, this.hiveConf, this.fs); + } return new HiveSyncTool(this.syncConfig, this.hiveConf, this.fs); } diff --git a/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/HiveSyncConfig.java b/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/HiveSyncConfig.java index eb4fc62d4..36dba81a3 100644 --- a/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/HiveSyncConfig.java +++ b/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/HiveSyncConfig.java @@ -55,7 +55,7 @@ public class HiveSyncConfig extends HoodieSyncConfig { @Parameter(names = {"--use-jdbc"}, description = "Hive jdbc connect url") public Boolean useJdbc; - @Parameter(names = {"--sync-mode"}, description = "Mode to choose for Hive ops. Valid values are hms, jdbc and hiveql") + @Parameter(names = {"--sync-mode"}, description = "Mode to choose for Hive ops. Valid values are hms,glue,jdbc and hiveql") public String syncMode; @Parameter(names = {"--auto-create-database"}, description = "Auto create hive database") diff --git a/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/ddl/HiveSyncMode.java b/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/ddl/HiveSyncMode.java index 7e011538c..abe044cb1 100644 --- a/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/ddl/HiveSyncMode.java +++ b/hudi-sync/hudi-hive-sync/src/main/java/org/apache/hudi/hive/ddl/HiveSyncMode.java @@ -26,6 +26,10 @@ public enum HiveSyncMode { * The HMS mode use the hive meta client to sync metadata. */ HMS, + /** + * The GLUE mode use the glue client to sync metadata. + */ + GLUE, /** * The HIVEQL mode execute hive ql to sync metadata. */