宣布 MinIO 批处理框架——特性 #1:批复制

宣布 MinIO 批处理框架——特性 #1:批复制

批处理是一种一致且可靠地处理大量数据的方式,几乎不需要用户交互。企业通常使用批处理操作来准备和分析来自多个来源的数据。收集、转换和组合数据的各个作业被批处理在一起以更高效地运行。

MinIO 客户使用批处理来构建数据分析和 AI/ML 管道,并在 MinIO 部署之间复制或移动数据,因为它可以快速处理数据,消除了用户干预的要求,并通过在下班时间或系统利用率较低时运行来提高效率。在与客户合作时,我们了解到批处理和 Lambda 通知的结合非常适合在不同格式之间转换文件、合并来自不同来源的数据以及处理非流式数据(如已保存到文件中的数据)以进行分析。

因此,我们开发了 MinIO 批处理框架,使您能够直接在 MinIO 部署上运行批处理操作。我们通过 Batch Framework 提供的第一个操作是 Batch Replication,在 MinIO 版本 RELEASE.2022-10-08T20-11-00Z 及更高版本中可用。

MinIO 到 MinIO 批量复制

我们最近发布了我们的第一个批处理功能,批处理复制,支持在多个 MinIO 部署的存储桶之间复制对象。可以使用标志和文件描述符(包括通配符)复制存储桶的全部内容或特定对象。批量复制可以根据您的要求以推送或拉取的方式触发。

虽然 MinIO 管理员长期以来一直使用Active-Active 复制,但它旨在复制在配置复制规则后创建的后台对象。MinIO 拥有数百个依赖主动-主动复制来保持部署同步的客户。

批量复制可用于复制现有对象,包括在配置任何复制规则之前添加到存储桶的对象、先前由于配置不正确而未能复制的对象、已复制到不同目标存储桶的对象,或已经复制的对象。批量复制提供了一种在新位置用对象填充新存储桶的简单方法。借助这一新功能,您可以在单个作业中使用最少的代码复制任意数量的对象、查看复制状态并在复制完成时收到通知。

批量复制的优点包括能够利用整个 MinIO 集群进行处理,而不是利用运行 MinIO 客户端的单个工作站(使用mc mirror)。这也消除了作为潜在单点故障的工作站,并消除了集群和客户端之间的网络瓶颈。用户不需要特殊权限来复制对象,因为批处理在服务器端运行。如果对象没有被复制,MinIO Batch Framework 将重试操作,只尝试复制失败的对象。

何时使用批量复制

使用批量复制的一种方法是将数据推送到云端,以使其可用于云原生分析。例如,一位客户正在用云原生工作负载替换遗留的 Hadoop 工作负载。目标是将数据公开给在云中运行的云原生应用程序,例如 Google BigQuery 或 Starburst。他们现在可以使用批量复制以编程方式完成此操作。将对象推送到云原生 MinIO 目标后,会发出通知,然后团队可以开始他们的 Apache Spark 作业。

批量复制在 ETL 工作流中占有重要地位,其中存储桶通知用于触发下一步(预处理、处理、后处理)。在这个用例中,数据被保存到创建它的 MinIO,可能是由边缘的 IoT 设备或数据中心的事务数据库,然后批量复制到数据湖。一旦完成,通知将通过调用将原始数据转换为格式的脚本启动下一个处理步骤,例如 Parquet、Avro 和 ORC,这是使用 KubeFlow 或 H2O 进行 ML 处理所需的,以及 Delta Lake 和 Apache Iceberg 等数据湖屋。在写入预处理对象时,存储桶通知会启动 ML 或分析工作流的执行。

批量复制是多云对象存储策略的关键推动因素。企业的数据分散并孤立在许多位置和云中。Batch Replication连接云,将边缘和数据中心连接到云。您现在可以自由地在任何需要的地方推送和拉取数据,并可以充分利用它。您可以自由复制存储桶或对象子集中的所有内容。只需配置批量复制,让 MinIO 完成工作并在复制完成时通知您。

运行你的第一个批量复制

本教程将引导您使用该mc batch命令。此命令提供了一种方法来创建定义批处理作业的 yaml 文件,然后定期运行它。您可以停止、暂停和恢复批量复制。此功能在 MinIO 中适用于单节点和分布式架构。


pasted image 0 (27).png


我们将在本地安装 MinIO,然后将 Batch Replicate 复制到MinIO Play上的存储桶。  

下载并安装MinIO。记录访问密钥和秘密密钥。

下载并安装MinIO 客户端。

创建一个存储桶并将一些文件复制到其中。文件的内容并不重要,因为我们正在演示批量复制。但是,请勿使用包含敏感信息的文件,因为我们最终将复制到公共 MinIO 服务器 MinIO Play。

mc mb myminio/testbucket/
mc mirror /usr/bin myminio/testbucket/
mc mb play/<Your Initials>-testbucket/

这会将大约 1 GB 的数据复制到 MinIO 部署上的新存储桶,并通过创建目标存储桶为批量复制做准备。

创建并定义批量复制:

mc batch generate myminio/ replicate

这将创建一个replication.yaml文件,然后您可以编辑该文件以配置复制作业。

此文件(如下所示)包含源存储桶、过滤器/标志和目标目标(存储桶和凭据)。

replicate:
  apiVersion: v1
  # source of the objects to be replicated
  source:
	type: TYPE # valid values are "s3"
	bucket: BUCKET
	prefix: PREFIX
	# NOTE: if source is remote then target must be "local"
	# endpoint: ENDPOINT
	# credentials:
	#   accessKey: ACCESS-KEY
	#   secretKey: SECRET-KEY
	#   sessionToken: SESSION-TOKEN # Available when rotating credentials are used

  # target where the objects must be replicated
  target:
	type: TYPE # valid values are "s3"
	bucket: BUCKET
	prefix: PREFIX
	# NOTE: if target is remote then source must be "local"
	# endpoint: ENDPOINT
	# credentials:
	#   accessKey: ACCESS-KEY
	#   secretKey: SECRET-KEY
	#   sessionToken: SESSION-TOKEN # Available when rotating credentials are used

  # optional flags based filtering criteria
  # for all source objects
  flags:
	filter:
	  newerThan: "7d" # match objects newer than this value (e.g. 7d10h31s)
	  olderThan: "7d" # match objects older than this value (e.g. 7d10h31s)
	  createdAfter: "date" # match objects created after "date"
	  createdBefore: "date" # match objects created before "date"

	  ## NOTE: tags are not supported when "source" is remote.
	  # tags:
	  #   - key: "name"
	  #     value: "pick*" # match objects with tag 'name', with all values starting with 'pick'

	  ## NOTE: metadata filter not supported when "source" is non MinIO.
	  # metadata:
	  #   - key: "content-type"
	  #     value: "image/*" # match objects with 'content-type', with all values starting with 'image/'

	notify:
	  endpoint: "https://notify.endpoint" # notification endpoint to receive job status events
	  token: "Bearer xxxxx" # optional authentication token for the notification endpoint

	retry:
	  attempts: 10 # number of retries for the job before giving up
	  delay: "500ms" # least amount of delay between each retry

请注意,本教程尚未配置通知端点。配置后,当批量复制完成时,通知将在该端点可用。

您可以同时创建和运行多个批量复制作业;没有预定义的限制。

使用以下命令启动批量复制:

mc batch start alias/ ./replicate.yaml
Successfully start 'replicate' job `E24HH4nNMcgY5taynaPfxu` on '2022-09-26 17:19:06.296974771 -0700 PDT'

您将看到一条消息,表明复制作业已成功启动以及时间。

您可以列出所有批处理作业:

mc batch list alias/
ID                      TYPE            USER            STARTED
E24HH4nNMcgY5taynaPfxu  replicate       minioadmin      1 minute ago

您还可以检查批处理作业的状态:

mc batch status myminio/ E24HH4nNMcgY5taynaPfxu
●∙∙
Objects:        28766
Versions:       28766
Throughput:     3.0 MiB/s
Transferred:    406 MiB
Elapsed:        2m14.227222868s
CurrObjName:    share/doc/xml-core/examples/foo.xmlcatalogs

要查看正在运行的批处理作业及其配置:

mc batch describe myminio/ E24HH4nNMcgY5taynaPfxu
replicate:
  apiVersion: v1
<content truncated>

批量复制完成后,您可以比较存储桶内容以验证它是否成功。如果存储桶包含相同的对象,运行下面的命令将不会返回任何内容。

mc diff myminio/testbucket play/-testbucket

通过批量复制构建多云魔法

最近引入的 MinIO 批处理框架和第一个操作,批复制,到 MinIO 使您能够构建工作流,将数据推送到您需要的任何地方,并在复制完成时通知您。在边缘、云端或数据中心获取数据,并将其推送/拉取到云端可用的丰富应用程序中。无缝利用同类最佳的应用程序,例如,使用批量复制向 GCP 上的 BigQuery、Azure 上的 KubeFlow 以及 AWS 上的 Spark 和 Iceberg 提供数据。批量复制为您提供多云成功所需的自由和控制。

下载 MinIO并立即开始复制。任何问题?在Slack上联系我们


上一篇 下一篇