在 SparkSQL Thrift Server 上添加 Hive SerDe jar

Posted

技术标签:

【中文标题】在 SparkSQL Thrift Server 上添加 Hive SerDe jar【英文标题】:Adding Hive SerDe jar on SparkSQL Thrift Server 【发布时间】:2015-12-07 06:23:35 【问题描述】:

我有指向 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 表?

【问题讨论】:

【参考方案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 驱动程序的工作方式。

见https://issues.apache.org/jira/browse/HIVE-5275

【讨论】:

感谢您的帮助。我正在使用 ODBC。特别是来自 Databricks 的 Simba Spark ODBC 驱动程序。 ODBC的过程是否相同? 是的,应该是一样的程序。

以上是关于在 SparkSQL Thrift Server 上添加 Hive SerDe jar的主要内容,如果未能解决你的问题,请参考以下文章

使用HAProxy代理控制Spark SQL Thrift Server服务的最大连接数

SparkSQL、Thrift 服务器和 Tableau

0643-Spark SQL Thrift简介

spark thrift server 与 网易 kyuubi thrift server

如何在CDH中启用Spark Thrift

Thrift --- 支持双向通信