Kubernetes 上的 Dremio 和 MinIO 用于快速可扩展分析

Kubernetes 上的 Dremio 和 MinIO 用于快速可扩展分析

诸如 MinIO 之类的云原生对象存储经常用于构建数据湖,这些数据湖将大型结构化、半结构化和非结构化数据存储在中央存储库中。数据湖通常包含从多个来源获取的原始数据,包括流和 ETL。组织分析这些数据以发现趋势并衡量业务的健康状况。

什么是 Dremio?

Dremio是一个开源的分布式分析引擎,它为数据探索、转换和协作提供了一个简单的自助服务界面。Dremio 的架构建立在 Apache Arrow 之上,这是一种高性能的柱状内存格式,并利用 Parquet 文件格式进行高效存储。有关 Dremio 的更多信息,请参阅Dremio 入门

用于云原生数据湖的 MinIO

MinIO 是一个专为云原生应用设计的高性能分布式对象存储系统。可扩展性和高性能的结合使每一个工作负载,无论多么苛刻,都触手可及。最近的一项基准测试在 GET 上达到了 325 GiB/s (349 GB/s),在 PUT 上达到了 165 GiB/s (177 GB/s),只有 32 个现成的 NVMe SSD 节点。

MinIO 旨在为数据湖以及运行在其上的分析和 AI 提供支持。MinIO 包括许多优化,用于处理由许多小文件组成的大型数据集,这在当今的任何开放表格式中都很常见。

也许对于数据湖更重要的是,MinIO 保证了持久性不变性此外,MinIO 对传输中驱动器上的数据进行加密,并使用IAM 和基于策略的访问控制 (PBAC)来规范对数据的访问

在 Kubernetes 中设置 Dremio OSS

我们可以使用Helm图表在 Kubernetes 集群中部署 Dremio。在这个场景中,我们将使用 Dremio OSS(开源软件)镜像部署一个 Master,三个 Executor 和三个 Zookeeper。Master 节点协调集群和 Executors 处理数据。通过部署多个Executor,我们可以并行处理数据,提高集群性能。

我们将使用 MinIO 存储桶来存储数据。上传到 Dremio 的新文件存储在 MinIO 存储桶中。这使我们能够以可扩展和分布式的方式存储和处理大量数据。

先决条件

要遵循这些说明,您需要

  • 一个 Kubernetes 集群。您可以使用MinikubeKind来设置本地 Kubernetes 集群。

  • Helm,Kubernetes 的包管理器。您可以按照本指南在您的机器上安装 Helm。

  • 在裸机kubernetes上运行的 MinIO 服务器,或者您可以使用我们的Play 服务器进行测试。

  • 用于访问 MinIO 服务器的 MinIO 客户端 (mc)。您可以按照指南在您的机器上安装 mc。

克隆 minio/openlake 回购

MinIO 工程师将 openlake 存储库放在一起,为您提供构建开源数据湖的工具。此存储库的总体目标是指导您完成使用 Apache Spark、Apache Kafka、Trino、Apache Iceberg、Apache Airflow 等开源工具构建数据湖所需的步骤,以及部署在 Kubernetes 上并以 MinIO 作为对象存储的其他工具.

!git clone https://github.com/minio/openlake

创建 MinIO 桶

让我们创建一个 MinIO 桶openlake/dremio,它将被 Dremio 用作分布式存储

!mc mb play/openlake
!mc mb play/openlake/dremio

克隆 dremio-cloud-tools 回购

我们将使用 Dremio 存储库中的 helm 图表进行设置

!git clone https://github.com/dremio/dremio-cloud-tools

我们将使用dremio_v2图表的版本,我们将使用values.minio.yamlopenlake 存储库的 Dremio 目录中的文件来设置 Dremio。我们把YAML复制到dremio-cloud-tools/charts/dremio_v2然后确认已经复制

!cp ~/openlake/dremio/charts/values.minio.yaml ~/dremio-cloud-tools/charts/dremio_v2/
!ls ~/dremio-cloud-tools/charts/dremio_v2/

部署细节

如果我们深入研究该values.minio.yaml文件(随意使用cat或在您选择的编辑器中打开该文件),我们将更深入地了解我们的部署并了解对该部分所做的一些distStorage修改

distStorage:
  aws:
    bucketName: "openlake"
    path: "/dremio"
    authentication: "accessKeySecret"
    credentials:
    accessKey: "minioadmin"
    secret: "minioadmin"

    extraProperties: |
    <property>
      <name>fs.s3a.endpoint</name>
      <value>play.min.io</value>
    </property>
    <property>
      <name>fs.s3a.path.style.access</name>
      <value>true</value>
    </property>
    <property>
      <name>dremio.s3.compat</name>
      <value>true</value>
    </property>





我们将 设置distStorageaws,存储桶的名称openlake为 Dremio 的所有存储都将位于前缀dremio(aka s3://openlake/dremio) 下。我们还需要添加,extraProperties因为我们指定了 MinIO 端点。我们还需要添加两个额外的属性以使 Dremio 与 MinIO 一起工作,fs.s3a.path.style.access需要设置为 true 并且dremio.s3.compat必须设置为 true 以便 Dremio 知道这是一个 S3 兼容的对象存储。

除此之外,我们还可以executor根据 Kubernetes 集群容量自定义多个其他配置,例如 CPU 和内存使用情况。我们还可以根据 Dremio 将要处理的工作负载的大小来指定我们需要多少个执行器。

使用 Helm 安装 Dremio

确保更新您的 Minio 端点、访问密钥和密钥values.minio.yaml下面的命令将安装dremio在新创建的命名空间中命名的 Dremio 版本dremio

!cd ~/dremio-cloud-tools/charts

!helm install dremio dremio_v2 -f dremio_v2/values.minio.yaml --namespace dremio --create-namespace


给 Helm 几分钟时间来发挥它的魔力,然后验证 Dremio 是否已安装并正在运行

!kubectl -n dremio get pods # after the helm setup is complete it takes some time for the pods to be up and running
!kubectl -n dremio get svc # List all the services in namespace dremio
!mc ls play/openlake/dremio # we should see new prefixes being created that Dremio will use later

登录到 Dremio

要登录 Dremio,让我们dremio-client为本地主机的服务打开一个端口转发。执行以下命令后,将浏览器指向http://localhost:9047为了安全起见,请记得在探索完 Dremio 后关闭端口转发。

!kubectl -n dremio port-forward svc/dremio-client 9047 

首次启动 Dremio 时需要创建一个新用户

一旦我们创建了用户,我们将看到一个欢迎页面。为了简化此工作流程,让我们将示例数据集上传到包含在 openlake 存储库中的 Dremiodata/nyc_taxi_small.csv并开始查询它。

我们可以openlake/dremio/data/nyc_taxi_small.csv点击首页右上角的+号上传,如下图

Dremio 将自动解析 CSV 并提供如下所示的推荐格式,单击“保存”继续。

验证 CSV 文件是否已上传到 MinIO 存储桶

!mc ls --summarize --recursive openlake/dremio/uploads # you will see the CSV file uploaded in to the MinIO bucket

加载文件后,我们将被带到 SQL 查询控制台,我们可以在其中开始执行查询。以下是您可以尝试执行的 2 个示例查询

SELECT count(*) FROM nyc_taxi_small;
SELECT * FROM nyc_taxi_small;

将上面的内容粘贴到控制台中,然后单击运行,然后您会看到类似下面的内容

您可以单击选项Query1卡以查看数据集中的行数

您可以单击选项Query2卡以查看数据集中的行数

数据湖和 Dremio

这篇博文向您介绍了在 Kubernetes 集群中部署 Dremio 并使用 MinIO 作为分布式存储。我们还看到了如何将示例数据集上传到 Dremio 并开始查询它。在这篇文章中,我们刚刚触及冰山一角,以帮助您开始构建数据湖。

说到冰山,Apache Iceberg 是一种为对象存储而构建的开放表格式。使用 Dremio、 Spark、Iceberg 和 MinIO的组合构建了许多数据湖要了解更多信息,请参阅The Definitive Guide to Lakehouse Architecture with Iceberg and MinIO

今天在MinIO上试用 Dremio 如果您有任何疑问或想分享技巧,请通过我们的Slack 频道联系我们或在 sales@minio.org.cn 上给我们留言。


上一篇 下一篇