Seleccionar página

En esta entrada, exploraremos cómo desplegar la plataforma Marquez de una forma más completa, permitiendo utilizar una instancia externa tanto para PostgreSQL como para OpenSearch. De esta manera, se creará una base de datos en PostgreSQL sobre la que Marquez escribirá los metadatos, y se apoyará en una instancia de OpenSearch para crear índices de búsquedas. El despliegue de los servicios propios de Marquez (API y frontal) se hará sobre Docker-compose, aprovechando que usaremos archivos Dockerfile del proyecto de base para las modificaciones que son necesarias realizar.

Como siempre, en el Github de TBL Project encontrarás todos los archivos que utilicé para este lab, así como también unos archivos adicionales para que desplieguéis una PostgreSQL y una instancia OpenSearch sobre Docker-compose, para replicar el lab completo, si no disponéis de instancias ya configuradas.

¡Configura PostgreSQL en Docker en Minutos!

¿Qué es Marquez?

Marquez es un proyecto de software libre que implementa el framework de OpenLineage, ofreciendo una API contra la que poder enviar eventos de linaje, y nos proporciona también una interfaz web con la que poder navegar por la información de jobs y datasets. En la página del proyecto se nos ofrece una forma de montar un entorno rápido de Marquez para evaluar la plataforma, incluso permite cargar ejemplos.

Esta forma rápida de desplegar la plataforma levanta una serie de servicios que son los que conforman Marquez y sobre los que se apoya. En detalle, lo que necesitamos para correr Marquez es:

  • Una instancia de PostgreSQL sobre la que se registran los metadatos de Marquez.
  • Una instancia de OpenSearch sobre la que se generan índices utilizados para realizar búsquedas sobre los metadatos de linaje de datos cargados en Marquez.
  • El servicio de API/backend de Marquez.
  • El frontal web de Marquez.

Interfaz de usuario de Marquez mostrando metadatos de linaje de datos

Pasos para Desplegar Marquez

Los pasos que debemos dar para desplegar Marquez de la forma que se ha comentado se resumen en:

  1. Crear la base de datos en PostgreSQL.
  2. Descargar el proyecto Marquez de su Github.
  3. Crear imagen custom para el servicio de API, y para el frontal web.
  4. Crear archivo docker-compose y lanzar los servicios de Marquez.

Vamos a ver cada punto con detalle. Nota: Marquez trabaja con una versión 14 de PostgreSQL, yo he utilizado una instancia en la versión 16 y no he tenido problemas.

1. Crear la Base de Datos Marquez en PostgreSQL

En la instancia de PostgreSQL que utilicemos, se debe crear esta base de datos y usuario que utilizará Marquez. Solo es necesario crear la base de datos, en el arranque del servicio de API/backend se lanzará un proceso de ORM que generará las tablas. Así que el usuario que se cree debe tener permisos sobre la base de datos.

2. Descargar el Proyecto Marquez

Lo primero será crear una copia de un par de archivos: marquez.dev.yml en el raíz del proyecto.

3. Crear Imágenes Custom para API y Frontal Web

Configuración del Servicio API/Backend

Ahora editaremos el archivo marquez.yml para incluir la configuración con los accesos a la base de datos de PostgreSQL creada y al servicio de Opensearch. Aprovechamos para ya persistir la información de los puertos de escucha del servicio de backend.

description: Contains sensitive information

Por último, antes de generar la imagen custom, creamos el archivo Dockerfile_custom a partir del archivo Dockerfile, todo ello en la raíz del proyecto. En este archivo modificaremos las referencias a los archivos marquez.edv.yml y entrypoint.sh, por los dos archivos que hemos creado y editado, para que se aplique la configuración hecha.

ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

Ahora solo nos queda crear la imagen:

docker build -f Dockerfile_custom -t marquez:0.50.0_custom --no-cache --rm .

Configuración del Frontal Web

COPY .ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

Con esto se crea la imagen custom para el frontal:

docker build -f Dockerfile_custom -t marquez-web:0.50.0_custom --no-cache --rm .

4. Lanzar los Servicios de Marquez

Toca lanzar los servicios de Marquez. Para ello creamos un archivo docker-compose.yaml en donde queramos, ya tenemos creadas las imágenes en el repo local de la máquina, si tenéis un repositorio para imágenes Docker podéis subir estas imágenes y trabajar con ellas desde cualquier equipo que tenga acceso al repositorio de las imágenes.

- api

En la ruta en donde tenemos el archivo crearemos el directorio marquez_data para mapearlo al contenedor. Inicialmente no se hará uso de este directorio, pero queda para futuras versiones o configuraciones en donde nos facilitará el poder incluir scripts o archivos temporales o de configuración.

Solo nos queda lanzar los servicios:

docker-compose up -d

Para validar el funcionamiento del servicio, incluiremos un ejemplo de procesos START/COMPLETE que podremos revisar desde la web de Marquez. Nada mas acceder veremos una imagen como la que hemos visto un par de párrafos más arriba en ella podemos gestionar los usuarios, entornos, logs, parámetros de configuración... de este primer menú lateral no voy a comentaros nada.

Docker Compose: Ejemplo de Configuración

Aquí mostramos un ejemplo básico de un archivo `docker-compose.yml` para desplegar los servicios de Marquez:

Servicio Imagen Puertos Dependencias
API marquez:0.50.0_custom 5000:5000 PostgreSQL, OpenSearch
Web marquez-web:0.50.0_custom 3000:3000 API

Este archivo define los servicios API y Web, especificando las imágenes customizadas, los puertos y las dependencias necesarias.

Con estos pasos, habremos desplegado Marquez utilizando Docker y gestionando una base de datos PostgreSQL externa. Esto proporciona una mayor flexibilidad y control sobre los componentes de la plataforma.