自动加载程序文件通知模式是什么?

在文件通知模式,自动加载程序自动设置通知服务和队列服务订阅文件事件从输入目录。您可以使用文件通知规模汽车装载机摄取数以百万计的文件一个小时。目录清单模式相比,文件通知模式是更多的性能和可伸缩性大输入目录或大容量的文件,但需要额外云权限。

你可以随时切换文件通知和目录清单,仍然保持只有一次数据处理担保。

云资源用于自动加载程序文件通知模式

重要的

你需要提升权限自动配置文件通知模式的云基础设施。联系你的云管理员或工作区管理。看到的:

自动加载程序可以设置文件的通知你时自动设置选项cloudFiles.useNotifications真正的和提供必要的权限来创建云资源。此外,您可能需要提供附加选项授予自动加载程序授权创建这些资源。

下面的表总结了哪些资源是由自动加载程序。

云存储

订阅服务

队列服务

前缀*

限制* *

AWS S3

AWS SNS

AWS SQS

databricks-auto-ingest

每个S3 bucket 100

ADLS代

Azure事件网格

Azure队列存储

500每存储账户

GCS

谷歌发布/订阅

谷歌发布/订阅

databricks-auto-ingest

每GCS 100桶

Azure Blob存储

Azure事件网格

Azure队列存储

500每存储账户

*自动加载程序的名字和这个前缀的资源。

* *有多少并发文件通知管道可以启动

如果您需要运行超过有限数量的文件通知管道对于一个给定的存储账户,您可以:

  • 考虑重构文件上传到如何利用目录清单模式增量清单而不是文件通知。

  • 利用服务如AWSλ,Azure函数,或谷歌云函数从一个队列,扇出通知听整个容器或桶到目录中特定的队列。

文件通知事件

AWS S3提供了一个ObjectCreated事件当文件被上传到S3 bucket无论把或多部分上传上传的。

ADLS Gen2提供不同的事件通知文件出现在您的代容器。

  • 自动加载程序监听FlushWithClose事件处理一个文件。

  • 自动加载程序流创建砖8.3运行时和之后的支持RenameFile发现文件操作。RenameFile行动需要一个API请求存储系统来重命名文件的大小。

  • 自动加载程序流创建砖9.0运行时和之后的支持RenameDirectory发现文件操作。RenameDirectory行动要求API请求存储系统重命名目录的内容列表。

谷歌云存储提供了一个OBJECT_FINALIZE事件当文件上传,包括覆盖和文件副本。上传失败不产生这个事件。

请注意

云提供商并不能保证100%的交付文件事件在非常罕见的情况下,不提供严格sla文件的延迟事件。砖建议你触发自动加载程序通过使用常规回填cloudFiles.backfillInterval可以保证所有文件被发现在一个给定的SLA如果数据完整性要求。触发普通回填不会引起重复。

所需的权限配置文件通知ADLS Gen2和Azure Blob存储

你必须读输入目录的权限。看到Azure Blob存储

要使用文件通知模式,您必须提供身份验证凭证设置和访问事件通知服务。在砖运行时8.1及以上的,你只需要一个服务主体进行身份验证。砖运行时的8.0及以下,您必须提供一个服务主体和一个连接字符串。

  • 服务主体——使用Azure内置的角色

    创建一个Active Directory Azure应用和服务主体客户机ID的形式和客户的秘密。

    这个应用以下角色分配给存储账户输入路径所在:

    • 贡献者:这个角色是建立资源存储账户,如队列和事件订阅。

    • 存储队列数据来源:这个角色是执行队列操作,比如检索和删除消息的队列。这个角色需要在砖运行时8.1及以上的只有当你提供一个服务主体没有连接字符串。

    将这个应用以下的角色分配给相关的资源组:

    有关更多信息,请参见分配Azure角色使用Azure门户

  • 服务主体——使用自定义的角色

    如果你关心execessive前面的角色所需的权限,您可以创建一个自定义角色至少有以下权限,下面列出在Azure角色JSON格式:

    “权限”:({“行动”:(“Microsoft.EventGrid / eventSubscriptions /写”,“Microsoft.EventGrid / eventSubscriptions /读”,“Microsoft.EventGrid / eventSubscriptions /删除”,“Microsoft.EventGrid /地点/ eventSubscriptions /阅读”,“Microsoft.Storage / storageAccounts /读”,“Microsoft.Storage / storageAccounts /写”,“Microsoft.Storage / storageAccounts / queueServices /阅读”,“Microsoft.Storage / storageAccounts / queueServices /写”,“Microsoft.Storage / storageAccounts / queueServices /队列/写”,“Microsoft.Storage / storageAccounts / queueServices /队列/阅读”,“Microsoft.Storage / storageAccounts / queueServices /队列/删除”),“notActions”:[],“dataActions”:(“Microsoft.Storage / storageAccounts / queueServices /队列/信息/删除”,“Microsoft.Storage / storageAccounts / queueServices /队列/信息/读”,“Microsoft.Storage / storageAccounts / queueServices /队列/信息/写”,“Microsoft.Storage / storageAccounts / queueServices /队列/信息/过程/行动”),“notDataActions”:[]}]

    然后,您可以将这个自定义角色分配给应用程序。

    有关更多信息,请参见分配Azure角色使用Azure门户

  • 连接字符串

    自动加载程序需要一个连接字符串验证为Azure队列存储操作,如创建一个队列,并阅读和从队列中删除消息。创建队列在同一个存储账户输入目录路径所在。你可以找到你的连接字符串账户关键共享访问签名(SAS)

    如果您使用的是砖运行时8.1或以上,你不需要一个连接字符串。

    如果您使用的是砖或低于8.0运行时,你必须提供一个连接字符串验证为Azure队列存储操作,如创建一个队列和检索和从队列中删除消息。创建队列在同一个存储账户输入路径所在。你可以找到你的连接字符串账户关键共享访问签名(SAS)。配置一个SAS令牌时,必须提供以下权限:

自动加载程序权限

故障排除常见错误

错误:

javaRuntimeException:失败的创建事件网格订阅

如果你看到这个错误消息当您运行自动加载程序第一次事件网格不是注册为资源提供者在Azure订阅。注册在Azure门户:

  1. 去你的订阅。

  2. 点击资源提供者设置下一节。

  3. 注册供应商Microsoft.EventGrid

错误:

403年被禁止的授权执行行动“Microsoft.EventGrid / eventSubscriptions /(读|写)范围

如果你看到这个错误消息时自动加载程序第一次运行,确保你给了贡献者角色的服务主体事件网格以及存储账户。

所需的权限配置文件通知AWS S3

你必须读输入目录的权限。看到S3连接细节为更多的细节。

使用文件通知模式,附上以下JSON政策文件给你我的用户或角色

{“版本”:“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 bucket名称流将读取文件的地方,例如,自动对数。您可以使用*例如,作为一个通配符砖- *日志。找出潜在的S3 bucket DBFS路径,你可以列出所有的笔记本通过运行DBFS挂载点% fs挂载

  • <地区>:AWS S3 bucket所在地区,例如,us-west-2。如果你不想指定区域,使用*

  • <帐号>:拥有S3 bucket的AWS帐号,例如,123456789012。如果不想指定帐号,使用*

的字符串databricks-auto-ingest - *SQS和SNS是规范的名称前缀cloudFiles源使用在创建SQS和SNS服务。因为砖设置通知服务在最初运行的流,您可以使用一个政策,减少权限在最初运行(例如,停止流,然后重新启动它)。

请注意

之前的政策是只关心所需的权限设置文件通知服务,即S3 bucket通知、SNS, SQS服务和假设您已经读过访问S3 bucket。如果你需要添加S3只读权限,添加以下的行动列表中DatabricksAutoLoaderSetup声明在JSON文档:

  • s3: ListBucket

  • s3: GetObject

初始设置后减少了权限

上面描述的资源设置权限的初始运行期间只需要流。第一次运行之后,您可以切换到以下我政策减少了权限。

重要的

减少了权限,你不能开始新的流媒体查询在出现故障或重新创建资源(例如,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: <地区>:<帐号>:*”}]}

需要为GCS权限配置文件通知

你必须有列表得到权限GCS桶上的所有对象。,谷歌文档我的权限

使用文件通知模式,你需要添加的权限GCS服务帐户和账户用于访问谷歌云Pub / Sub资源。

添加发布/订阅出版商GCS服务帐户的作用。这允许账户发布事件通知消息从你的GCS桶谷歌云Pub / Sub。

至于服务帐户用于谷歌云Pub / Sub资源,您需要添加以下权限:

pubsub订阅消费pubsub订阅创建pubsub订阅删除pubsub订阅得到pubsub订阅列表pubsub订阅更新pubsub主题attachSubscriptionpubsub主题创建pubsub主题删除pubsub主题得到pubsub主题列表pubsub主题更新

要做到这一点,你可以创建一个我自定义的角色这些权限或分配预先存在的GCP的角色这些权限。

找到GCS服务帐户

在谷歌云控制台相应项目中,导航到存储>设置。“云存储服务帐户”一节包含GCS服务帐户的电子邮件。

GCS服务帐户

创建一个自定义谷歌云我角色文件通知模式

在谷歌云控制台相应项目中,导航到&管理>角色。然后,创建一个角色在顶部或更新现有的角色。在角色创建或编辑的屏幕中,单击添加权限。会出现一个菜单,您可以添加所需的权限角色。

GCP我自定义角色

手动配置或管理文件通知资源

特权用户可以手动配置或管理文件通知资源。

  • 手动设置文件通知服务通过云提供商和手动指定队列标识符。看到文件通知选项为更多的细节。

  • 使用Scala api来创建或管理notifcations和排队服务,如以下示例所示:

请注意

你必须有适当的权限配置或修改云基础设施。看到权限的文档Azure,S3,或GCS

/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // /创建一个ResourceManager AWS/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /进口comsqlCloudFilesAWSResourceManager瓦尔经理=CloudFilesAWSResourceManager新任选项(“cloudFiles.region”,<地区>)/ /可选的,将使用默认的区域EC2实例选项(“路径”,<路径- - - - - -- - - - - -具体的- - - - - -- - - - - -- - - - - -文件夹>)/ /只需要setUpNotificationServices创建()/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // /创建一个ResourceManager Azure/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /进口comsqlCloudFilesAzureResourceManager瓦尔经理=CloudFilesAzureResourceManager新任选项(“cloudFiles.connectionString”,<连接- - - - - -字符串>)选项(“cloudFiles.resourceGroup”,<资源- - - - - -集团>)选项(“cloudFiles.subscriptionId”,<订阅- - - - - -id>)选项(“cloudFiles.tenantId”,<租户- - - - - -id>)选项(“cloudFiles.clientId”,<服务- - - - - -主要- - - - - -客户端- - - - - -id>)选项(“cloudFiles.clientSecret”,<服务- - - - - -主要- - - - - -客户端- - - - - -秘密>)选项(“路径”,<路径- - - - - -- - - - - -具体的- - - - - -容器- - - - - -- - - - - -文件夹>)/ /只需要setUpNotificationServices创建()/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // /创建一个ResourceManager GCP/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /进口comsqlCloudFilesGCPResourceManager瓦尔经理=CloudFilesGCPResourceManager新任选项(“路径”,<路径- - - - - -- - - - - -具体的- - - - - -- - - - - -- - - - - -文件夹>)/ /只需要setUpNotificationServices。创建()/ /设置队列和主题的订阅中提供的路径管理器。经理setUpNotificationServices(<资源- - - - - -后缀>)/ /通知服务列表由< AL >瓦尔df=经理listNotificationServices()/ /拆除通知服务创建为一个特定的ID。/ /流ID是一个GUID的字符串列表中,您可以找到结果。经理tearDownNotificationServices(<- - - - - -id>)

使用setUpNotificationServices (< resource-suffix >)创建一个队列和一个订阅这个名字<前缀> - < resource-suffix >(前缀取决于存储系统进行了总结云资源用于自动加载程序文件通知模式。如果有相同名称的现有资源,砖重用现有的资源而不是创建一个新的。这个函数返回一个队列标识符,你可以通过的cloudFiles源使用的标识符文件通知选项。这使cloudFiles源用户权限的用户比少创建资源。

提供“路径”选项新任只有当调用setUpNotificationServices;它不需要listNotificationServicestearDownNotificationServices。这是相同的路径你使用流运行时查询。

下面的矩阵表示支持API方法,砖运行时为每个类型的存储:

云存储

安装API

列表API

拆除API

AWS S3

所有版本

所有版本

所有版本

ADLS代

所有版本

所有版本

所有版本

GCS

砖运行时9.1及以上

砖运行时9.1及以上

砖运行时9.1及以上

Azure Blob存储

所有版本

所有版本

所有版本

ADLS Gen1

不支持的

不支持的

不支持的