我使用 Hive 创建表存储序列文件。行格式是 serdermyserde.TestDeserializer
类hiveserde-1.0.jar
在命令行中,我使用此命令添加 jar 文件:
配置单元添加 JAR hiveserde-1.0.jar
然后我创建一个表,文件加载成功。
但现在我想运行它并使用 mysql jdbc 在客户端上创建一个表。错误是:
SerDe: myserde.TestDeserializer 不存在。
如何运行它?谢谢
所以,有几个选择。在所有这些中,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 的完整路径
转到您的 hive-env.sh 并附加到文件的底部:
export HIVE_AUX_JARS_PATH=$HIVE_AUX_JARS_PATH:/<path-to-jar>
然后,您可以获取此文件。不理想,但它有效。
您是说您想通过 jdbc 创建表而不是在 CLI 中创建表吗?在这种情况下,您应该在运行 jdbc 代码时将 jar 添加到类路径中。
是的,这可能有点令人困惑,似乎有一半时间 Hive 从集群读取,另一半从本地文件系统读取(机器 Hive 服务器已安装)。
为了克服这个简单的复制 .jar 文件到 Hive 服务器机器,然后你可以在你的 Hive 查询中引用它,例如:
add jar /tmp/json-serde.jar;
create table tweets (
name string,
address1 string,
address2 string,
address3 string,
postcode string
)
...
然后进入下一个问题;)