2017-01-17 2 views
0

Ich versuche, Parkett-Dateien auf einem hdfs-Cluster über Apache Drill (verteilter Modus) abzufragen. Ich habe einen neuen Speicher Plugin namens 'hdfs' erstellt, die folgenden Konfiguration enthält:Berechtigungsfehler | Apach Drill Abfrage | HDFS

{ 
    "type": "file", 
    "enabled": true, 
    "connection": "hdfs://<my-name-node-host>:8020", 
    "config": null, 
    "workspaces": { 
    "root": { 
     "location": "/", 
     "writable": true, 
     "defaultInputFormat": null 
    } 
    }, 
    "formats": { 
    "json": { 
     "type": "json", 
     "extensions": [ 
     "json" 
     ] 
    }, 
    "parquet": { 
     "type": "parquet" 
    } 
    } 
} 

In der hadoop fs ich die Beispieldatei region.parquet in /user/tj/ Ordnern. Es hat den Besitzer und die Gruppe als hdfs:hdfs standardmäßig und ich möchte es so behalten.

Aber wenn ich versuche, es von Apache Drill UI über folgende SQL-Abfrage abzufragen: SELECT * FROM hdfs. /user/tj/region.parquet Es wirft die Ausnahme, wie unten:

org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR: RemoteException: Permission denied: user=, access=EXECUTE, inode="/user/tj/region.parquet/.drill.parquet_metadata":hdfs:hdfs:-rw-r--r-- at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:259) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:205) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190) at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1827) at org.apache.hadoop.hdfs.server.namenode.FSDirStatAndListingOp.getFileInfo(FSDirStatAndListingOp.java:108) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3972) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1130) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:851) at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2313) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2309) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1724) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2307) [Error Id: 24bf0cf0-0181-4c72-97ee-4b4eb98771bf on :31010]

Wie behebe ich die Einwilligung Ausgabe der hadoop Cluster-Dateien mit Apache Bohrer abfragen?

Wie die Abfrage als hdfs Benutzer ausführen?

Antwort

0

Ich denke, Sie haben den Benutzer Identitätswechsel konfigurieren. Sie können den folgenden Link folgen, um die Ansicht Erlaubnis für die Apache Drill zu geben. Ich habe den Apache Bohrer nicht benutzt, also bitte im Kommentar aktualisieren, ob es gut funktioniert.

Configure user impersonation link

+0

Gemäß der docsm die Clients für die Benutzer impersontation nicht unterstützt wird: Drill Web Console, REST-API. Ich benutze Drill Web-Konsole, so wie Sie das gleiche erreichen. – taransaini43

+0

Wie auch immer, ich begann den Drillbit-Service auf allen Hosts als hdfs Benutzer als eine schnelle Lösung - jetzt arbeiten. Danke für Ihre Hilfe. – taransaini43