Datavin3

Construye y despliega 7: Ejecuta canalizaciones y flujos de trabajo de Apache Hop usando Docker

Escrito por Adalennis Buchillón Soris | 13 de noviembre de 2024 8:58:22 Z

¡Bienvenido de nuevo a nuestra serie "Construye y despliega"! En publicaciones anteriores, exploramos la creación y ejecución de pipelines de Apache Hop utilizando la Hop GUI y Hop Run. Ahora vamos a dar un paso más ejecutando estos pipelines y workflows en un contenedor Docker.

Docker ofrece un entorno consistente en diferentes plataformas, lo que lo convierte en una opción ideal para implementar Apache Hop de manera escalable, aislada y repetible.

En esta publicación, te guiaremos para ejecutar tus pipelines y workflows de Apache Hop usando Docker para tu proyecto, "my-hop-project".

¡Empecemos!

¿Por qué usar Docker con Apache Hop?

Ejecutar Apache Hop dentro de Docker presenta varias ventajas clave:

  • Consistencia del entorno: Docker asegura que tus pipelines se ejecuten de la misma manera en diferentes entornos, eliminando problemas de compatibilidad.
  • Despliegue simplificado: Puedes desplegar Apache Hop en un entorno containerizado sin preocuparte por las dependencias o configuraciones.
  • Aislamiento: Los contenedores Docker aíslan tus pipelines y workflows del sistema host, reduciendo conflictos.
  • Automatización: Ideal para integrar con pipelines de CI/CD o desplegar en entornos en la nube.

Requisitos previos

Antes de comenzar, asegúrate de tener lo siguiente:

  • Apache Hop instalado: No importa tu sistema operativo; Apache Hop debe estar funcionando.
  • Docker instalado: Asegúrate de que Docker esté configurado en tu máquina (Windows, macOS o Linux).
  • Proyecto de Apache Hop listo: Ten preparados tus pipelines y workflows (como "my-hop-project"). En nuestro caso, utilizaremos el mismo workflow creado en "Build & deploy 2".

Paso 1: Descargar la imagen Docker de Apache Hop

Antes de ejecutar tus pipelines y workflows en Docker, necesitas descargar la imagen oficial de Apache Hop desde Docker Hub:

Comando:

bash
docker pull apache/hop:<tag>

 

Ejemplo:

bash
docker pull apache/hop:latest

 

Explicación del comando:

  • docker pull: Comando para descargar una imagen de un registro Docker.
  • apache/hop: Especifica el repositorio y el nombre de la imagen Docker. En este caso, es la imagen de Apache Hop.
  • <tag>: Es un marcador de posición para la etiqueta de versión específica de la imagen que deseas descargar, como latest, stable o un número de versión específico.

Paso 2: Ejecutar un pipeline con Docker

Vamos a ejecutar un pipeline creado en "my-hop-project", encargado de extraer y transformar los datos.

Comando:

bash
docker run -it --rm \
--env HOP_LOG_LEVEL=<logLevel> \
--env HOP_FILE_PATH='<filePath>' \
--env HOP_PROJECT_FOLDER=<projectFolder> \
--env HOP_PROJECT_NAME=<projectName> \
--env HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=<environmentName> \
--env HOP_RUN_CONFIG=<runConfig> \
--name <containerName> \
-v <localPath>:/files \
apache/hop:<tag>

 

Ejemplo:

bash
docker run -it --rm \
--env HOP_LOG_LEVEL=Basic \
--env HOP_FILE_PATH='${PROJECT_HOME}/code/clean-transform.hpl' \
--env HOP_PROJECT_FOLDER=/files \
--env HOP_PROJECT_NAME=my-hop-project \
--env HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=${PROJECT_HOME}/dev-env.json \
--env HOP_RUN_CONFIG=local \
--name hop-pipeline-container \
-v /path/to/my-hop-project:/files \
apache/hop:latest

 

Explicación de los parámetros:

  • --env HOP_LOG_LEVEL=Basic: Define el nivel de registro en "Basic".
  • --env HOP_FILE_PATH='${PROJECT_HOME}/code/clean-transform.hpl': Especifica la ruta al archivo del pipeline.
  • --env HOP_PROJECT_FOLDER=/files: Mapea la carpeta del proyecto dentro del contenedor.
  • --env HOP_PROJECT_NAME=my-hop-project: Especifica el proyecto dentro de Apache Hop.
  • --env HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=${PROJECT_HOME}/dev-env.json: Especifica el archivo de configuración del entorno.
  • --env HOP_RUN_CONFIG=local: Configura la ejecución en modo "local".
  • --name hop-pipeline-container: Asigna un nombre personalizado al contenedor Docker.
  • -v /path/to/my-hop-project:/files: Mapea la carpeta de tu proyecto local al contenedor.
  • apache/hop:latest: Utiliza la imagen más reciente de Apache Hop en Docker Hub.

Paso 3: Ejecutar un workflow con Docker

Ahora, ejecutemos el workflow creado en "Build & deploy 2", que coordina la ejecución secuencial de dos pipelines: "clean-transform" y "aggregate".

Comando:

bash
docker run -it --rm \
--env HOP_LOG_LEVEL=<logLevel> \
--env HOP_FILE_PATH='<filePath>' \
--env HOP_PROJECT_FOLDER=<projectFolder> \
--env HOP_PROJECT_NAME=<projectName> \
--env HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=<environmentName> \
--env HOP_RUN_CONFIG=<runConfig> \
--name <containerName> \
-v <localPath>:/files \
apache/hop:<tag>

Ejemplo:

bash
docker run -it --rm \
--env HOP_LOG_LEVEL=Basic \
--env HOP_FILE_PATH='${PROJECT_HOME}/code/flights-processing.hwf' \
--env HOP_PROJECT_FOLDER=/files \
--env HOP_PROJECT_NAME=my-hop-project \
--env HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=${PROJECT_HOME}/dev-env.json \
--env HOP_RUN_CONFIG=local \
--name hop-pipeline-container \
-v /path/to/my-hop-project:/files \
apache/hop:latest

 

Paso 4: Automatización con Docker y scripts de shell

Para automatizar la ejecución de workflows o pipelines en Docker, puedes crear un script de shell que ejecute estos comandos y monitorice los códigos de salida.

Ejemplo de script:

bash
#!/bin/bash
# Ejecuta el workflow

docker run -it --rm \
--env HOP_LOG_LEVEL=Basic \
--env HOP_FILE_PATH='${PROJECT_HOME}/code/flights-processing.hwf' \
--env HOP_PROJECT_FOLDER=/files \
--env HOP_ENVIRONMENT_CONFIG_FILE_NAME_PATHS=${PROJECT_HOME}/dev-env.json \
--env HOP_RUN_CONFIG=local \
--name hop-pipeline-container \
-v /path/to/my-hop-project:/files \
apache/hop:latest

# Verifica el código de salida
if [ $? -eq 0 ]; then
echo "¡Workflow ejecutado exitosamente!"
else
echo "La ejecución del workflow falló. Revisa los registros para obtener más detalles."
fi
 

Observaciones

Uso de --rm para un ciclo de vida limpio del contenedor:

  • La opción --rm en los comandos de ejecución de Docker garantiza que los contenedores se eliminen después de la ejecución. Esto mantiene tu sistema limpio al evitar la acumulación de contenedores detenidos.

Mapeo adecuado de archivos:

  • Asegúrate de que la ruta local (/path/to/my-hop-project) coincida con la estructura real de tus archivos. Un mapeo de volumen mal configurado podría impedir que el contenedor acceda a los archivos necesarios del proyecto.

Ajuste de los niveles de registro:

  • Experimenta con diferentes niveles de registro (Básico, Detallado, Error, etc.) según tus necesidades. Para la solución de problemas, un nivel de registro más detallado puede ser útil, mientras que en producción es preferible un registro mínimo para un mejor rendimiento.

Archivos de configuración del entorno:

  • Utiliza los archivos de configuración del entorno estratégicamente para gestionar diferentes entornos, como desarrollo, pruebas y producción. Asegúrate de especificar el archivo de entorno correcto en cada ejecución para evitar configuraciones incorrectas.

Nombrado de contenedores:

  • Asigna nombres significativos a tus contenedores usando la opción --name (por ejemplo, hop-pipeline-container o my-hop-project-container). Esto facilita la identificación y el monitoreo de contenedores en ejecución, especialmente cuando se manejan múltiples instancias.

Conclusión

Ejecutar pipelines y workflows de Apache Hop mediante Docker permite un despliegue consistente, escalable y automatizado. Ya sea que ejecutes Apache Hop en una máquina local o en la nube, Docker facilita y hace más eficiente el proceso, con la flexibilidad de gestionar configuraciones de entorno para diferentes configuraciones.