我使用以下命令启动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来启动它。
到目前为止一切顺利,它开始了,我可以看到" JDBC / ODBC" Spark UI中的选项卡。
现在,在客户端(我需要连接到此服务器以访问数据),我有更高级的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:必填字段&#39; client_protocol&#39;没有设置! Struct:TOpenSessionReq(client_protocol:null,configuration:{use:database = default}) at org.apache.thrift.TApplicationException.read(TApplicationException.java:111) 在org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:79) 在org.apache.hive.service.rpc.thrift.TCLIService $ Client.recv_OpenSession(TCLIService.java:168) 在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 jar,这很明显服务器不会在2.1.1版本上启动
有人可以建议任何可能的方法来解决这个问题吗? (理想情况下,较新版本的jas应具有向后兼容性)