2017-03-01 38 views
8

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ę?

+0

Gdzie są ustawione te właściwości 'hadoop.proxyuser..''? – franklinsijo

+0

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

+0

@frb Czy uruchomiłeś ponownie serwer hiveserver2 po wprowadzeniu zmian? – Marco99

Odpowiedz

0

Proszę sprawdzić, czy "hive.metastore.execute.setugi" jest ustawione na wartość true, tak jak w kroku 1 i kroku 2 odpowiednio w węzłach hosta (węzłach) HiverServer2 i Hive Metastore (węzłach) hosta. Należy zauważyć, że ta właściwość musi być ustawiona zarówno na węzłach klienta/bramy, węzłach hosta HiverServer2, jak i Hive Metastore.

Numer referencyjny: http://doc.mapr.com/display/MapR/Hive+User+Impersonation

+0

'hive.metastore.execute.setugi' jest ustawione na' true' w 'hive-site.xml'. Te pliki właściwości znajdują się w węźle, na którym działa Klient Hive, HiveServer2, Hive Metastore i serwer MySQL, dzięki czemu są dostępne dla wszystkich tych usług. – frb