Flink1.15版本中,如果使用HiveCatalog原生 Flink 元数据的持久化存储,有两种添加 Hive 依赖项的方法。第一种是使用 Flink 提供的 Hive Jar包。您可以根据使用的 Metastore 的版本来选择对应的 Hive jar。
可以查看Flink官网下载flink-sql-connector-hive的jar包:https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/docs/connectors/table/hive/overview/#dependencies
或者在项目中使用依赖
<!-- Flink Dependency -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-hive_2.12</artifactId>
<version>1.15.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-java-bridge_2.12</artifactId>
<version>1.15.4</version>
<scope>provided</scope>
</dependency>
<!-- Hive Dependency -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>${hive.version}</version>
<scope>provided</scope>
</dependency>
但是,在Flink1.15中 flink-table-planner-loader取代了flink-table-planner_2.12,在使用flink-connector-hive_2.12,flink-connector-files, flink-table-planner-loader去使用flink sql创建fileSystem任务的时候,会由于planner的不同问题发生报错
由于planner的不同,导致的报错,所以将
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner-loader</artifactId> <version>1.15.1</version> </dependency>
替换为
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner_2.12</artifactId> <version>1.15.1</version> </dependency>
再次运行,此时报错
由于依赖中,存在的calcite版本不同,所以导致NoSuchMethodError,在检查后发现,在hive-exec中存在calcite 1.16.0版本
将hive-exec中的calcite排除再次运行
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>3.1.2</version> <exclusions> <exclusion> <artifactId>calcite-core</artifactId> <groupId>org.apache.calcite</groupId> </exclusion> <exclusion> <artifactId>calcite-druid</artifactId> <groupId>org.apache.calcite</groupId> </exclusion> </exclusions> </dependency>
运行结果正常,
总结:在Flink1.15版本中,使用HiveCatalog和flink-connector-files时,需要将 flink-table-planner-loader 替换为 flink-table-planner_2.12, 排除 hive-exec 中的calcite