使用 Kubernetes 部署 MinIO 和 Trino

2024-06-21 10:52

本文主要是介绍使用 Kubernetes 部署 MinIO 和 Trino,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Trino(以前称为 Presto)是一个 SQL 查询引擎,而不是 SQL 数据库。Trino 避开了 SQL 数据库的存储组件,只专注于一件事 - 超快的 SQL 查询。Trino 只是一个查询引擎,不存储数据。相反,Trino与各种数据库交互或直接在对象存储上交互。Trino 解析和分析您传入的 SQL 查询,创建并优化包含数据源的查询执行计划,然后调度能够智能查询它们所连接的基础数据库的工作器节点。

MinIO 经常用于存储来自 AI/ML 工作负载、数据湖到湖屋的数据,无论是 Dremio、Hive、Hudi、StarRocks 还是其他十几种出色的 AI/ML 工具解决方案。MinIO 用作主存储层时效率更高,从而降低了存储数据的总拥有成本,此外,您还可以获得将数据写入 MinIO 的额外好处,这些数据是不可变的、版本控制的,并受纠删码保护。此外,将数据保存到 MinIO 对象存储可以将其用于其他云原生机器学习和分析应用程序。

在本教程中,我们将部署一个有凝聚力的系统,该系统允许对存储在 Minio 中的大型数据集进行分布式 SQL 查询,Trino 利用 Hive Metastore 的元数据和 Redis 的表架构。

组件

以下是不同的组件以及它们在我们接下来将要介绍的设置过程中的作用。

  • Minio:Minio可用于存储大型数据集,例如Trino通常分析的数据集。

  • Hive 元存储:Hive 元存储是一种存储 Hive 表(如表架构)元数据的服务。Trino 可以在查询数据集时使用 Hive Metastore 来确定表的架构。

  • PostgreSQL for Hive Metastore:这是 Hive Metastore 的数据库后端。它是实际存储元数据的地方。

  • Redis:在此设置中,Redis 用于存储 Trino 的表模式。

  • Trino:Trino(以前称为 Presto)是一个高性能的分布式 SQL 查询引擎。它允许跨各种数据源(如 SQL 数据库、NoSQL 数据库,甚至像 Minio 这样的对象存储)查询数据。

先决条件

在开始之前,请确保已安装用于管理 Kubernetes 集群的必要工具:

  • kubectl:用于管理 Kubernetes 集群的主要命令行工具。您可以使用它来检查、操作和管理集群资源。

  • helm:Kubernetes 的包管理器。Helm 允许您使用预定义的图表在集群中部署、升级和管理应用程序。

存储库克隆

要访问在 Kubernetes 上部署 Trino 所需的资源,请克隆特定的 GitHub 存储库并导航到相应的目录:


git clone https://github.com/minio/blog-assets.gitcd blog-assets/trino-on-kubernetes

##Kubernetes 命名空间创建

Kubernetes 中的命名空间为应用程序提供了隔离的环境。为 Trino 创建一个新的命名空间来封装其部署:


kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -

Redis 表定义密钥

Redis 将存储 Trino 使用的表架构。使用 Kubernetes Secret 保护这些架构。以下命令创建一个通用密钥,从 JSON 文件获取数据:

kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true

添加 Helm 存储库

Helm 存储库提供预打包的图表,可简化应用程序部署。将 Bitnami 和 Trino 存储库添加到 Helm 配置中:

helm repo add bitnami https://charts.bitnami.com/bitnami || truehelm repo add trino https://trinodb.github.io/charts/ || true

部署 MinIO 进行数据存储

初始化 MinIO

在 Trino 命名空间中准备 MinIO。

kubectl minio init -n trino

创建 MinIO 租户

设置用于数据存储的多租户体系结构。以下示例创建一个名为“tenant-1”的租户,其中包含 4 台服务器、4 个存储卷和 4 GiB 的容量:


kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino

设置 Hive 元存储

Trino 利用 Hive Metastore 来存储表元数据。部署 PostgreSQL 以管理元数据,然后设置 Hive 元存储:

安装 PostgreSQL


helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml

部署 Hive 元存储

使用预配置的 Helm 图表在 Trino 命名空间中部署 Hive 元存储:


helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore

使用 Kubernetes 部署 MinIO 和 Trino

Trino 和 MinIO 为跨大型数据集的分布式 SQL 查询创建了一个强大的组合。按照以下步骤部署和配置系统。

部署 Redis 以存储表架构

Redis 是一种高速的内存数据存储,用于保存 Trino 表架构以增强查询性能。使用 Helm chart 在 Trino 命名空间中部署它:


helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml

部署Trino

将 Trino 部署为将连接到 MinIO 和其他数据源的分布式 SQL 查询引擎:


helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml

验证部署

通过列出 Trino 命名空间中的 pod 来确认所有组件都正常运行:

kubectl get pods -n trino

安全审查和调整

根据需要查看和调整安全设置。要禁用 S3 连接的 SSL 证书验证,请使用以下属性更新 values.yaml 文件的 additionalCatalogs 部分:

 hive.s3.ssl.enabled=false

测试

端口转发到 MinIO 租户服务

端口转发到租户的 MinIO 服务,启用本地访问:


kubectl port-forward svc/minio -n trino 9443:443

为 Trino 创建别名和存储桶

1 . 创建别名:使用 MinIO 部署中的凭据为租户建立别名:


mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure

2 . 创建存储桶:创建Trino将使用的新存储桶


mc mb my-minio/tiny --insecure

通过端口转发访问Trino UI

1 . 获取 Pod 名称:检索 Trino 协调器 Pod 的名称:


export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")

2 . 端口转发:将本地端口 8080 转发到协调器 pod:


kubectl port-forward $POD_NAME 8080:8080

3 . 访问 UI:通过访问 http://127.0.0.1:8080 在浏览器中使用 Trino UI。

通过CLI查询Trino

访问 Trino 协调器 pod 并通过命令行开始查询:

kubectl exec -it deploy/my-trino-coordinator -n trino -- trino

SHOW CATALOGS;
SHOW SCHEMAS IN minio;
       Schema--------------------defaultinformation_schema
CREATE SCHEMA minio.tinyWITH (location = 's3a://tiny/');
CREATE TABLE minio.tiny.customerWITH (format = 'ORC',external_location = 's3a://tiny/customer/') AS SELECT * FROM tpch.tiny.customer;
SELECT * FROM minio.tiny.customer LIMIT 50;
SHOW SCHEMAS IN minio;
      Schema--------------------defaultinformation_schematiny(3 rows)

确认MinIO Bucket中的数据

创建存储桶后,使用 mc 命令行工具列出内容,确认数据存储在 MinIO 中。使用以下命令:

mc ls my-minio/tiny --insecure

就这么简单!

最后的思考

在对配置问题(尤其是与安全性相关的问题)进行故障排除时,请彻底检查每个组件的 values.yaml 文件,以确保设置正确。

Trino 因其跨各种数据层(无论是专用数据库还是对象存储)优化查询的能力而脱颖而出。它旨在通过下推查询以仅检索所需的基本数据来最大程度地减少数据传输。这使Trino能够连接来自不同来源的数据集,执行进一步处理,或有效地返回精确的结果。

MinIO因其行业领先的可扩展性和性能而与Trino完美搭配。MinIO 能够处理跨 AI/ML 和分析的大量工作负载,毫不费力地支持 Trino 查询及其他查询。在最近的基准测试中,MinIO 在 32 个节点上实现了令人印象深刻的 325 GiB/s (349 GB/s) 的 GET 操作和 165 GiB/s (177 GB/s) 的 PUT 操作。这种卓越的性能确保了存储在MinIO中的数据仍然易于访问,使MinIO成为Trino的可靠和高性能选择,而不会成为瓶颈。

这篇关于使用 Kubernetes 部署 MinIO 和 Trino的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081029

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学