¡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!
Ejecutar Apache Hop dentro de Docker presenta varias ventajas clave:
Antes de comenzar, asegúrate de tener lo siguiente:
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, como latest
, stable
o un número de versión específico.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.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
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
Uso de --rm para un ciclo de vida limpio del contenedor:
Mapeo adecuado de archivos:
Ajuste de los niveles de registro:
Archivos de configuración del entorno:
Nombrado de contenedores:
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.