什麼是自動加載文件通知模式?
在文件通知模式下,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及以上版本中,僅當提供無連接字符串的服務主體時需要此角色。
為該應用分配如下角色到相關的資源組中:
EventGrid事件訂閱貢獻者:該角色用於執行事件網格訂閱操作,例如創建或列出事件訂閱。
有關更多信息,請參見使用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時,需要提供以下權限:
配置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規範中的名稱前綴cloudFiles
source在創建SQS和SNS服務時使用。由於Databricks在流的初始運行中設置了通知服務,您可以在初始運行後使用權限減少的策略(例如,停止流,然後重新啟動它)。
請注意
上述策略隻考慮建立文件通知服務所需的權限,即S3桶通知、SNS和SQS服務,並假設您已經對S3桶具有讀訪問權限。如果需要增加S3隻讀權限,請在行動
列於DatabricksAutoLoaderSetup
JSON文檔中的語句:
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角色來覆蓋這些權限。
“文件通知方式”中創建自定義穀歌雲IAM角色
在相應項目的穀歌Cloud控製台中,導航到我&管理>角色
.然後,在頂部創建角色或更新現有角色。在角色創建或編輯界麵,單擊添加權限
.將出現一個菜單,您可以在其中向角色添加所需的權限。
手動配置或管理文件通知資源
特權用戶可以手動配置或管理文件通知資源。
通過雲提供程序手動設置文件通知服務,並手動指定隊列標識符。看到文件通知選項欲知詳情。
使用Scala api創建或管理通知和排隊服務,示例如下:
///////////////////////////////////////在AWS中創建ResourceManager/////////////////////////////////////進口com.磚.sql.CloudFilesAWSResourceManager瓦爾經理=CloudFilesAWSResourceManager.新任.選項(“cloudFiles.region”,<地區>)//可選,將默認使用EC2實例的區域.選項(“路徑”,<路徑-來-具體的-桶-而且-文件夾>)//隻需要setUpNotificationServices.創建()/////////////////////////////////////////在Azure中創建ResourceManager///////////////////////////////////////進口com.磚.sql.CloudFilesAzureResourceManager瓦爾經理=CloudFilesAzureResourceManager.新任.選項(“cloudFiles.connectionString”,<連接-字符串>).選項(“cloudFiles.resourceGroup”,<資源-集團>).選項(“cloudFiles.subscriptionId”,<訂閱-id>).選項(“cloudFiles.tenantId”,<租戶-id>).選項(“cloudFiles.clientId”,<服務-主要-客戶端-id>).選項(“cloudFiles.clientSecret”,<服務-主要-客戶端-秘密>).選項(“路徑”,<路徑-來-具體的-容器-而且-文件夾>)//隻需要setUpNotificationServices.創建()/////////////////////////////////////////在GCP中創建ResourceManager///////////////////////////////////////進口com.磚.sql.CloudFilesGCPResourceManager瓦爾經理=CloudFilesGCPResourceManager.新任.選項(“路徑”,<路徑-來-具體的-桶-而且-文件夾>)//隻有setUpNotificationServices才需要。.創建()//設置隊列和主題訂閱到管理器中提供的路徑。經理.setUpNotificationServices(<資源-後綴>)//列出 .創建的通知服務 瓦爾df=經理.listNotificationServices()//刪除為特定流ID創建的通知服務//流ID是一個GUID字符串,可以在上麵的列表結果中找到。經理.tearDownNotificationServices(<流-id>)
使用setUpNotificationServices (< resource-suffix >)
創建名稱為的隊列和訂閱<前綴> - < resource-suffix >
(該前綴取決於文中所概括的存儲係統Auto Loader文件通知方式使用的雲資源.如果存在同名的現有資源,Databricks將重用現有資源,而不是創建新的資源。函數返回一個隊列標識符,可以傳遞給cloudFiles
中的標識符文件通知選項.這將啟用cloudFiles
源用戶的權限小於創建資源的用戶。
提供“路徑”
選項新任
隻有在打電話的時候setUpNotificationServices
;它不需要listNotificationServices
或tearDownNotificationServices
.這是一樣的路徑
運行流查詢時使用的。
下麵的矩陣表示每種類型的存儲在Databricks Runtime中支持哪些API方法:
雲存儲 |
安裝API |
列表API |
拆除API |
---|---|---|---|
AWS S3 |
所有版本 |
所有版本 |
所有版本 |
ADLS代 |
所有版本 |
所有版本 |
所有版本 |
GCS |
Databricks運行時9.1及以上版本 |
Databricks運行時9.1及以上版本 |
Databricks運行時9.1及以上版本 |
Azure Blob存儲 |
所有版本 |
所有版本 |
所有版本 |
ADLS Gen1 |
不支持的 |
不支持的 |
不支持的 |