使用 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的可靠和高性能选择,而不会成为瓶颈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1. GWO灰狼优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO)是一种启发式优化算法,模拟了灰狼群体的社会行为,包…

天马学航——智慧教务系统(移动端)开发日志六

天马学航——智慧教务系统(移动端)开发日志六 日志摘要:统一身份认证设计,修复了选课信息错乱的问题 界面设计 实现思路 使用 Java 和 Jedis 完成实现: 步骤一:添加 Jedis 依赖 首先需要在项目中添加 Jedis 依赖,…

使用海康威视的SDK,利用WPF设计一个网络摄像头的显示控制程序(上位机)

目录 一、下载海康威视的SDK 1.1 关于SDK 1.2 关于API 1.3 关于DLL 1.4 下载海康威视的SDK 1.5 关于网络高清摄像机 二、对下载的SDK进行调试 三、利用Visual Studio打开项目的解决方案 3.1 Visual Studio 2022下载 3.2 关于句柄 四、打开WPF进行ui页面设计 4.1 关…

react笔记-03react-router篇

本文章是react的路由笔记 一、react路由(v5版本) 1. 什么是路由(前端)? 一个路由就算一个映射关系(key: value)key为路径,value为组件 2. 前端路由的工作原理 根据浏览器历史记录&#xff…

双例集合(三)——双例集合的实现类之TreeMap容器类

Map接口有两个实现类,一个是HashMap容器类,另一个是TreeMap容器类。TreeMap容器类的使用在API上于HashMap容器类没有太大的区别。它们的区别主要体现在两个方面,一个是底层实现方式上,HashMap是基于Hash算法来实现的吗&#xff0c…

什么是电商大数据?主流电商大数据的采集||关键性技术|电商API接口接入说明

大数据的时代早已到来,然而想要全方位掌握大数据,务必要掌握大数据造成的时代特征,之前大数据被视为废物,如今被视为财产。主流电商大数据的采集,电商API接口的接入在大多数人理解中,是企业用数据来优化自己…

HackTheBox-Linux基础

Linux 结构 历史 许多事件导致了第一个 Linux 内核的创建,并最终创建了 Linux 操作系统 (OS),从 1970 年 Ken Thompson 和 Dennis Ritchie(当时都在 AT&T 工作)发布 Unix 操作系统开始。伯克利软件发行…

微信小程序毕业设计-餐厅点餐系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

OCC显示渲染结构剖析

1.Display显示 2.Drawer 3.Graphics 4.InteractiveContext 5.Render 6.Selection 7.View

图像分割(四)---(图像显示、灰度直方图和三维灰度图综合分析选取最佳分割方法)

一、引言 对彩色图像进行分割的一种常用方法,是先把彩色图像转灰度图像,然后再选择合适的阈值进行二值分割。但有时彩色图像转灰度图像后不具有典型的双峰特性,二值分割效果不好。本文章提出一种确定彩色图像分割方法的新思路。首先读入一幅彩…

以太坊==给合约转入/查询合约剩余/合约转给某账户/结构体/MAP

转入 必须要定义该函数,或者定义fallback // 接收以太币 receive() external payable {} // Corrected Line // SPDX-License-Identifier: MIT pragma solidity ^0.8.0;contract SimpleStorage {uint256 private storedData;// 事件,用于通知数据变更e…

Java-异常:不恰当的异常转换、不充分的日志记录、过度或不当的异常捕获

Java-异常:不恰当的异常转换、不充分的日志记录、过度或不当的异常捕获 Java-异常:不恰当的异常转换、不充分的日志记录、过度或不当的异常捕获一、前期准备二、案例分析1、不恰当的异常转换2、不充分日志记录3、过度或不当的异常捕获 三、正确处理方式1…

Open WebUI – 本地化部署大模型仿照 ChatGPT用户界面

Open WebUI介绍: Open WebUI 是一个仿照 ChatGPT 界面,为本地大语言模型提供图形化界面的开源项目,可以非常方便的调试、调用本地模型。你能用它连接你在本地的大语言模型(包括 Ollama 和 OpenAI 兼容的 API)&#xf…

emqx5.6.1 数据、配置备份与迁移

EMQX 支持导入和导出的数据包括: EMQX 配置重写的内容: 认证与授权配置规则、连接器与 Sink/Source监听器、网关配置其他 EMQX 配置内置数据库 (Mnesia) 的数据 Dashboard 用户和 REST API 密钥客户端认证凭证(内置数据库密码认证、增强认证…

公共网络IP地址不正确?别担心,这里有解决方案

在数字化时代,公共网络IP地址的正确性对于我们的在线体验至关重要。它不仅是网络连接的标识,更是确保我们正常访问互联网资源、享受网络服务的基础。然而,有时我们可能会遇到公共网络IP地址不正确的情况,这不仅会影响我们的网络速…

【已解决】SpringBoot图片更新需重启服务器才能显示

问题描述 1、更新头像,并跳转回列表页,发现显示不出来 2、但是前端获取用户头像的信息是在加载页面就会被调用的,同时前端也不存在所谓的缓存问题,因为没有动这部分代码。 但查看响应是能获得正确的信息(前端打印图片…

数据结构--单链表(图文)

单链表的概念 在单链表中,每个元素(称为节点)包含两部分:一部分是存储数据的数据域,另一部分是存储下一个节点地址的指针域。这里的“单”指的是每个节点只有一个指向下一个节点的指针。 节点:链表中的基…

Apple - Secure Coding Guide

本文翻译整理自:Secure Coding Guide https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Introduction.html#//apple_ref/doc/uid/TP40002477-SW1 文章目录 一、安全编码指南简介1、概览黑客和攻击者没有平台是免疫…

【办公类-50-01】20240620自主游戏观察记录表19周内容打乱

背景需求: 又到了期末,各种班级资料需要提交。 有一份自主游戏观察记录需要写19周(每周2次)的观察记录,并根据参考书填写一级、三级、五级的评价指标。 去年中六班的时候,我很认真的手写了21周的户外游戏…

具有 Hudi、MinIO 和 HMS 的现代数据湖

Apache Hudi 已成为管理现代数据湖的领先开放表格式之一,直接在现代数据湖中提供核心仓库和数据库功能。这在很大程度上要归功于 Hudi 提供了表、事务、更新/删除、高级索引、流式摄取服务、数据聚类/压缩优化和并发控制等高级功能。 我们已经探讨了 MinIO 和 Hudi…