我已经开发了一个自定义身份验证器提供程序,在身份验证方面一切正常: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)
)
Run Code Online (Sandbox Code Playgroud)
关于相关配置参数,这是我的配置(简化,而不是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
Run Code Online (Sandbox Code Playgroud)
core-site.xml:
hadoop.proxyuser.hive.groups=*
hadoop.proxyuser.hive.hosts=*
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看自定义Hive身份验证器提供程序代码.
我正在使用Hive 0.13.0
请问有人帮帮我吗?
请分别检查 HiverServer2 主机节点和 Hive Metastore 主机节点中的步骤 1 和步骤 2 中的“hive.metastore.execute.setugi”是否设置为 true。请注意,必须在客户端/网关节点、HiverServer2 和 Hive Metastore 主机节点上设置此属性。
参考: http: //doc.mapr.com/display/MapR/Hive+User+Impersonation
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |