簡體   English   中英

Polybase EXTERNAL TABLE訪問失敗 - 權限被拒絕

[英]Polybase EXTERNAL TABLE access failed - permission denied

我想在sql server 2016中通過polybase連接到hadoop。我的代碼是:

 CREATE EXTERNAL DATA SOURCE MyHadoopCluster WITH (  
      TYPE = HADOOP,   
       LOCATION ='hdfs://192.168.114.20:8020', 
       credential= HadoopUser1  
      );  


CREATE EXTERNAL FILE FORMAT TextFileFormat WITH (  
        FORMAT_TYPE = DELIMITEDTEXT,   
     FORMAT_OPTIONS (FIELD_TERMINATOR ='\001',   
             USE_TYPE_DEFAULT = TRUE)
);


CREATE EXTERNAL TABLE [dbo].[test_hadoop] (  
        [Market_Name] int NOT NULL,   
        [Claim_GID] int NOT NULL,   
        [Completion_Flag] int NULL,   
        [Diag_CDE] float NOT NULL,   
        [Patient_GID] int NOT NULL, 
        [Record_ID] int NOT NULL, 
        [SRVC_FROM_DTE] int NOT NULL  
)  
WITH (LOCATION='/applications/gidr/processing/lnd/sha/clm/cf/claim_diagnosis',   
        DATA_SOURCE = MyHadoopCluster,  
        FILE_FORMAT = TextFileFormat

);  

我收到了這個錯誤:

由於內部錯誤,EXTERNAL TABLE訪問失敗:'調用HdfsBridge_GetDirectoryFiles時出現Java異常:錯誤[Permission denied:user = pdw_user,access = READ_EXECUTE,inode =“/ applications / gidr / processing / lnd / sha / clm / cf / claim_diagnosis “:root:supergroup:drwxrwxr-- at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:281)org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider) .java:262)org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:175)org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:152) )org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6590)org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6572)at org。 apache.hadoop.hdfs.server.namenode.FSNamesystem.che ckPathAccess(FSNamesystem.java:6497)位於org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getListingInt(FSNamesystem.java:5034)org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getListing(FSNamesystem。 java:4995)org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getListing(NameNodeRpcServer.java:882)at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getListing(AuthorizationProviderProxyClientProtocol.java:335)在Org.apache的org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getListing(ClientNamenodeProtocolServerSideTranslatorPB.java:615)org.apache中的org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingMethod(ClientNamenodeProtocolProtos.java)。 hadoop.ipc.ProtobufRpcEngine $ Server $ ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)org.apache.hadoop.ipc.RPC $ Server.call(RPC.java:1073)org.apache.hadoop.ipc.Server $處理程序$ 1.run(Server.java:2086)在org.apache.had oop.ipc.Server $ Handler $ 1.run(Server.java:2082)位於org.apache的javax.security.auth.Subject.doAs(Subject.java:415)的java.security.AccessController.doPrivileged(Native Method)訪問外部文件時發生.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)org.apache.hadoop.ipc.Server $ Handler.run(Server.java:2080)]。

問題是,在最新版本的polybase中沒有配置文件,您可以在其中指定hadoop默認登錄名和密碼。 所以即使在我創建范圍憑證時,polybase仍然使用默認的pdw_user。 我甚至嘗試在hadoop上創建pdw_user,但仍然遇到此錯誤。 有任何想法嗎?

如果您有Kerberos安全的Hadoop集群,請確保按照描述https://docs.microsoft.com/en-us/sql/relational-databases/polybase/polybase-configuration更改xml文件

如果它不是Kerberos安全的Hadoop集群,請確保默認用戶pdw_user具有對hdfs的讀訪問權並對Hive執行權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM