我正在使用:hivethriftserver2.startwithcontext(session.sqlcontext())在spark应用程序中启动hivethriftserver;
我可以看到我需要在类路径中包含hive-jdbc-1.2.1.spark2、hive-exec-1.2.1.spark2、hive-metastore-1.2.1.spark2 jar来启动它。
到目前为止,一切都很好,我可以在sparkui中看到“jdbc/odbc”选项卡。
现在,在客户端(我需要连接到此服务器以访问数据),我有更高级的jar版本,如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\u protocol”未设置!struct:topensessionreq(客户)_protocol:null,配置:{use:database=default})在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\u 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。将服务器端的jar更改为较新的版本(2.1.1),但是服务器无法启动(实际上它会抱怨classnotfound问题)。hivethriftserver2类来自spark-hive-thriftserver-jar,如果我看一下它的pom.xml,它的依赖关系是1.2.1jars,很明显服务器不会在2.1.1版本上启动
我在客户端更改了版本,但是我没有更改jar版本的选项,因为appserver中的其他应用程序依赖于这些版本。
有人能提出任何可能的方法来解决这个问题吗(理想情况下,较新版本的jas应该具有向后兼容性)
暂无答案!
目前还没有任何答案,快来回答吧!