如何在本地使用 Hive Metastore 运行 Apache Flink 来测试 Apache Iceberg

问题描述 投票:0回答:1

我想摆弄一下 Apache Flink 和 Apache Iceberg,并在本地计算机上进行测试。我通读了文档,但我仍然不确定必须在本地设置什么才能运行此操作。我已经做了的是,我有一个

docker-compose
文件来在本地启动 hadoop-namenode 和 -datanode 以及一个将元数据存储在 Postgres 中的 hive-server。

此外,我在 IDE 中设置了一个本地 Flink 项目(使用 Scala 2.12 的 Java 项目),除了默认的 Flink 依赖项之外,我还添加了

flink-clients
flink-table-api-java-bridge
flink-table-planner
flink-connector-hive
hive-exec
hadoop-client
版本 2.8.3、
flink-hadoop-compatibility
以及
iceberg-flink-runtime-1.14
依赖项。

然后我尝试使用 flink SQL 语句创建一个简单的目录,如下所示:

tEnv.executeSql(String.join("\n",
                "CREATE CATALOG iceberg_catalog WITH (",
              "'type'='iceberg', ",
              "'catalog-type'='hive', ",
              "'uri'='thrift://localhost:9083', ",
              "'warehouse'='hdfs://namenode:8020/warehouse/path')"));

之后我收到以下警告和堆栈跟踪:

12:11:43,869 WARN  org.apache.flink.runtime.util.HadoopUtils                    [] - Could not find Hadoop configuration via any of the supported methods (Flink configuration, environment variables).
12:11:44,203 INFO  org.apache.hadoop.hive.conf.HiveConf                         [] - Found configuration file null
12:11:44,607 WARN  org.apache.hadoop.util.NativeCodeLoader                      [] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
12:11:44,816 ERROR org.apache.hadoop.hive.metastore.utils.MetaStoreUtils        [] - Got exception: java.lang.ClassCastException class [Ljava.lang.Object; cannot be cast to class [Ljava.net.URI; ([Ljava.lang.Object; and [Ljava.net.URI; are in module java.base of loader 'bootstrap')
java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.net.URI; ([Ljava.lang.Object; and [Ljava.net.URI; are in module java.base of loader 'bootstrap')
    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.resolveUris(HiveMetaStoreClient.java:262) [hive-exec-3.1.2.jar:3.1.2]
    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:182) [hive-exec-3.1.2.jar:3.1.2]

我通读了文档,但我不确定在 IDE 本地运行所有这些内容需要什么(而不是在专用的 Flink 集群内,通过库等添加依赖项)。

hive apache-flink apache-iceberg
1个回答
0
投票

请注意,CATALOG 代表冰山表的目录,不是 Hive 的一部分。当您创建目录时,它不会在 Hive 元存储中留下任何内容。

但是当您使用 Iceberg Flink SQL(例如“创建数据库iceberg_db”)在此 hive 目录中创建数据库时,您也会在 hive Metastore 中看到它。

同样,当你使用 hive Catalog 创建表时,如果你使用 hive

desc formatted
查看它,你会发现一个名为“table_type”的表属性,其值为“ICEBERG”。

© www.soinside.com 2019 - 2024. All rights reserved.