宣布 MinIO 批处理框架 – 功能 #1:批处理复制

批量处理是一种以一致且可靠的方式处理大量数据的方法,并且几乎无需用户交互。企业通常使用批处理操作来准备和分析来自多个来源的数据。收集、转换和组合数据的各个作业被批量组合在一起,以更有效地运行。
MinIO 客户使用批量处理来构建数据分析和 AI/ML 管道,以及在 MinIO 部署之间复制或移动数据,因为它可以快速处理数据,消除对用户干预的需求,并通过在非高峰时段或系统利用率低时运行来提高效率。在我们与客户合作的过程中,我们了解到批量处理和 Lambda 通知相结合非常适合转换文件格式、组合来自不同来源的数据以及处理非流式数据(如已保存到文件中的数据)以进行分析。
因此,我们开发了 MinIO 批量框架,使您能够直接在 MinIO 部署上运行批处理操作。我们通过批量框架提供的第一个操作是批量复制,在 MinIO 版本 RELEASE.2022-10-08T20-11-00Z 及更高版本中可用。
MinIO 到 MinIO 批量复制
我们最近发布了第一个批量功能,即批量复制,它能够在多个 MinIO 部署的存储桶之间复制对象。可以使用标志和文件描述符(包括通配符)复制存储桶的全部内容或特定对象。根据您的需求,可以将批量复制触发为推送或拉取。
虽然 MinIO 管理员长期以来一直可以使用主动-主动复制,但这旨在在配置复制规则后复制后台创建的对象。MinIO 有数百个客户依靠主动-主动复制来保持部署同步。
批量复制可用于复制现有对象,包括在配置任何复制规则之前添加到存储桶中的对象、由于规则配置错误而之前复制失败的对象、已复制到其他目标存储桶的对象或已复制的对象。批量复制提供了一种简单的方法来使用对象填充新位置的新存储桶。借助此新功能,您可以在单个作业中使用最少的代码复制任意数量的对象,查看复制状态,并在复制完成后收到通知。
批量复制的优势包括能够利用整个 MinIO 集群进行处理,而不是运行 MinIO 客户端的单个工作站(使用 mc mirror
)。这还消除了工作站作为潜在单点故障的可能性,并消除了集群和客户端之间的网络作为瓶颈。用户无需特殊的权限即可复制对象,因为批处理在服务器端运行。如果对象未复制,MinIO 批量框架将重试操作,仅尝试复制失败的对象。
何时使用批量复制
使用批量复制的一种方法是将数据推送到云中,以便使其可用于云原生分析。例如,一个客户正在使用云原生工作负载替换旧版 Hadoop 工作负载。目标是将数据公开给在云中运行的云原生应用程序,例如 Google BigQuery 或 Starburst。他们现在可以使用批量复制以编程方式实现此目标。将对象推送到云原生 MinIO 目标后,将发出通知,然后团队可以启动其 Apache Spark 作业。
批量复制在 ETL 工作流中发挥着重要作用,在 ETL 工作流中,存储桶通知用于触发下一步(预处理、处理、后处理)。在此用例中,数据保存在创建它的 MinIO 中,可能是边缘的物联网设备或数据中心的交易数据库创建的,然后批量复制到数据湖。完成后,通知通过调用脚本启动下一步处理,这些脚本将原始数据转换为 ML 处理(使用 KubeFlow 或 H2O)和数据湖仓库(如 Delta Lake 和 Apache Iceberg)所需的格式,例如 Parquet、Avro 和 ORC。在写入预处理对象后,存储桶通知将启动 ML 或分析工作流的执行。
批量复制是多云对象存储策略的关键推动因素。企业的数据分散并存储在许多位置和云中。批量复制连接云,并将边缘和数据中心连接到云。您现在可以自由地将数据推送到您需要的任何位置并从中获得最大收益。您可以自由地复制存储桶中的所有内容或一部分对象。只需配置批量复制,让 MinIO 完成工作并在复制完成后通知您。
运行您的第一个批量复制
本教程将引导您使用 mc batch
命令。此命令提供了一种创建定义批处理作业的 yaml 文件并定期运行它的方法。您可以停止、暂停和恢复批量复制。此功能在 MinIO 的单节点和分布式架构中都可用。
我们将本地安装 MinIO,然后批量复制到 MinIO Play 上的存储桶。
下载并安装 MinIO。记录访问密钥和密钥。
下载并安装 MinIO 客户端。
创建一个存储桶并将一些文件复制到其中。文件的内容并不重要,因为我们正在演示批量复制。但是,请不要使用包含敏感信息的文件,因为我们最终将复制到 MinIO Play(一个公共 MinIO 服务器)。
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/<Your Initials>-testbucket
使用批量复制构建多云魔力
最近推出的 MinIO 批量框架和第一个操作(批量复制)到 MinIO 使您能够构建工作流,将数据推送到您需要的任何位置,并在复制完成后通知您。在边缘、云或数据中心提取数据,并将其推/拉到云中可用的丰富应用程序中。例如,使用批量复制无缝地利用最佳应用程序,将数据提供给 GCP 上的 BigQuery、Azure 上的 KubeFlow 以及 AWS 上的 Spark 和 Iceberg。批量复制为您提供了多云成功所需的自由和控制。