Mam opracowany dostawcy zwyczaj Authenticator na wszystko wydaje się OK, jeśli chodzi o uwierzytelnianiu: HiveServer2 zaczyna się dobrze i połączenia uwierzytelnione są właściwie zatwierdzone. Nawet proste kwerendy Hive działają, na przykład show tables
.Hive personifikacja nie współpracuje z dostawcą zwyczaj Authenticator
Problem jest, gdy próbuję wykonać kwerendy z klienta zdalnego ula. Od kiedy podłączyłem przekazywanie moich danych uwierzytelniających (użytkownik + hasło ... cóż, tak naprawdę to nie jest to hasło, to jest token, ale to nie ma znaczenia), a konfiguracja Hive jest gotowa na podszywanie się (patrz poniżej), spodziewałem się, że HiveServer2 wykona zapytanie jako mój użytkownik. Mimo to używa użytkownika hive
, który nie ma uprawnień do mojej przestrzeni użytkownika HDFS.
Na przykład, jeśli tworzę tabelę:
> 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)
)
Regarding odpowiednich parametrów konfiguracyjnych, to moja konfiguracja (uproszczony, a nie XML podobne):
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=*
Można spojrzeć na zlecenie Hive Authenticator kodu dostawcy here.
Używam gałąź 0.13.0
Czy ktoś może mi pomóc, proszę?
Gdzie są ustawione te właściwości 'hadoop.proxyuser..''? – franklinsijo
Ustawienia 'hadoop.proxyuser ...' mieszczą się w 'core-site.xml'. Pozostałe znajdują się w 'hive-site.xml'. Sprawdziłem, czy są dostępne od niestandardowego dostawcy auth. – frb
@frb Czy uruchomiłeś ponownie serwer hiveserver2 po wprowadzeniu zmian? – Marco99