什麼是自動加載文件通知模式?

在文件通知模式下,Auto Loader自動設置一個通知服務和隊列服務,訂閱來自輸入目錄的文件事件。您可以使用文件通知來擴展自動加載器,以每小時吸收數百萬個文件。與目錄列表模式相比,文件通知模式對於大型輸入目錄或大量文件具有更高的性能和可伸縮性,但需要額外的雲權限。

您可以隨時在文件通知和目錄列表之間切換,並且仍然保持精確的一次數據處理保證。

Auto Loader文件通知方式使用的雲資源

重要的

您需要提升權限來自動配置文件通知模式的雲基礎設施。聯係您的雲管理員或工作區管理員。看到的:

當你設置這個選項時,Auto Loader可以自動為你設置文件通知cloudFiles.useNotifications真正的並提供創建雲資源所需的權限。此外,您可能需要提供附加選項授予自動加載器創建這些資源的授權。

下表總結了由Auto Loader創建的資源。

雲存儲

訂閱服務

隊列服務

前綴*

限製* *

AWS S3

AWS SNS

AWS SQS

databricks-auto-ingest

每個S3桶100塊

ADLS代

Azure事件網格

Azure隊列存儲

每個存儲帳戶500

GCS

穀歌發布/訂閱

穀歌發布/訂閱

databricks-auto-ingest

每個GCS桶100

Azure Blob存儲

Azure事件網格

Azure隊列存儲

每個存儲帳戶500

* Auto Loader以此前綴命名資源。

**可以啟動多少個並發文件通知管道

如果您需要為給定的存儲帳戶運行超過有限數量的文件通知管道,您可以:

  • 考慮重新架構文件的上傳方式,以利用目錄列表模式增量清單而不是文件通知。

  • 利用AWS Lambda、Azure Functions或穀歌Cloud Functions等服務,將通知從偵聽整個容器或桶的單個隊列扇形展開到特定於目錄的隊列。

文件通知事件

AWS S3提供ObjectCreated當文件上傳到S3桶時,不管它是通過put上傳還是多部分上傳,都會發生事件。

ADLS Gen2為出現在Gen2容器中的文件提供不同的事件通知。

  • Auto Loader監聽FlushWithClose事件,用於處理文件。

  • 使用Databricks Runtime 8.3及以後版本創建的Auto Loader流支持RenameFile發現文件的操作。RenameFile操作需要一個API請求存儲係統來獲得重命名文件的大小。

  • 使用Databricks Runtime 9.0及以後版本創建的Auto Loader流支持RenameDirectory發現文件的操作。RenameDirectory操作需要API請求存儲係統來列出重命名目錄的內容。

穀歌雲存儲提供OBJECT_FINALIZE事件,其中包括文件覆蓋和文件副本。上傳失敗不會產生此事件。

請注意

雲提供商不保證在非常罕見的情況下100%交付所有文件事件,也不提供嚴格的文件事件延遲sla。Databricks建議使用自動加載器觸發常規回填cloudFiles.backfillInterval選項,如果要求數據完整性,則保證在給定SLA內發現所有文件。觸發常規回填不會導致重複。

為ADLS Gen2和Azure Blob存儲配置文件通知所需的權限

您必須對輸入目錄具有讀權限。看到Azure Blob存儲

要使用文件通知模式,必須提供用於設置和訪問事件通知服務的身份驗證憑據。在Databricks Runtime 8.1及以上版本中,您隻需要一個服務主體進行身份驗證。對於Databricks Runtime 8.0及以下版本,必須同時提供服務主體和連接字符串。

  • 服務主體——使用Azure內置角色

    創建Azure活動目錄應用程序和服務主體客戶端ID和客戶端秘密的形式。

    將以下角色分配給輸入路徑所在的存儲帳戶:

    • 貢獻者:設置存儲帳戶中的資源,如隊列、事件訂閱等。

    • 存儲隊列數據貢獻者:用於隊列操作,如從隊列中提取消息、刪除消息等。在Databricks Runtime 8.1及以上版本中,僅當提供無連接字符串的服務主體時需要此角色。

    為該應用分配如下角色到相關的資源組中:

    有關更多信息,請參見使用Azure門戶分配Azure角色

  • 服務主體——使用自定義角色

    如果您擔心上述角色需要過多的權限,您可以創建一個自定義角色至少擁有以下權限,以Azure角色JSON格式列出:

    “權限”“行動”“微軟。EventGrid/eventSubscriptions/write"“微軟。EventGrid/eventSubscriptions/read"“微軟。EventGrid/eventSubscriptions/delete"“微軟。EventGrid/locations/eventSubscriptions/read"“微軟。存儲/storageAccounts/read"“微軟。存儲/storageAccounts/write"“微軟。存儲/storageAccounts/queueServices/read"“微軟。存儲/storageAccounts/queueServices/write"“微軟。存儲/storageAccounts/queueServices/queues/write"“微軟。存儲/storageAccounts/queueServices/queues/read"“微軟。存儲/storageAccounts/queueServices/queues/delete"],“notActions”[],“dataActions”“微軟。存儲/storageAccounts/queueServices/queues/messages/delete"“微軟。存儲/storageAccounts/queueServices/queues/messages/read"“微軟。存儲/storageAccounts/queueServices/queues/messages/write"“微軟。存儲/storageAccounts/queueServices/queues/messages/process/action"],“notDataActions”[]

    然後,你可以將這個自定義角色分配給你的應用程序。

    有關更多信息,請參見使用Azure門戶分配Azure角色

  • 連接字符串

    自動加載器需要一個連接字符串為Azure隊列存儲操作進行身份驗證,例如創建隊列以及從隊列中讀取和刪除消息。隊列是在輸入目錄路徑所在的存儲帳戶中創建的。您可以在您的賬戶關鍵共享訪問簽名(SAS)

    如果您使用的是Databricks Runtime 8.1或以上版本,則不需要連接字符串。

    如果您使用的是Databricks Runtime 8.0或以下版本,則必須提供一個連接字符串為Azure隊列存儲操作進行身份驗證,例如創建隊列以及從隊列中檢索和刪除消息。隊列是在輸入路徑所在的存儲帳戶中創建的。您可以在您的賬戶關鍵共享訪問簽名(SAS).配置SAS token時,需要提供以下權限:

自動加載器權限

常見錯誤處理

錯誤:

javaRuntimeException失敗的創建事件網格訂閱

如果您在第一次運行自動加載器時看到此錯誤消息,則事件網格未注冊為Azure訂閱中的資源提供程序。要在Azure門戶上注冊:

  1. 去訂閱吧。

  2. 點擊資源提供者在設置部分。

  3. 注冊提供者微軟。EventGrid

錯誤:

403被禁止的...授權執行行動“微軟。EventGrid/eventSubscriptions/[read|write]'範圍...

如果您在第一次運行自動加載程序時看到此錯誤消息,請確保您已指定貢獻者角色傳遞給事件網格的服務主體以及存儲帳戶。

配置AWS S3文件通知所需權限

您必須對輸入目錄具有讀權限。看到S3連接詳細信息欲知詳情。

若要使用文件通知模式,請將以下JSON策略文檔附加到您的IAM用戶或角色

“版本”“2012-10-17”“聲明”“席德”“DatabricksAutoLoaderSetup”“效應”“允許”“行動”“s3: GetBucketNotification”“s3: PutBucketNotification”“sns: ListSubscriptionsByTopic”“sns: GetTopicAttributes”“sns: SetTopicAttributes”“sns: CreateTopic”“sns: TagResource”“sns:發布”“sns:訂閱”“sqs: CreateQueue”“sqs: DeleteMessage”“sqs: DeleteMessageBatch”“sqs: ReceiveMessage”“sqs: SendMessage”“sqs: GetQueueUrl”“sqs: GetQueueAttributes”“sqs: SetQueueAttributes”“sqs: TagQueue”“sqs: ChangeMessageVisibility”“sqs: ChangeMessageVisibilityBatch”],“資源”“攻擊:aws: s3::: < bucket名>”“攻擊:aws: sqs: <地區>:<帳號>:databricks-auto-ingest - *”“攻擊:aws: sns: <地區>:<帳號>:databricks-auto-ingest - *”},“席德”“DatabricksAutoLoaderList”“效應”“允許”“行動”“sqs: ListQueues”“sqs: ListQueueTags”“sns: ListTopics”],“資源”“*”},“席德”“DatabricksAutoLoaderTeardown”“效應”“允許”“行動”“sns:退訂”“sns: DeleteTopic”“sqs: DeleteQueue”],“資源”“攻擊:aws: sqs: <地區>:<帳號>:databricks-auto-ingest - *”“攻擊:aws: sns: <地區>:<帳號>:databricks-auto-ingest - *”

地點:

  • < bucket名>: S3桶名,流將在其中讀取文件,例如:自動對數.你可以使用例如,作為通配符,磚- *日誌.要找出DBFS路徑的底層S3存儲桶,可以運行以下命令在筆記本中列出所有DBFS掛載點% fs掛載

  • <地區>: S3桶所在的AWS區域,例如:us-west-2.如果不想指定區域,請使用

  • <帳號>: S3桶所屬的AWS帳號。123456789012.如果不想指定帳號,請使用

的字符串databricks-auto-ingest - *在SQS和SNS ARN規範中的名稱前綴cloudFilessource在創建SQS和SNS服務時使用。由於Databricks在流的初始運行中設置了通知服務,您可以在初始運行後使用權限減少的策略(例如,停止流,然後重新啟動它)。

請注意

上述策略隻考慮建立文件通知服務所需的權限,即S3桶通知、SNS和SQS服務,並假設您已經對S3桶具有讀訪問權限。如果需要增加S3隻讀權限,請在行動列於DatabricksAutoLoaderSetupJSON文檔中的語句:

  • s3: ListBucket

  • s3: GetObject

初始設置後權限減少

上麵描述的資源設置權限僅在流的初始運行期間需要。第一次運行後,您可以切換到以下權限減少的IAM策略。

重要的

通過減少權限,您不能啟動新的流查詢或在失敗的情況下重新創建資源(例如,SQS隊列被意外刪除);你也不能使用雲資源管理API來列出或刪除資源。

“版本”“2012-10-17”“聲明”“席德”“DatabricksAutoLoaderUse”“效應”“允許”“行動”“s3: GetBucketNotification”“sns: ListSubscriptionsByTopic”“sns: GetTopicAttributes”“sns: TagResource”“sns:發布”“sqs: DeleteMessage”“sqs: DeleteMessageBatch”“sqs: ReceiveMessage”“sqs: SendMessage”“sqs: GetQueueUrl”“sqs: GetQueueAttributes”“sqs: TagQueue”“sqs: ChangeMessageVisibility”“sqs: ChangeMessageVisibilityBatch”],“資源”“攻擊:aws: sqs: <地區>:<帳號>:<隊列名稱>”“攻擊:aws: sns: <地區>:<帳號>:<主題名稱>”“攻擊:aws: s3::: < bucket名>”},“效應”“允許”“行動”“s3: GetBucketLocation”“s3: ListBucket”],“資源”“攻擊:aws: s3::: < bucket名>”},“效應”“允許”“行動”“s3: propertynames”“s3: PutObjectAcl”“s3: GetObject”“s3: DeleteObject”],“資源”“攻擊:aws: s3::: < bucket名> / *”},“席德”“DatabricksAutoLoaderListTopics”“效應”“允許”“行動”“sqs: ListQueues”“sqs: ListQueueTags”“sns: ListTopics”],“資源”“攻擊:aws: sns: <地區>:<帳號>:*”

在不同的AWS帳戶中安全地攝取數據

Auto Loader可以通過假設IAM角色來跨AWS帳戶加載數據。設置創建的臨時安全憑據後AssumeRole,您可以使用自動加載器跨帳戶加載雲文件。要為跨aws帳戶設置自動加載器,請參考文檔:使用gauserole策略訪問跨帳戶S3桶.確保你:

  • 驗證已將假想角色分配給集群。

  • 配置集群的Spark配置以包含以下屬性:

    fs.s3a。credentialsType AssumeRolefs.s3a.stsAssumeRole。在攻擊攻擊:aws:我::< bucket-owner-acct-id >: / MyRoleB角色fs.s3a.acl.default BucketOwnerFullControl

配置GCS文件通知所需權限

你一定有列表而且得到你的GCS桶和所有對象的權限。具體操作請參見穀歌的文檔我的權限

使用文件通知方式時,需要為GCS服務帳戶訪問穀歌雲發布/訂閱資源的帳號。

添加發布/訂閱出版商角色切換到GCS服務帳戶。這允許帳戶從您的GCS桶發布事件通知消息到穀歌雲發布/訂閱。

對於穀歌雲發布/訂閱資源使用的業務帳號,需要添加以下權限:

pubsub訂閱消費pubsub訂閱創建pubsub訂閱刪除pubsub訂閱得到pubsub訂閱列表pubsub訂閱更新pubsub主題attachSubscriptionpubsub主題創建pubsub主題刪除pubsub主題得到pubsub主題列表pubsub主題更新

要做到這一點,你可以選擇創建IAM自定義角色使用這些權限或分配預先存在的GCP角色來覆蓋這些權限。

查找GCS服務帳號

在對應項目的穀歌雲控製台中,導航到存儲>設置.“雲存儲服務賬號”為GCS服務賬號的郵箱。

GCS服務帳戶

“文件通知方式”中創建自定義穀歌雲IAM角色

在相應項目的穀歌Cloud控製台中,導航到管理>角色.然後,在頂部創建角色或更新現有角色。在角色創建或編輯界麵,單擊添加權限.將出現一個菜單,您可以在其中向角色添加所需的權限。

IAM自定義角色

手動配置或管理文件通知資源

特權用戶可以手動配置或管理文件通知資源。

  • 通過雲提供程序手動設置文件通知服務,並手動指定隊列標識符。看到文件通知選項欲知詳情。

  • 使用Scala api創建或管理通知和排隊服務,示例如下:

請注意

您必須具有適當的權限才能配置或修改雲基礎設施。請參閱權限文檔AzureS3,或GCS

///////////////////////////////////////在AWS中創建ResourceManager/////////////////////////////////////進口comsqlCloudFilesAWSResourceManager瓦爾經理CloudFilesAWSResourceManager新任選項“cloudFiles.region”<地區>//可選,將默認使用EC2實例的區域選項“路徑”<路徑--具體的--而且-文件夾>//隻需要setUpNotificationServices創建()/////////////////////////////////////////在Azure中創建ResourceManager///////////////////////////////////////進口comsqlCloudFilesAzureResourceManager瓦爾經理CloudFilesAzureResourceManager新任選項“cloudFiles.connectionString”<連接-字符串>選項“cloudFiles.resourceGroup”<資源-集團>選項“cloudFiles.subscriptionId”<訂閱-id>選項“cloudFiles.tenantId”<租戶-id>選項“cloudFiles.clientId”<服務-主要-客戶端-id>選項“cloudFiles.clientSecret”<服務-主要-客戶端-秘密>選項“路徑”<路徑--具體的-容器-而且-文件夾>//隻需要setUpNotificationServices創建()/////////////////////////////////////////在GCP中創建ResourceManager///////////////////////////////////////進口comsqlCloudFilesGCPResourceManager瓦爾經理CloudFilesGCPResourceManager新任選項“路徑”<路徑--具體的--而且-文件夾>//隻有setUpNotificationServices才需要。創建()//設置隊列和主題訂閱到管理器中提供的路徑。經理setUpNotificationServices<資源-後綴>//列出 .創建的通知服務瓦爾df經理listNotificationServices()//刪除為特定流ID創建的通知服務//流ID是一個GUID字符串,可以在上麵的列表結果中找到。經理tearDownNotificationServices<-id>

使用setUpNotificationServices (< resource-suffix >)創建名稱為的隊列和訂閱<前綴> - < resource-suffix >(該前綴取決於文中所概括的存儲係統Auto Loader文件通知方式使用的雲資源.如果存在同名的現有資源,Databricks將重用現有資源,而不是創建新的資源。函數返回一個隊列標識符,可以傳遞給cloudFiles中的標識符文件通知選項.這將啟用cloudFiles源用戶的權限小於創建資源的用戶。

提供“路徑”選項新任隻有在打電話的時候setUpNotificationServices;它不需要listNotificationServicestearDownNotificationServices.這是一樣的路徑運行流查詢時使用的。

下麵的矩陣表示每種類型的存儲在Databricks Runtime中支持哪些API方法:

雲存儲

安裝API

列表API

拆除API

AWS S3

所有版本

所有版本

所有版本

ADLS代

所有版本

所有版本

所有版本

GCS

Databricks運行時9.1及以上版本

Databricks運行時9.1及以上版本

Databricks運行時9.1及以上版本

Azure Blob存儲

所有版本

所有版本

所有版本

ADLS Gen1

不支持的

不支持的

不支持的