7

我使用 Hive 创建表存储序列文件。行格式是 serdermyserde.TestDeserializerhiveserde-1.0.jar

在命令行中,我使用此命令添加 jar 文件:

配置单元添加 JAR hiveserde-1.0.jar

然后我创建一个表,文件加载成功。

但现在我想运行它并使用 mysql jdbc 在客户端上创建一个表。错误是:

SerDe: myserde.TestDeserializer 不存在。

如何运行它?谢谢

4

4 回答 4

11

所以,有几个选择。在所有这些中,jar 都需要存在于安装了 Hive 的集群上。当然,JDBC 客户端代码可以在集群内部或外部的任何地方运行。

选项 1:在运行任何其他 HQL 命令之前发出 HQL 查询:

ADD JAR hiveserde-1.0.jar

选项 2:您可以更新 hive-site.xml 以将 hive.aux.jars.path属性设置为 jar hiveserde-1.0.jar 的完整路径

于 2012-12-26T12:48:14.347 回答
1

转到您的 hive-env.sh 并附加到文件的底部:

export HIVE_AUX_JARS_PATH=$HIVE_AUX_JARS_PATH:/<path-to-jar>

然后,您可以获取此文件。不理想,但它有效。

于 2015-05-11T11:33:19.017 回答
0

您是说您想通过 jdbc 创建表而不是在 CLI 中创建表吗?在这种情况下,您应该在运行 jdbc 代码时将 jar 添加到类路径中。

于 2012-12-26T01:56:57.800 回答
0

是的,这可能有点令人困惑,似乎有一半时间 Hive 从集群读取,另一半从本地文件系统读取(机器 Hive 服务器已安装)。

为了克服这个简单的复制 .jar 文件到 Hive 服务器机器,然后你可以在你的 Hive 查询中引用它,例如:

add jar /tmp/json-serde.jar;

create table tweets (
    name string,
    address1 string,
    address2 string,
    address3 string,
    postcode string
)
...

然后进入下一个问题;)

于 2015-06-26T22:50:37.753 回答