Hive模拟无法使用自定义身份验证提供程序

时间:2017-03-01 09:45:11

标签: hadoop hive

我已经开发了一个自定义身份验证器提供程序,在身份验证方面一切正常:HiveServer2启动良好,经过身份验证的连接已正确验证。甚至,简单的Hive查询也可以,例如show tables

问题是当我尝试从远程Hive客户端执行查询时。由于我已连接传递我的凭据(用户+密码......好吧,不是真正的密码,它是一个令牌,但这不相关),Hive配置已准备好进行模拟(见下文) ,我希望HiveServer2以我的用户身份执行查询。然而,它使用hive用户,该用户对我的HDFS用户空间没有任何权限。

例如,如果我创建一个表:

> create external table mytable (name string, job string, age string) row format delimited fields terminated by ',' location '/user/frb/testdir'
Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=hive, access=EXECUTE, inode="/user/frb":frb:frb:drwxr-----
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:265)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:251)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:205)
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:168)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5519)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3517)
    at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:785)
    at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:764)
    at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
    at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1594)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007)
)

关于相关的配置参数,这是我的配置(简化,而不是XML):

hive-site.xml

com.telefonica.iot.idm.endpoint=https://account.lab.fiware.org
hive.server2.enable.doAs=true
hive.server2.authentication=CUSTOM
hive.server2.custom.authentication.class=com.telefonica.iot.cosmos.hive.authprovider.OAuth2AuthenticationProviderImpl

core-site.xml

hadoop.proxyuser.hive.groups=*
hadoop.proxyuser.hive.hosts=*

您可以查看自定义Hive身份验证器提供程序代码here

我正在使用Hive 0.13.0

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

请检查" hive.metastore.execute.setugi"在HiverServer2主机节点和Hive Metastore主机节点中的步骤1和步骤2中分别设置为true。请注意,必须在客户端/网关节点,HiverServer2和Hive Metastore主机节点上都设置此属性。

参考:http://doc.mapr.com/display/MapR/Hive+User+Impersonation

答案 1 :(得分:0)

如果您的Hive受Kerberos保护,我需要对您的身份验证方式进行一些修改。 Kerberos不允许通过令牌

进行模拟

https://www.cloudera.com/documentation/enterprise/5-8-x/topics/admin_hdfs_proxy_users.html#hdfs_proxy_users__section_fvj_fmp_dw