如何使用Hive元存储在本地运行ApacheFlink来测试ApacheIceberg



我想稍微摆弄一下Apache Flink和Apache Iceberg,并在本地机器上进行测试。我通读了文档,但我仍然不确定必须在本地设置什么才能运行。我已经做了的是,我有一个docker-compose文件来本地启动一个hadoop名称节点和-datanode,以及一个将元数据存储在Postgres中的hive服务器。

此外,我在IDE中设置了一个本地Flink项目(Scala 2.12.的Java项目(,除了默认的Flink依赖项外,我还添加了版本2.8.3的flink-clientsflink-table-api-java-bridgeflink-table-plannerflink-connector-hivehive-exechadoop-clientflink-hadoop-compatibilityiceberg-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集群内,通过libs等添加依赖项(本地运行所有这些需要什么

如果你能告诉我我在这里错过了什么或做错了什么,那就太好了。

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

但是当您使用Iceberg Flink SQL时;创建数据库"冰山_db";要在这个配置单元目录中创建数据库,您也可以在配置单元元存储中看到它。

同样,当您使用hive Catalog创建表时,如果使用hivedesc formatted查看它,您会发现一个名为"的表属性;table_type";其值为"0";ICEBERG";。

相关内容

  • 没有找到相关文章

最新更新