为MinIO Data Lakes引入Spark-Select

为MinIO Data Lakes引入Spark-Select

开发早期的对象存储API时,它们专注于对象的有效存储和检索。亚马逊在S3上的成功及其强大的S3 API的实现迅速成为了云中对象存储的事实上的标准。

MinIO意识到了这一点,因此投入巨资创建了Amazon外部最兼容的S3 API实现。反过来,这使MinIO成为私有云对象存储的标准-迄今为止,已有超过2亿个Docker证明了这一点。

但是,与任何技术一样,对象存储API需要发展并适应不断变化的用户需求,在这种情况下,这些不断变化的需求是由新兴的大数据,分析和机器学习工作流程驱动的。S3 API的动态发展领域之一是帮助用户充分利用他们的数据湖。

这种发展之所以重要,是因为AI,ML / DL和其他分析方法已成为当今企业数据策略的中心,此类工作负载本身很少会困扰对象,而是需要访问与特定工作相关的过滤数据。

这导致了S3 Select API的创建,S3 Select API本质上就是直接进入对象存储库的SQL查询功能。MinIO最近还推出了Select API的实现用户可以对其对象执行Select查询,并检索对象的相关子集,而不必下载整个对象。

在本文中,我们将讨论大数据生态系统中最受欢迎的数据分析平台之一 -Spark具体来说,我们将研究MinIO中的Select支持以及它如何补充Spark和类似框架。最后,我们将看一下最近发布的MinIO Spark-Select,并了解它如何通过利用MinIO中的SQL支持来提高查询性能。

MinIO S3 Select API支持

Select API发布之前的典型数据流如下所示:

  • 应用程序使用以下命令下载整个对象 GetObject()

  • 将对象加载到本地内存。

  • 对象驻留在内存中时开始查询过程。

使用S3 Select API,应用程序现在可以下载对象的特定子集-仅满足给定Select查询的子集。这直接转化为效率和性能:

  • 减少带宽需求

  • 优化计算资源和内存

  • 凭借较小的内存占用空间,可以使用相同的计算资源并行运行更多作业

  • 随着工作更快地完成,可以更好地利用分析师和领域专家

应用程序可以使用AWS开发工具包添加S3 Select API。让我们来看一个使用MinIO Select API的示例aws-sdk-python

首先,您需要启动一个MinIO服务器实例,并将mc配置为与该实例对话。然后,下载示例csv文件并将其上传到MinIO服务器上的相关存储区。

$ curl "https://esa.un.org/unpd/wpp/DVD/Files/1_Indicators%20(Standard)/CSV_FILES/WPP2017_TotalPopulationBySex.csv" > TotalPopulation.csv
$ gzip TotalPopulation.csv$ mc mb myminio/mycsvbucket$ mc cp TotalPopulation.csv.gz myminio/mycsvbucket/sampledata/

然后安装aws-sdk-python并使用下面的代码片段csv在MinIO服务器上查询文件


image-1 (8).png


在此处参考有关MinIO Select API的详细文档:https ://docs.minio.io/docs/minio-select-api-quickstart-guide.html

MinIO Spark-Select

现已普遍提供MinIO Select API支持,任何应用程序都可以利用此API将查询作业卸载到MinIO服务器本身。

但是,已经与成千上万的企业使用的Spark之类的应用程序如果与Select API集成在一起,将对数据科学领域产生巨大影响-使Spark作业的速度提高一个数量级。

从技术上讲,Spark SQL将可能的查询下推到MinIO,并将对象的相关子集仅加载到内存以进行进一步分析是完全合理的。这将使Spark SQL更快,使用更少的计算/内存资源,并允许并发运行更多Spark作业。


1_A7GwBVHEW_r1OQmLQFvfIg.png


为此,我们最近发布了Spark-Select项目,以将Select API与Spark SQL集成在一起。Spark-Select项目在以下版本的Apache许可V2.0下可用

Spark-Select项目充当Spark数据源,通过DataFrame接口实现。在很高的层次上,Spark-Select通过将传入的过滤器转换为SQL Select语句来工作。然后,将这些查询发送到MinIO。当MinIO响应基于选择查询的数据子集时,Spark使它可以作为DataFrame使用,可以作为常规DataFrame进行进一步的操作。与任何DataFrame一样,现在任何其他Spark库都可以利用此数据,例如Spark MLlib,Spark Streaming等。

Spark-Select当前支持JSON,CSV和Parquet文件格式进行查询下推。这意味着对象应该是这些类型中的一种,以便下推工作。


火花选择可以通过星火整合spark-shellpysparkspark-submit等等。你也可以将其添加为Maven的依赖,sbt-spark-packagejar进口。

让我们看一个将spark-select与spark-shell一起使用的示例。

> $SPARK_HOME
  • 之后spark-shell调用成功,执行该csv.scala文件

scala> :load csv.scalaLoading examples/csv.scala...import org.apache.spark.sql._import org.apache.spark.sql.types._schema: org.apache.spark.sql.types.StructType = StructType(StructField(name,StringType,true), StructField(age,IntegerType,false))df: org.apache.spark.sql.DataFrame = [name: string, age: int]+-------+---+|   name|age|+-------+---+|Michael| 31||   Andy| 30|| Justin| 19|+-------+---+
scala>

您可以看到,仅age > 19返回具有值的字段

我希望上面的示例spark-select可以帮助您将查询下推到MinIO服务器并加快数据分析流程。

我们欢迎您在https://github.com/minio/spark-select上签出项目

概要

对象存储的世界不仅在增长,同时也在变化。从生态系统中出现的越来越多的分析和机器学习接触点可以看出这些变化。尽管这篇文章从战略和战术角度着重于SQL Select,但在接下来的几周中将有更多讨论其他分析框架的文章。

关键要点在于,对象存储正在迅速超越灾难恢复和归档的传统用例,而转向强调分析和机器学习的更动态的用例。SQL作为数据的通用语言,对于这些用例的成功至关重要。

所有这些都凸显了对象存储在企业中公共和私有云中越来越重要。它还在传统对象存储和云本机对象存储解决方案之间做出了区分。最终,这意味着针对公共云的亚马逊和针对私有云的Minio。


上一篇 下一篇