paint-brush
Cómo implementar MinIO y Trino con Kubernetespor@minio
4,960 lecturas
4,960 lecturas

Cómo implementar MinIO y Trino con Kubernetes

por MinIO6m2024/05/23
Read on Terminal Reader

Demasiado Largo; Para Leer

Con la capacidad de manejar cargas de trabajo importantes en IA/ML y análisis, MinIO admite sin esfuerzo consultas de Trino y más.
featured image - Cómo implementar MinIO y Trino con Kubernetes
MinIO HackerNoon profile picture
0-item
1-item



trino (anteriormente Presto) es un motor de consultas SQL, no una base de datos SQL. Trino ha evitado el componente de almacenamiento de la base de datos SQL para centrarse en una sola cosa: consultas SQL ultrarrápidas. Trino es sólo un motor de consultas y no almacena datos. En cambio, Trino interactúa con varias bases de datos o directamente en el almacenamiento de objetos. Trino analiza y analiza la consulta SQL que usted pasa, crea y optimiza un plan de ejecución de consultas que incluye las fuentes de datos y luego programa nodos trabajadores que pueden consultar de manera inteligente las bases de datos subyacentes a las que se conectan.


MinIO se utiliza con frecuencia para almacenar datos desde cargas de trabajo de AI/ML, Datalakes hasta casas de lago, ya sea Dremio, Hive, Hudi, StarRocks o cualquiera de la otra docena de excelentes soluciones de herramientas de AI/ML. MinIO es más eficiente cuando se utiliza como capa de almacenamiento principal, lo que reduce el costo total de propiedad de los datos almacenados, además obtiene los beneficios adicionales de escribir datos en MinIO, es decir, inmutable , versionado y protegido por codificación de borrado . Además, guardar datos en el almacenamiento de objetos MinIO los pone a disposición de otras aplicaciones de análisis y aprendizaje automático nativas de la nube.


En este tutorial, implementaremos un sistema cohesivo que permite consultas SQL distribuidas en grandes conjuntos de datos almacenados en Minio, con Trino aprovechando los metadatos de Hive Metastore y los esquemas de tablas de Redis.

Componentes

Estos son los diferentes componentes y lo que hacen en nuestro proceso de configuración que veremos a continuación.


  • Minio: Minio se puede utilizar para almacenar grandes conjuntos de datos, como los que normalmente analiza Trino.
  • Hive Metastore : Hive Metastore es un servicio que almacena metadatos para tablas de Hive (como el esquema de tabla). Trino puede usar Hive Metastore para determinar el esquema de las tablas al consultar conjuntos de datos.
  • PostgreSQL para Hive Metastore: este es el backend de la base de datos para Hive Metastore. Es donde realmente se almacenan los metadatos.
  • Redis: en esta configuración, Redis para almacenar esquemas de tablas para Trino.
  • Trino: Trino (anteriormente conocido como Presto) es un motor de consultas SQL distribuido de alto rendimiento. Permite consultar datos en varias fuentes de datos, como bases de datos SQL, bases de datos NoSQL e incluso almacenamiento de objetos como Minio.

Requisitos previos

Antes de comenzar, asegúrese de tener instaladas las herramientas necesarias para administrar su clúster de Kubernetes:


  • kubectl : la principal herramienta de línea de comandos para administrar clústeres de Kubernetes. Puede usarlo para inspeccionar, manipular y administrar recursos del clúster.
  • helm : un administrador de paquetes para Kubernetes. Helm le permite implementar, actualizar y administrar aplicaciones dentro de su clúster mediante gráficos predefinidos.

Clonación de repositorios

Para acceder a los recursos necesarios para implementar Trino en Kubernetes, clone el repositorio de GitHub específico y navegue hasta el directorio apropiado:


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

Creación de espacios de nombres de Kubernetes

Los espacios de nombres en Kubernetes proporcionan entornos aislados para aplicaciones. Cree un nuevo espacio de nombres para que Trino encapsule su implementación:


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

Secreto de definición de tabla de Redis

Redis almacenará los esquemas de tablas utilizados por Trino. Proteja estos esquemas con un secreto de Kubernetes. El siguiente comando crea un secreto genérico y obtiene datos de un archivo JSON:


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


Agregar repositorios de Helm

Los repositorios de Helm proporcionan gráficos preempaquetados que simplifican la implementación de aplicaciones. Agrega los repositorios Bitnami y Trino a tu configuración de Helm:


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

Implementar MinIO para almacenamiento de datos

Inicializar MinIO

Prepare MinIO dentro del espacio de nombres Trino.


 kubectl minio init -n trino

Crear inquilino MinIO

Configure una arquitectura multiinquilino para el almacenamiento de datos. El siguiente ejemplo crea un inquilino denominado "inquilino-1" con cuatro servidores, cuatro volúmenes de almacenamiento y una capacidad de 4 GiB:


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

Configurar Hive Metastore

Trino utiliza Hive Metastore para almacenar metadatos de tablas. Implemente PostgreSQL para administrar los metadatos y luego configure Hive Metastore:

Instalar PostgreSQL


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

Implementar Hive Metastore

Utilice un gráfico Helm preconfigurado para implementar Hive Metastore dentro del espacio de nombres Trino:


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

Implementación de MinIO y Trino con Kubernetes

Trino y MinIO crean una poderosa combinación para consultas SQL distribuidas en grandes conjuntos de datos. Siga estos pasos para implementar y configurar el sistema.

Implementar Redis para almacenar esquemas de tablas

Redis es un almacén de datos en memoria de alta velocidad que se utiliza para contener esquemas de tablas Trino para mejorar el rendimiento de las consultas. Implementarlo en el espacio de nombres de Trino usando un gráfico de Helm:


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


Implementar Trino

Implemente Trino como motor de consultas SQL distribuido que se conectará a MinIO y otras fuentes de datos:


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

Verificar implementación

Confirme que todos los componentes se estén ejecutando correctamente enumerando los pods en el espacio de nombres de Trino:


 kubectl get pods -n trino


Revisión y ajustes de seguridad


Revise y ajuste la configuración de seguridad según sea necesario. Para deshabilitar la validación de certificados SSL para conexiones S3, actualice la sección adicionalCatalogs del archivo value.yaml con la siguiente propiedad:


 hive.s3.ssl.enabled=false

Pruebas

Reenvío de puertos al servicio de inquilino MinIO

Reenvío de puertos al servicio MinIO del inquilino, lo que permite el acceso local:


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

Crear alias y depósito para Trino

1. Cree un alias: establezca un alias para el inquilino utilizando las credenciales de la implementación de MinIO:


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


2. Crear depósito: crea un nuevo depósito que Trino usará.


 mc mb my-minio/tiny --insecure

Acceda a la interfaz de usuario de Trino a través de Port Forward

1. Obtener el nombre del pod: recupere el nombre del pod coordinador de Trino:


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


2. Reenvío de puerto: reenvíe el puerto local 8080 al módulo coordinador:


 kubectl port-forward $POD_NAME 8080:8080


3. Acceda a la interfaz de usuario: utilice la interfaz de usuario de Trino en su navegador visitando http://127.0.0.1:8080.



Consultar Trino a través de CLI

Acceda al pod del coordinador de Trino y comience a realizar consultas a través de la línea de comando:


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


 SHOW CATALOGS;


 SHOW SCHEMAS IN minio;


 Schema -------------------- default information_schema


 CREATE SCHEMA minio.tiny WITH (location = 's3a://tiny/');


 CREATE TABLE minio.tiny.customer WITH ( 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 -------------------- default information_schema tiny (3 rows)


Confirmar datos en el depósito MinIO

Después de crear el depósito, confirme que los datos estén almacenados en MinIO enumerando el contenido con la herramienta de línea de comandos mc. Utilice el siguiente comando:


 mc ls my-minio/tiny --insecure


¡Es tan simple como eso!

Pensamientos finales

Al solucionar problemas de configuración, especialmente aquellos relacionados con la seguridad, revise minuciosamente los archivos value.yaml de cada componente para garantizar la configuración adecuada.


Trino destaca por su capacidad para optimizar consultas en varias capas de datos, ya sean bases de datos especializadas o almacenamiento de objetos. Su objetivo es minimizar la transferencia de datos presionando consultas para recuperar solo los datos esenciales requeridos. Esto permite a Trino unir conjuntos de datos de diferentes fuentes, realizar procesamientos adicionales o devolver resultados precisos de manera eficiente.


MinIO combina excepcionalmente bien con Trino debido a su escalabilidad y rendimiento líderes en la industria. Con la capacidad de manejar cargas de trabajo importantes en IA/ML y análisis, MinIO admite sin esfuerzo consultas de Trino y más. En pruebas comparativas recientes, MinIO logró unos impresionantes 325 GiB/s (349 GB/s) para operaciones GET y 165 GiB/s (177 GB/s) para operaciones PUT en solo 32 nodos. Este notable rendimiento garantiza que los datos almacenados en MinIO sigan siendo fácilmente accesibles, lo que convierte a MinIO en una opción confiable y de alto rendimiento para Trino sin convertirse en un cuello de botella.


Si tiene alguna pregunta sobre MinIO y Trino, asegúrese de comunicarse con nosotros en Flojo !