自动加载程序文件通知模式是什么?
在文件通知模式,自动加载程序自动设置通知服务和队列服务订阅文件事件从输入目录。您可以使用文件通知规模汽车装载机摄取数以百万计的文件一个小时。目录清单模式相比,文件通知模式是更多的性能和可伸缩性大输入目录或大容量的文件,但需要额外云权限。
你可以随时切换文件通知和目录清单,仍然保持只有一次数据处理担保。
云资源用于自动加载程序文件通知模式
重要的
你需要提升权限自动配置文件通知模式的云基础设施。联系你的云管理员或工作区管理。看到的:
自动加载程序可以设置文件的通知你时自动设置选项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及以上的只有当你提供一个服务主体没有连接字符串。
将这个应用以下的角色分配给相关的资源组:
EventGrid EventSubscription贡献者:这个角色是执行事件网格订阅操作,如创建或清单事件订阅。
有关更多信息,请参见分配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令牌时,必须提供以下权限:
所需的权限配置文件通知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的角色这些权限。
创建一个自定义谷歌云我角色文件通知模式
在谷歌云控制台相应项目中,导航到我&管理>角色
。然后,创建一个角色在顶部或更新现有的角色。在角色创建或编辑的屏幕中,单击添加权限
。会出现一个菜单,您可以添加所需的权限角色。
手动配置或管理文件通知资源
特权用户可以手动配置或管理文件通知资源。
手动设置文件通知服务通过云提供商和手动指定队列标识符。看到文件通知选项为更多的细节。
使用Scala api来创建或管理notifcations和排队服务,如以下示例所示:
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // /创建一个ResourceManager AWS/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /进口com。砖。sql。CloudFilesAWSResourceManager瓦尔经理=CloudFilesAWSResourceManager。新任。选项(“cloudFiles.region”,<地区>)/ /可选的,将使用默认的区域EC2实例。选项(“路径”,<路径- - - - - -来- - - - - -具体的- - - - - -桶- - - - - -和- - - - - -文件夹>)/ /只需要setUpNotificationServices。创建()/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // /创建一个ResourceManager Azure/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /进口com。砖。sql。CloudFilesAzureResourceManager瓦尔经理=CloudFilesAzureResourceManager。新任。选项(“cloudFiles.connectionString”,<连接- - - - - -字符串>)。选项(“cloudFiles.resourceGroup”,<资源- - - - - -集团>)。选项(“cloudFiles.subscriptionId”,<订阅- - - - - -id>)。选项(“cloudFiles.tenantId”,<租户- - - - - -id>)。选项(“cloudFiles.clientId”,<服务- - - - - -主要- - - - - -客户端- - - - - -id>)。选项(“cloudFiles.clientSecret”,<服务- - - - - -主要- - - - - -客户端- - - - - -秘密>)。选项(“路径”,<路径- - - - - -来- - - - - -具体的- - - - - -容器- - - - - -和- - - - - -文件夹>)/ /只需要setUpNotificationServices。创建()/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / // /创建一个ResourceManager GCP/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /进口com。砖。sql。CloudFilesGCPResourceManager瓦尔经理=CloudFilesGCPResourceManager。新任。选项(“路径”,<路径- - - - - -来- - - - - -具体的- - - - - -桶- - - - - -和- - - - - -文件夹>)/ /只需要setUpNotificationServices。。创建()/ /设置队列和主题的订阅中提供的路径管理器。经理。setUpNotificationServices(<资源- - - - - -后缀>)/ /通知服务列表由< AL >瓦尔df=经理。listNotificationServices()/ /拆除通知服务创建为一个特定的ID。/ /流ID是一个GUID的字符串列表中,您可以找到结果。经理。tearDownNotificationServices(<流- - - - - -id>)
使用setUpNotificationServices (< resource-suffix >)
创建一个队列和一个订阅这个名字<前缀> - < resource-suffix >
(前缀取决于存储系统进行了总结云资源用于自动加载程序文件通知模式。如果有相同名称的现有资源,砖重用现有的资源而不是创建一个新的。这个函数返回一个队列标识符,你可以通过的cloudFiles
源使用的标识符文件通知选项。这使cloudFiles
源用户权限的用户比少创建资源。
提供“路径”
选项新任
只有当调用setUpNotificationServices
;它不需要listNotificationServices
或tearDownNotificationServices
。这是相同的路径
你使用流运行时查询。
下面的矩阵表示支持API方法,砖运行时为每个类型的存储:
云存储 |
安装API |
列表API |
拆除API |
---|---|---|---|
AWS S3 |
所有版本 |
所有版本 |
所有版本 |
ADLS代 |
所有版本 |
所有版本 |
所有版本 |
GCS |
砖运行时9.1及以上 |
砖运行时9.1及以上 |
砖运行时9.1及以上 |
Azure Blob存储 |
所有版本 |
所有版本 |
所有版本 |
ADLS Gen1 |
不支持的 |
不支持的 |
不支持的 |