通过


什么是自动加载程序?

自动加载程序会在新数据文件到达云存储空间时以增量方式高效地对其进行处理,而无需进行任何其他设置。

自动加载程序如何工作?

自动加载程序会在新数据文件到达云存储空间时以增量方式高效地对其进行处理。 它提供了名为 cloudFiles 的结构化流式处理源。 给定云文件存储上的输入目录路径后,cloudFiles 源将在新文件到达时自动处理这些文件,你也可以选择处理该目录中的现有文件。 自动加载程序在 Lakeflow Spark 声明性管道中同时支持 Python 和 SQL。

可以使用自动加载程序处理数十亿个文件以迁移或回填表。 自动加载程序可缩放以支持每小时近实时引入数百万个文件。

支持的自动加载器源

自动加载器可以从以下源加载数据文件:

  • Amazon S3 (s3://

  • Azure Data Lake Storage (ADLS, abfss://

  • Google 云存储 (GCS, gs://

  • Azure Blob Storage (wasbs://

    Note

    旧版Windows Azure Storage Blob 驱动程序(WASB)已弃用。 与 WASB 相比,ABFS 具有许多优势。 请参阅有关 ABFS 的 Azure 文档。 有关使用旧版 WASB 驱动程序的文档,请参阅 连接到 Azure Blob 存储 WASB(旧版)

  • Databricks 文件系统(DBFS,dbfs:/)。

自动加载程序可以引入 JSONCSVXMLPARQUETAVROORCTEXTBINARYFILE 文件格式。

自动加载程序如何跟踪引入进度?

当文件被发现时,它们的元数据将保存在自动加载程序管道的检查点位置的可缩放键值存储(RocksDB)中。 这种键值存储可确保只处理一次数据。

如果发生故障,自动加载程序可以借助检查点位置存储的信息从中断处恢复,并在将数据写入 Delta Lake 时持续提供恰好一次性语义保证。 你无需自己维护或管理任何状态即可实现容错或恰好一次性语义。

通过 Lakeflow Spark 声明式管道使用 Auto Loader 进行增量数据引入

Databricks 建议在 Lakeflow Spark 声明性管道中使用 Auto Loader 进行增量数据引入。 无需提供架构或检查点位置,因为 Lakeflow Spark 声明性管道会自动管理管道的这些设置。 有关建议的配置,请参阅 为生产工作负荷配置自动加载程序

Databricks 还建议在使用 Apache Spark 结构化流式处理从云对象存储引入数据时,优先采用自动加载程序。 API 在 Python 和 Scala 中可用。

开始使用 Databricks 自动加载程序

请参阅以下文章,以开始利用 Auto Loader 在 Lakeflow Spark 声明性管道中配置增量数据引入:

示例:常见的自动加载程序模式

有关常见自动加载程序模式的示例,请参阅常见的数据加载模式

配置自动加载程序选项

可以根据数据量、多样性和速度来优化自动加载程序。

有关自动加载程序选项的完整列表,请参阅 自动加载程序选项。 如果遇到意外的性能问题,请参阅常见问题解答

配置自动加载程序文件检测模式

自动加载程序支持两种文件检测模式。 See:

处理无序数据

无论使用目录列表还是文件通知模式,自动加载程序都不能保证发现或处理文件的顺序。 使用以下策略设计您的数据管道以处理文件无序到达。

使用 Lakeflow Spark AUTO CDC 声明式管道

如果您将 Lakeflow Spark 声明式管道与自动加载程序一起使用,请配置删除标记保留时间,以确保删除的记录保留足够长的时间来处理无序文件的到达。 将 pipelines.cdc.tombstoneGCThresholdInSeconds 目标流式处理表上的表属性设置为超过事件到达和管道执行之间的最大预期延迟的值。 默认保留期为两天。 有关详细信息,请参阅 create_auto_cdc_flow

没有 Lakeflow Spark 声明性管道的结构化流处理

如果直接将 Apache Spark 结构化流与 Auto Loader 一起使用(而不使用 Lakeflow Spark 声明性管道),请考虑以下模式来处理无序数据:

  • 首选软删除而不是硬删除:跟踪 deleted 标志和时间戳,而不是删除行,以便延迟删除不会与早期记录冲突。
  • 在应用更新之前比较时间戳:在更新插入时,将传入记录的更新时间戳与目标行的当前时间戳进行比较,以避免覆盖过时的数据。

自动加载程序相比直接使用结构化流式处理处理文件的优势

在 Apache Spark 中,可以使用 spark.readStream.format(fileFormat).load(directory) 以增量方式读取文件。 相比于文件源,自动加载程序具有以下优势:

  • 可伸缩性:自动加载程序可以高效地发现数十亿个文件。 可以以异步方式执行回填,以避免浪费任何计算资源。
  • 性能:使用自动加载程序发现文件的成本会根据要引入的文件的数量(而不是文件可能登陆的目录的数量)进行调整。 请参阅 在目录列表模式下配置自动加载程序流
  • 架构推理和演变支持:自动加载程序可以检测到架构偏差,在发生架构更改时通知你,并且会挽救那些原本会被忽略或丢失的数据。 请参阅自动加载程序架构推理的工作原理是怎样?
  • 成本:自动加载程序使用本机云 API 来获取存储中存在的文件的列表。 另外,自动加载程序的文件通知模式可通过完全避免目录列表来帮助进一步降低云成本。 自动加载程序可在存储上自动设置文件通知服务,从而使文件发现成本大幅降低。