[英]PolyBase create an external table to query Hadoop, column count mismatch
[英]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.