¡Bienvenido de nuevo al último post de nuestra serie "Construye y despliega"! En esta publicación,...
Construye y despliega 7: Ejecuta canalizaciones y flujos de trabajo de Apache Hop usando Docker
¡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:
docker pull apache/hop:<tag>
Ejemplo:
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, comolatest
,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:
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:
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:
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:
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:
#!/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.