介绍数据摄取:简单和有效的数据摄取从不同来源到三角洲湖
2020年2月24日 在工程的博客
我们很高兴在公开预览版中引入一个新特性-自动加载器-和一组合作伙伴集成,允许Databricks用户增量地将数据导入三角洲湖从各种各样的数据源。Auto Loader是一个优化的云文件源Apache火花当新数据到达时,它可以持续有效地从云存储中加载数据。合作伙伴集成的数据摄取网络允许您将来自数百个数据源的数据直接摄取到Delta Lake。
把所有的数据放在一起
组织在各种数据源中拥有丰富的信息。这些可能从数据库(例如Oracle、MySQL、Postgres等)到产品应用程序(Salesforce、Marketo、HubSpot等)各不相同。大量的分析用例需要来自这些不同数据源的数据来生成有意义的报告和预测。例如,一个完整的漏斗分析报告将需要从hubspot中的潜在客户信息到Postgres数据库中的产品注册事件等各种来源的信息。
集中所有的数据,只在一个数据仓库是一种反模式,因为Python / R库中的机器学习框架将无法有效地访问仓库中的数据。由于您的分析用例范围从构建简单的SQL报告到更高级的机器学习预测,因此您必须以开放格式构建一个中央数据湖,其中包含来自所有数据源的数据,并使其可用于各种用例。
自从我们去年开放了Delta Lake资源在美国,成千上万的组织正在以一种比以前更可靠、更有效的开放格式构建这个中央数据湖。Databricks上的Delta Lake提供ACID事务和高效索引,这对于为各种访问模式(从BI工具中的临时SQL查询到计划的离线培训作业)公开数据至关重要。我们将这种以开放格式为数据构建中心、可靠和高效的单一真相来源的模式称为,这种模式适用于从BI到ML的用例,并具有解耦的存储和计算“Lakehouse”.
建造湖屋的一个关键挑战是将各种来源的所有数据汇集在一起。根据您的数据旅程,数据团队有两种常见场景:
- 从第三方数据源获取数据:您通常在各种内部数据源中拥有有价值的用户数据,从Hubspot到Postgres数据库。您需要为它们每个编写专门的连接器,以便从源中提取数据并将其存储在Delta Lake中。
- 从云存储中摄取数据:您已经有了将数据从源中拉入云存储的机制。当新数据到达云存储时,您需要识别这些新数据并将它们加载到Delta Lake中进行进一步处理。
来自第三方来源的数据摄取
从内部数据源摄取数据需要为每个数据源编写专门的连接器。这可能需要投入大量的时间和精力来使用源api构建连接器,并将源模式映射到Delta Lake的模式功能。此外,随着源的api和模式的发展,您还需要维护这些连接器。维护问题与您拥有的每一个额外数据源都有关系。
为了方便您的用户访问您在Delta Lake的所有数据,我们现在与一组数据摄取产品合作。这个数据摄取合作伙伴网络已经与Databricks建立了本地集bob体育外网下载成,可以直接在您的云存储中摄取和存储Delta Lake中的数据。这可以帮助数据科学家和分析师轻松地开始处理来自不同来源的数据。
Azure Databricks客户已经从中受益与Azure数据工厂集成从各种来源摄取数据到云存储中。我们很高兴地宣布新的合作伙伴-bob体育外网下载Fivetran,Qlik,Infoworks,StreamSets,Syncsort-帮助用户从各种来源摄取数据。我们也正在扩大合作伙伴的数据摄取网络,很快就会有更多来自Informatica、Segment和Stitcbob体育外网下载h的集成。
来自云存储的数据摄取
在新数据到达云blob存储时对其进行增量处理,并使其为分析做好准备,这是ETL工作负载中的一个常见工作流。然而,以低成本、低延迟和最小DevOps工作量的方式连续地从云blob存储加载数据是很难实现的。
由于Delta Lake的ACID事务,一旦数据进入Delta表,就可以可靠地读取数据。若要从Delta表传输数据,可以使用Delta源(Azure|AWS),利用桌子的事务日志快速识别添加的新文件。
但是,主要的瓶颈是将云存储中的原始文件加载到Delta表中。简单的基于文件的流媒体源(Azure|AWS)通过重复列出云目录并跟踪已查看的文件来识别新文件。由于重复列出文件,越来越多的文件被添加到目录中,成本和延迟都会迅速增加。为了克服这个问题,数据团队通常会采取以下解决方案之一:
- 高端到端数据延迟:虽然数据每隔几分钟就会到达,但您可以将数据批处理到一个目录中,然后按照计划处理它们。使用基于天或小时的分区目录是一种常见的技术。这延长了SLA,使下游消费者可以使用数据。
- 手动DevOps方法:为了保持较低的SLA,您可以利用云通知服务和消息队列服务在新文件到达消息队列时进行通知,然后处理新文件。这种方法不仅涉及所需云服务的手动设置过程,而且当存在多个需要加载数据的ETL作业时,管理起来也会很快变得复杂。此外,重新处理目录中的现有文件需要手动列出文件并处理它们,此外还需要云通知设置,从而增加了设置的复杂性。
Auto Loader是一种优化的文件源,它克服了上述所有限制,并为数据团队提供了一种无缝的方式,以低成本和延迟加载原始数据,并且DevOps工作量最小。您只需要提供一个源目录路径并启动一个流作业。新的结构化流媒体源,称为“cloudFiles”,将自动设置文件通知服务,从输入目录订阅文件事件,并在新文件到达时处理它们,还可以选择处理该目录中的现有文件。
使用自动装载机的主要好处是:
- 无文件状态管理:当新文件进入云存储时,源文件以增量方式处理。您不需要管理关于到达文件的任何状态信息。
- 可伸缩性:源代码将利用云服务和RocksDB有效地跟踪新到达的文件,而不必将所有文件列在一个目录中。即使一个目录中有数百万个文件,这种方法也是可扩展的。
- 易于使用:源将自动设置增量处理文件所需的通知和消息队列服务。您这边不需要设置。
流式加载与自动加载器
您可以从对流作业进行最小的代码更改开始Apache火花的熟悉的加载api:
spark.readStream。格式(“cloudFiles”).option (“cloudFiles.format”,“json”).load (“/输入/路径”)
与自动加载器计划批量加载
如果数据每隔几个小时才来一次,您仍然可以在计划作业中使用auto loader结构化流媒体的触发器。一旦模式.
val df = spark.readStream。格式(“cloudFiles”).option (“cloudFiles.format”,“json”).load (“/输入/路径”)
df.writeStream.trigger (Trigger.Once).格式(“δ”).start(“/输出/路径”)
您可以使用Databricks作业调度器(Azure|AWS).使用上述方法,您不需要担心延迟到达的数据场景。
使用COPY命令计划批量加载
喜欢使用声明式语法的用户可以使用SQL COPY命令定期将数据加载到Delta Lake中。COPY命令是幂等的,因此在失败的情况下可以安全地重新运行。该命令会自动忽略先前加载的文件,并保证只使用一次语义。这使得数据团队可以轻松地构建健壮的数据管道。
该命令的语法如下所示。有关详细信息,请参阅有关COPY命令的文档(Azure|AWS).
复制成tableIdentifier从{位置|(选择identifierList从位置)}FILEFORMAT={CSV|JSON|AVRO|兽人|镶木地板}(文件=(”(,”[,…]])][模式=”][format_options (“dataSourceReaderOption”=“价值”,…)][copy_options (“力”={“假”,“真正的”}))
开始使用数据摄取功能
将所有数据放入数据湖对于机器学习和业务分析用例的成功至关重要,对每个组织来说都是一项艰巨的任务。我们很高兴地介绍Auto Loader和合作伙伴的集成功能,以帮助我们成千上万的用户在这个旅程中建立一个高效的数据湖。这些功能今天可以预览。我们的文档中有关于如何开始合作伙伴集成的更多信息(Azure|AWS)、自动装载机(Azure|AWS)和复制命令(Azure|AWS),开始载入资料至Delta Lake。
为了更BOB低频彩多地了解这些功能,我们将于2020年3月19日上午10:00在太平洋标准时间举办网络研讨会,介绍Databricks Ingest的功能,注册在这里.