本文主要是介绍Impala JDBC bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
此文仅仅适合开启了简单认证权限的impala,也就是使用sentry+OS用户组来简单控制impala访问控制权限。
impala JDBC有2种访问方式,一种是使用hive2 jdbc访问, 一种使用impala 自己的JDBC访问。
参阅官方文档了解详情: https://www.cloudera.com/documentation/enterprise/latest/topics/impala_jdbc.html
代码如下:
public class App
{public static void main( String[] args ) throws ClassNotFoundException, SQLException{String driver = "com.cloudera.impala.jdbc41.Driver";//String driver = "com.cloudera.hive.jdbc41.HS2Driver";//String url = "jdbc:impala://10.40.2.103:21050/default;UseSasl=0;AuthMech=3;UID=impala;PWD=";String url = "jdbc:impala://10.40.2.103:21050/default;";String username = "hive";String password = "hive";Connection connection = null;Class.forName(driver);connection = DriverManager.getConnection(url,username,password);String sql = "select count(*) from dmk.dmk_po_analysis_detail";Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery(sql);while(resultSet.next()) {System.out.println(resultSet.getInt(1));}resultSet.close();statement.close();connection.close();}
}
上面代码没使用使用任何认证信息,报错如下:
Exception in thread "main" java.sql.SQLException: [Cloudera][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' on: dmk.dmk_po_analysis_detail
上面是正常的,现在我们按照官方文档的介绍impala权限认证需要配置以下3个参数:
AuthMech 0,1,2,3(0不使用认证,1使用安全认证,2使用用户但是不用密码,3 LDAP认证使用用户密码)结合UID, PWD。
现在我们修改URL:
String url = "jdbc:impala://10.40.2.103:21050/default;AuthMech=2;UID=impala";
报错信息如下:
Exception in thread "main" java.sql.SQLException: [Cloudera][ImpalaJDBCDriver](500176) Error connecting to HiveServer2, please verify connection settings.
参考了官方论坛及查询其他人碰到这种问题,有一种临时解决方案,修改URL如下:
jdbc:impala://10.40.2.103:21050/default;UseSasl=0;AuthMech=3;UID=impala;PWD=
AuthMech=3,UID=impala(有权限的用户都可以), PWD= 不要设置密码
或者:
String url = "jdbc:impala://10.40.2.103:21050/default;UseSasl=0;AuthMech=3;UID=impala";
这个BUG已经很久了,目前仍然没有修复。
这篇关于Impala JDBC bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!