我有Hive表,指向JSON文件作为内容,这些表需要JSON SerDe jar(来自here)才能查询表。在托管我的Hadoop发行版的机器(或VM)中,我可以简单地在Hive或Beeline CLI中执行:
ADD JAR /<local-path>/json-serde-1.0.jar;
然后我就能在我的Hive表上执行SELECT查询。
我需要将这些Hive表用作Tableau的数据源(安装在Windows,我的主机上),所以我在Spark中启动了Thrift服务器。
对于不包含JSON(并且不需要SerDe)的Hive表,Tableau可以轻松连接和读取表。
但是,对于包含JSON数据的Hive表,看起来Tableau无法找到Hive JSON SerDe jar,我收到以下错误:
'java.lang.RuntimeException: MetaException(message:java.lang.ClassNotFoundException Class org.openx.data.jsonserde.JsonSerDe not found)'.
如何添加Hive JSON SerDe jar以便Tableau可以读取Hive JSON表?
答案 0 :(得分:1)
我猜你正在使用jdbc将tableau连接到hive。
当使用hive shell时,hive会从hive客户端捆绑所有需要的库(包括SerDe),并构建一个在集群上分发和执行的jar。不幸的是,jdbc服务器不这样做,所以你必须在所有节点上手动安装和配置SerDe,并将它放在所有map / reduce节点的类路径上(将jar复制到所有节点)节点并添加HADOOP_CLASSSPATH=$HADOOP_CLASSPATH:/location/of/your/serde.jar
)之类的内容。
之后可能还需要重新启动纱线。
这是非常不方便的,但这是jdbc驱动程序的工作原理。