错误定位
最近给hadoop集群配置了kerberos认证,之后准备配置sentry进行权限管理。安装并启用sentry服务后需要在beeline进行Grant等授权操作。
Note that since Hive CLI does not work with HiveServer2, it cannot be used to configure Sentry permissions.
在启用sentry之前基本都用的Hive CLI,所以也没有注意到beeline的问题,在尝试进行连接后beeline出现错误:
Error: Could not open client transport with JDBC Uri: jdbc:hive2://test-1:10000/default;: Peer indicated failure: Unsupported mechanism type PLAIN (state=08S01,code=0)
出现这个错误是因为连接时没有提供kerberos的principal信息
应该如下进行连接:
!connect jdbc:hive2://localhost:10000/default;principal=hive/HiveServer2Host@YOUR-REALM.COM
但是仍出现错误:
Error: Could not establish connection to jdbc:hive2://test-1:10000/default;principal=hive/test-1@JUNIORCHINA.COM: Required field ‘client_protocol’ is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=default}) (state=08S01,code=0)
针对这个错误,在网上搜到了这样的结果
https://issues.apache.org/jira/browse/HIVE-6050
确认是beeline client的版本比hiveserver2的版本要高
之后检查jar包
CLASSPATH中/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/jars/hive-jdbc-0.13.1-cdh5.3.0.jar
和lib中/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/hive/lib/hive-jdbc-0.13.1-cdh5.3.0.jar的jar包版本都对
无果。
最后留意到登录beeline后显示
Beeline version 1.5.2 by Apache Hive
beeline>
在其他节点登录beeline时显示
Beeline version 0.13.1-cdh5.3.0 by Apache Hive
beeline>
终于确定问题所在
解决
用其他节点客户端登录,或者更换beeline版本