Exception in thread "main" java.lang.NoSuchFieldError: HIVE_CLI_SERVICE_PROTOCOL_V7
at org.apache.hive.jdbc.HiveConnection.(HiveConnection.java:175)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at dsnoc.dsnoc_api.dolar.getDolarFromImpala(dolar.java:145)
at dsnoc.dsnoc_api.dsnoc.main(dsnoc.java:75)
我不知道这是否是一个depencency兼容性问题:
org.apache.hive
hive-exec
1.1.0
org.apache.hive
hive-jdbc
1.1.0
org.apache.hadoop
hadoop-common
2.6.0
我使用CDH 5.8.0与1.1.0蜂房和Hadoop 2.6.0
也许是代码问题:
public static double getDolarFromImpala(String date) {
double dolar = 0.0;
try {
Class.forName(JDBC_DRIVER_HIVE);
String sql = "SELECT valor FROM dolar where fecha ='"+date+"'";
Connection con = DriverManager.getConnection(JDBC_HIVE2_URL,USERNAME,PASSWORD);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
dolar = rs.getDouble("valor");
}
stmt.close();
con.close();
}
catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}
catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}
return dolar;
}
但我觉得不是,因为我有黑斑羚-JDBC尝试过了,工作。
其他的事情是,我不使用黑斑羚,JDBC,因为它不读取或发送USERNAME和PASSWORD,扔我这个错误:
[Simba][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AuthorizationException: User '' does not have privileges to execute 'SELECT'
问候,
+2
这听起来像你有一个不匹配的依赖关系。 –
+0
如果要连接到Impala,只需使用Cloudera网站上提供的Impala JDBC驱动程序即可。你会尝试一个MySQL驱动程序或Oracle驱动程序吗?不需要。因此,不要在Apache Hive驱动程序中损失时间(BTW对JDBC功能的支持非常有限,不适用于较早的Hive服务器版本等 - 在很多情况下,Cloudera Hive驱动程序是更好的选择) –
+0
我正在使用hive2,因为Impala-JDBC不会读取USERNAME和PASSWORD。 –