paint-brush
Creación de arquitecturas de datos modernas y eficaces con Iceberg, Tabular y MinIOpor@minio
7,928 lecturas
7,928 lecturas

Creación de arquitecturas de datos modernas y eficaces con Iceberg, Tabular y MinIO

por MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Los datalakes modernos proporcionan un centro central para todas sus necesidades de datos. Sin embargo, crear y gestionar un lago de datos eficaz puede resultar complejo.
featured image - Creación de arquitecturas de datos modernas y eficaces con Iceberg, Tabular y MinIO
MinIO HackerNoon profile picture
0-item
1-item


El panorama de datos moderno exige un nuevo tipo de infraestructura, una que integre perfectamente datos estructurados y no estructurados, escale sin esfuerzo y potencie cargas de trabajo de IA/ML eficientes. Aquí es donde lagos de datos modernos entre, proporcionando un centro central para todas sus necesidades de datos. Sin embargo, crear y gestionar un lago de datos eficaz puede resultar complejo.


Esta publicación de blog profundiza en tres poderosas herramientas que pueden optimizar su enfoque actual: Iceberg apache , Tabular, y MinIO. Los pasos a continuación le explicarán cómo estos servicios se combinan a la perfección para crear una arquitectura de lago de datos sólida y nativa de la nube optimizada específicamente para cargas de trabajo de IA/ML.

¿Qué es tabular?

Tabular es una plataforma de datos creada por los creadores originales de Apache Iceberg. Está diseñado para proporcionar una plataforma de almacenamiento universal e independiente que se conecta a cualquier capa informática, eliminando la dependencia del proveedor de datos. Esta característica es fundamental para la pila de datos moderna, ya que permite a los usuarios elegir las mejores herramientas informáticas y de almacenamiento de su clase sin verse obligados a utilizar un conjunto de herramientas antiguo o no coincidente de un proveedor en particular.


en un arquitectura de MinIO e Iceberg y puede mejorarse con Tabular. Tabular se puede utilizar para administrar y consultar datos de Iceberg almacenados en MinIO, lo que permite el almacenamiento y la administración de datos estructurados de una manera escalable, de alto rendimiento y nativa de la nube. Estos componentes nativos de Kubernetes funcionan juntos sin problemas con muy poca fricción y se basan en las capacidades de cada uno para funcionar a escala.

¿Por qué S3FileIO en lugar del file-io de Hadoop?

Esta implementación aprovecha S3FileIO de Iceberg. S3FileIO se considera mejor que file-io de Hadoop por varias razones. Algunos de los cuales ya hemos discutido en otra parte :


  1. Optimizado para almacenamiento en la nube : S3FileIO de Iceberg está diseñado para funcionar con almacenamiento nativo en la nube.


  2. Rendimiento mejorado y limitación minimizada: Iceberg utiliza un Proveedor de ubicación de almacén de objetos para distribuir archivos a través de múltiples prefijos en un depósito MinIO, lo que ayuda a minimizar la limitación y maximizar el rendimiento para las operaciones de IO relacionadas con S3.


  3. Consistencia estricta: Iceberg ha sido actualizado aprovechar al máximo la coherencia estricta eliminando comprobaciones de coherencia redundantes que podrían afectar el rendimiento.


  4. Carga progresiva multiparte: S3FileIO de Iceberg implementa una carga progresiva multiparte algoritmo, que carga partes de archivos de datos en paralelo tan pronto como cada parte está lista, lo que reduce el uso del disco local y aumenta la velocidad de carga.


  5. Verificación de suma de comprobación: Iceberg permite validaciones de suma de control para escrituras de API de S3 para garantizar la integridad de los objetos cargados, lo que se puede habilitar configurando la propiedad de catálogo adecuada.


  6. Etiquetas personalizadas: Iceberg admite la adición etiquetas personalizadas a objetos durante las operaciones de escritura y eliminación con la API de S3, lo que puede resultar útil para el seguimiento y la gestión de costes.


  7. Evitar el almacenamiento en caché negativo: la interfaz FileIO en Iceberg no requiere garantías tan estrictas como un sistema de archivos compatible con Hadoop, lo que le permite evitar el almacenamiento en caché negativo que de otro modo podría degradar el rendimiento.


Por el contrario, el S3A FileSystem de Hadoop, que se utilizaba antes de S3FileIO, no ofrece el mismo nivel de optimización para el almacenamiento en la nube. Todo esto para decir: no limite su infraestructura de lago de datos de cara al futuro con las trampas del pasado.

Requisitos previos

Antes de comenzar, asegúrese de que su sistema cumpla con los siguientes requisitos:

Si está comenzando desde cero, puede instalar ambos usando el Escritorio acoplable instalador para su plataforma específica. A menudo es más fácil que descargar Docker y Docker Compose por separado. Verifique si Docker está instalado ejecutando el siguiente comando:


 docker-compose --version


Empezando

Para comenzar, clone o copie el archivo YAML en Tabular. repositorio git . Solo necesitas el YAML para este tutorial. Siéntase libre de explorar el resto del repositorio más adelante.


Rompiéndolo

El archivo YAML proporcionado es un archivo de configuración de Docker Compose. Define un conjunto de servicios y sus configuraciones para una aplicación Docker de múltiples contenedores. En este caso, existen dos servicios: Spark-Iceberg y MinIO. Analicemos cada sección:


1. Servicio Spark-Iceberg:


 spark-iceberg: image: tabulario/spark-iceberg container_name: spark-iceberg build: spark/ networks: iceberg_net: depends_on: - rest - minio volumes: - ./warehouse:/home/iceberg/warehouse - ./notebooks:/home/iceberg/notebooks/notebooks environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 ports: - 8888:8888 - 8080:8080 - 10000:10000 - 10001:10001 rest: image: tabulario/iceberg-rest container_name: iceberg-rest networks: iceberg_net: ports: - 8181:8181 environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 - CATALOG_WAREHOUSE=s3://warehouse/ - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT=http://minio:9000



imagen: especifica la imagen de Docker que se utilizará para el servicio spark-iceberg. En este caso, utiliza el tabulario/spark-iceberg:latest image.

depende_on: especifica que el servicio spark-iceberg depende de los servicios rest y minio.

nombre_contenedor: Asigna un nombre específico (spark-iceberg) al contenedor.

entorno: establece variables de entorno para el contenedor, incluidas las credenciales de Spark y AWS.

volúmenes: monta directorios locales (./warehouse y ./notebooks) como volúmenes dentro del contenedor.

puertos: asigna puertos de contenedores a puertos de host para acceder a Spark UI y otros servicios.


2. Servicio Minio:


 minio: image: minio/minio container_name: minio environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password - MINIO_DOMAIN=minio networks: iceberg_net: aliases: - warehouse.minio ports: - 9001:9001 - 9000:9000 command: ["server", "/data", "--console-address", ":9001"]


imagen: especifica la imagen de Docker para el servicio MinIO.

nombre_contenedor: Asigna un nombre específico (MinIO) al contenedor.

entorno: establece variables de entorno para configurar MinIO, incluidas las credenciales de usuario raíz.

puertos: asigna puertos de contenedores a puertos de host para acceder a la interfaz de usuario de MinIO.

Comando: especifica el comando para iniciar el servidor MinIO con parámetros específicos.


Otro aspecto del servicio MinIO es mc , la herramienta de línea de comandos de MinIO.


 mc: depends_on: - minio image: minio/mc container_name: mc networks: iceberg_net: environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "


depende_on: especifica que el servicio mc depende del servicio MinIO.

imagen: especifica la imagen de Docker para el servicio mc.

nombre_contenedor: Asigna un nombre específico (mc) al contenedor.

entorno: establece variables de entorno para configurar el cliente MinIO.

punto de entrada: define el comando del punto de entrada para el contenedor, incluidos los pasos de configuración para el cliente MinIO.


 /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "



Esta secuencia de comandos esencialmente realiza las siguientes tareas:


  • Elimina el directorio de almacén existente y su contenido del servidor MinIO.

  • Crea un nuevo depósito llamado almacén.

  • Establece la política de acceso del depósito de almacén como pública.


Este archivo Docker Compose organiza un entorno de múltiples contenedores con servicios para Spark, PostgreSQL y MinIO. Configura dependencias, variables de entorno y comandos necesarios para ejecutar los servicios juntos. Los servicios funcionan en conjunto para crear un entorno de desarrollo para el procesamiento de datos utilizando Spark e Iceberg con MinIO como backend de almacenamiento de objetos.

Empezando

En una ventana de terminal, ingrese al directorio tabular-spark-setup en el repositorio y ejecute el siguiente comando:


 docker-compose up


Inicie sesión en MinIO en http://127.0.0.1:9001 con las credenciales admin:password para ver que se ha creado el depósito de almacén.



Una vez que todos los contenedores estén en funcionamiento, puede acceder a su servidor Jupyter Notebook navegando a http://localhost:8888



Ejecute uno de los cuadernos de muestra y regrese a MinIO en http://127.0.0.1:9001 para ver su almacén lleno de datos.


Construyendo su lago de datos moderno

Este tutorial sobre cómo construir un lago de datos moderno con Iceberg, Tabular y MinIO es solo el comienzo. Este poderoso trío abre puertas a un mundo de posibilidades. Con estas herramientas, puede integrar y analizar sin problemas todos sus datos, estructurados y no estructurados, para descubrir patrones ocultos e impulsar decisiones basadas en datos que impulsen la innovación. Aproveche la eficiencia y la flexibilidad de esta arquitectura en producción para acelerar sus iniciativas de IA/ML y desbloquear el verdadero potencial de sus modelos de aprendizaje automático, acelerando su camino hacia descubrimientos innovadores. Comuníquese con nosotros en [email protected] o en nuestro Flojo canal si tiene alguna pregunta mientras construye.