0

我正在使用以下命令在 Spark 应用程序中启动 HiveThriftServer:HiveThriftServer2 .startWithContext(session.sqlContext());

我可以看到我需要在类路径中包含 hive-jdbc-1.2.1.spark2、hive-exec-1.2.1.spark2、hive-metastore-1.2.1.spark2 jar 来启动它。

到目前为止一切顺利,它启动了,我可以在 Spark UI 中看到“JDBC/ODBC”选项卡。

现在,在客户端(我需要连接到该服务器以访问数据),我有更高级的 JARS 版本,如 hive-jdbc-2.1.1 等。当我尝试使用以下代码连接到服务器时,我得到一个例外:

    try {
            Class.forName("org.apache.hive.jdbc.HiveDriver");
        } catch (ClassNotFoundException e) {
            System.out.println("Driver not found");
        }

        Connection con = DriverManager.getConnection("jdbc:hive2://<server-name>:10015/default", "", "");

异常:原因:org.apache.thrift.TApplicationException:必填字段“client_protocol”未设置!结构:TOpenSessionReq(client_protocol:null, configuration:{use:database=default}) at org.apache.thrift.TApplicationException.read(TApplicationException.java:111) at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java: 79) 在 org.apache.hive.service.rpc.thrift.TCLIService$Client.OpenSession(TCLIService.java: 155) 在 org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:576)

如果我使用相同版本的 JARS 作为服务器,它的工作原理。

现在我有两个选择: 1. 将服务器端的 JARS 更改为较新的版本 (2.1.1),但随后服务器无法启动(实际上它抱怨 ClassNotFound 问题)。HiveThriftServer2 类来自 spark-hive-thriftserver jar,如果我查看它的 pom.xml,它具有 1.2.1 jars 的依赖关系,这很明显服务器不会在 2.1.1 版本上启动

  1. 我在客户端更改了版本,但我没有更改 JAR 版本的选项,因为 App 服务器中的其他应用程序依赖于这些版本。

谁能建议任何可能的方法来解决这个问题?(理想情况下,较新版本的 jas 应该具有向后兼容性)

4

0 回答 0