2017-03-01 11 views
8

私はカスタム認証プロバイダを開発しました。認証に関してはすべてのことがOKです.HiveServer2が正常に起動し、認証された接続が適切に検証されます。 show tablesのような単純なHiveクエリも機能します。カスタム認証プロバイダと連携していないハイブ偽装

問題は、リモートのハイブクライアントからクエリを実行しようとするときです。私は自分の資格情報(ユーザー+パスワード...を渡して接続しているので、実際にはパスワードではなくトークンですが、それは関係ありません)、Hive設定は偽装の準備ができています。私のユーザーとしての質問。それにもかかわらず、ユーザはhiveというユーザを使用しますが、私のHDFSユーザスペースにはアクセス権がありません。例えば

私はテーブル作成した場合、:

hive-site.xml:関連する設定パラメータについて

> 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など)である

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を見ることができます。

私は誰もが、私を助けてくださいことはできますハイブ0.13.0に

を使用していますか?

+0

? – franklinsijo

+0

'hadoop.proxyuser ...'の設定は 'core-site.xml'の中にあります。他のものは 'hive-site.xml'の中にあります。カスタムの認証プロバイダからアクセス可能であることを確認しました。 – frb

+0

@frb変更を加えた後にhiveserver2を再起動しましたか? – Marco99

答えて

0

HiverServer2ホストノードとHive Metastoreホストノードで、それぞれ手順1と手順2と同様に「hive.metastore.execute.setugi」がtrueに設定されていることを確認してください。このプロパティは、クライアント/ゲートウェイノード、HiverServer2およびHive Metastoreホストノードの両方で設定する必要があります。

参考:これら `hadoop.proxyuser..`プロパティが設定されているhttp://doc.mapr.com/display/MapR/Hive+User+Impersonation

+0

'hive.metastore.execute.setugi'は' hive-site.xml'で 'true'に設定されています。このプロパティファイルは、Hive Client、HiveServer2、Hive Metastore、およびMySQLサーバーを実行しているノードに配置されているため、これらのサービスすべてにアクセスできます。 – frb

関連する問題