在 SparkSQL Thrift 服务器上添加 Hive SerDe jar
Adding Hive SerDe jar on SparkSQL Thrift Server
我有指向 JSON 文件作为内容的 Hive 表,这些表需要 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 表?
我猜您正在使用 jdbc 将 tableau 连接到 hive。
当使用 hive shell 时,hive 从 hive 客户端捆绑所有需要的库(包括 SerDe)并构建一个在集群上分发和执行的 jar。不幸的是,jdbc 服务器不这样做,因此您必须在所有节点上手动安装和配置 SerDe,并将其也放在所有 map/reduce 节点的类路径中(复制jar 到所有节点并添加类似 HADOOP_CLASSSPATH=$HADOOP_CLASSPATH:/location/of/your/serde.jar
) 的内容。
之后可能还需要重新启动纱线。
这很不方便,但这就是 jdbc 驱动程序的工作方式。
我有指向 JSON 文件作为内容的 Hive 表,这些表需要 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 表?
我猜您正在使用 jdbc 将 tableau 连接到 hive。
当使用 hive shell 时,hive 从 hive 客户端捆绑所有需要的库(包括 SerDe)并构建一个在集群上分发和执行的 jar。不幸的是,jdbc 服务器不这样做,因此您必须在所有节点上手动安装和配置 SerDe,并将其也放在所有 map/reduce 节点的类路径中(复制jar 到所有节点并添加类似 HADOOP_CLASSSPATH=$HADOOP_CLASSPATH:/location/of/your/serde.jar
) 的内容。
之后可能还需要重新启动纱线。
这很不方便,但这就是 jdbc 驱动程序的工作方式。