无法启动 Hive 并且 Trino 中不存在目录“hive”

问题描述

我安装了 Apache Hive 3、Apache Hadoop 3、MysqL 和 Trino 来查询数据。 我启动了 Hive metastore,我正在运行 MysqL。但是当我在 Trino 中运行一个简单的查询时:

trino> show tables from default; ==> 失败:第 1:1 行:目录 'hive' 不存在

当我尝试启动 Hive CLI 时。我得到了这个例外:

Hive Session ID = dd740516-a5d0-4f8d-ae24-065e2cfe889c 
Exception in thread "main" java.lang.classCastException: jdk.internal.loader.ClassLoaders$AppClassLoader incompatible with java.net.urlclassloader 
 at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:413) 
 at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:389) 
 at org.apache.hadoop.hive.cli.CliSessionState.<init>(CliSessionState.java:60) 
 at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:705) 
 at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 at java.base/java.lang.reflect.Method.invoke(Method.java:566) 
 at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 
 at org.apache.hadoop.util.RunJar.main(RunJar.java:232) 

我尝试将这些属性添加hive-site.xml,但无法启动 Hive CLI。

<property> 
 <name>system:java.io.tmpdir</name> 
 <value>/tmp/hive</value> 
 </property> 
 <property> 
 <name>system:user.name</name> 
 <value>${user.name}</value> 
 </property> 

有人可以帮忙吗?非常感谢

解决方法

我可以回答关于 Trino CLI 的第一个问题。

在 Trino 中对 HDFS 中的数据运行查询之前,您需要先配置 hive 连接器目录。在您的 Trino 安装中,应该有一个 etc 目录。在该目录下是 etc/catalog 目录。

创建一个新文件 etc/catalog/hive.properties 并添加以下配置。

connector.name=hive-hadoop2
hive.metastore.uri=thrift://<your-metastore-ip-address>:9083

让我们分解一下这些属性的含义:

  1. connector.name=hive-hadoop2 表示目录将使用 Trino hive 连接器。
  2. hive.metastore.uri=thrift://<your-metastore-ip-address>:9083 告诉 Trino 在哪里可以找到与 Hive 一起安装的 Metastore。

如果您不确定在哪里可以找到您的 Metastore ip 地址,the hive documentation 表示一些包含它们的配置文件,具体取决于您运行的 Hadoop/Hive 版本。

Hive 和 Trino 共享 Metastore,但在完全不同的资源上运行查询。当人们开始使用 Trino 时,我 wrote this blog 来帮助介绍这些概念。也许它会在您开始时有所帮助。

假设您的设置没有什么太复杂的,那就是所有需要的东西。在 some cases 中,您可能需要 hive.config.resources 来包含您的 hdfs-site.xmlcore-site.xml 的路径。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...