簡體   English   中英

Polybase 到 Azure Data Lake Gen 2 失敗

[英]Polybase to Azure Data Lake Gen 2 Failing

我正在嘗試通過 Polybase 從 Azure SQLDW 連接到 Data Lake Gen 2 中的 Parquet 文件。這是我的代碼:

CREATE DATABASE SCOPED CREDENTIAL DSC_ServicePrincipal
    WITH IDENTITY = '1234567890@https://login.microsoftonline.com/1234567890/oauth2/token',
    SECRET = '1234567890'
GO

CREATE EXTERNAL DATA SOURCE [DS_ADLS] WITH (TYPE = HADOOP, 
        LOCATION = N'abfss://filesystem@storageacc.dfs.core.windows.net', 
        CREDENTIAL = DSC_ServicePrincipal)
GO

CREATE EXTERNAL FILE FORMAT [ParquetFileFormatSnappy] 
WITH (FORMAT_TYPE = PARQUET, DATA_COMPRESSION = N'org.apache.hadoop.io.compress.SnappyCodec')
GO

CREATE EXTERNAL TABLE [dbo].[DimDate]
  (
        [DateSKey]        int   not null,
      [Date]              date  not null,
      [Year]              int   not null,
      [Month]             int   not null,
      [Day]             int not null,
      [WeekOfYear]      int not null,
      [MonthNameShort]  varchar(50) not null,
      [MonthName]         varchar(50)   not null,
      [DayNameShort]      varchar(50)   not null,
      [DayName]         varchar(50) not null
  )
  WITH (DATA_SOURCE = [DS_ADLS],LOCATION = N'/PRESENTED/dimDate',FILE_FORMAT = [ParquetFileFormatSnappy],REJECT_TYPE = VALUE,REJECT_VALUE = 0)

create external table 執行失敗,返回如下錯誤:

訪問 HDFS 時出錯:調用 HdfsBridge_IsDirExist 時引發 Java 異常。 Java 異常消息:HdfsBridge::isDirExist - 檢查目錄是否存在時遇到意外錯誤:AbfsRestOperationException: HEAD https://xxxx.dfs.core.windows.net/xxxx?resource=filesystem&timeout=90 StatusCode=403 StatusDescription=Server failed來驗證請求。 確保 Authorization 標頭的值形成正確,包括簽名。 錯誤代碼= 錯誤消息=

該目錄確實存在並且我的服務主體可以訪問。 我已經通過使用來自 Databricks 的相同服務主體並正確讀取文件來確認這一點。

我對我做錯了什么感到迷茫。

問題是 abfs/abfss 當前不支持用戶提供的 oauth 憑據。

支持的身份驗證方法有:

  • 存儲帳戶密鑰
  • 基於 MSI 的身份驗證

順便說一句,Gen2 現在支持 Oauth2.0 如果您已驗證路徑和權限是否正確,即通過 Azure Databricks,我會懷疑它的網絡相關。 嘗試使用具有不受限制的網絡設置的存儲帳戶進行確認。

由於啟用了存儲 FW,您可能會收到此錯誤 - 查看此處的文檔,您可以看到使用各種權限類型表示 FW 限制的星號。 復制到你可以參考這個授權表

通常,您可以在存儲網絡中“允許受信任的微軟服務”,但是這僅在使用 MSI 時才有效 - 在您的情況下,您使用的是 SPN。

如果您仍然想使用服務主體或用戶身份(而不是 MSI)查詢您的數據湖,您可以嘗試通過 powershell 執行此處步驟,這將允許 Synapse 專用池(以前稱為 SQLDW)傳遞存儲 FW,然后切換到SPN 或 UPN 以針對 POSIX ACL 進行授權。

最后,這是一篇很好的博客文章,討論了不同的選項

暫無
暫無

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

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