Impala JDBC bug
阿新 • • 發佈:2018-12-27
此文僅僅適合開啟了簡單認證許可權的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已經很久了,目前仍然沒有修復。