Hacer ejecuciones programadas de trabajos de un ETL y controlarlas es crucial.
Actualmente las soluciones que ofrecen los sistemas como Kettle de Pentaho se basan en scheduler de sistema operativo. En ocasiones, hay procesos en los que intervienen diferentes actores de distintas plataformas y ponerlo todo en común puede hacerse difícil… y más con escaso personal por vacaciones…. Hay logs de resultados que revisar, ejecuciones a petición en lugar de programadas…. servidores Linux, desarrollos desde Windows….
Jenkins es una herramienta pensada para la integración contínua de desarrollos. Establece un puente entre el desarrollador y los sistemas de producción. Es una herramienta sencilla y versátil orientada a realizar pruebas de idoneidad del código y si todo va bien, compilarlo y subirlo a los servidores. Se alimenta de disparadores varios que se instalan como plugins, como por ejemplo, que el desarrollador suba el código a GitHub o BitBucket.
En esta ocasión se nos plantea el reto de centralizar todos los trabajos de nuestro ETL Kettle, de tal forma que el desarrollador pueda trabajar en local y el área de sistemas pueda realizar tareas se seguimiento de los procesos.
Jenkins en principio parece una opción interesante para nuestras necesidades. Aunque consume mucha memoria RAM al parecer por su naturaleza de ser un proceso de Java.
Instalación de Jenkins en Centos La instalación en principio es bastante asequible. En este caso usamos una distribución Centos en lugar de una Debian (mi preferida), y hay que hacer unos ajustes con el firewall.
Jenkins usa Java. Si lo tenemos instalado podemos continuar. Si no, aquí tenéis los pasos para instalar Java.
Sólo hay que tener en cuenta que en el momento de escribir estas líneas , Jenkins lo he probado con Java 1.7.
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
Si usamos Jenkins en el mismo sitio que nuestro BI local, deberemos retocar los puertos por defecto. La configuración está en /etc/sysconfig/jenkins
JENKINS_PORT="8082"
JENKINS_AJP_PORT="8011"
Tocamos el firewall para que deje pasar los clienets web al puerto 8082 que hemos configurado.
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --reload
Ya podemos arrancar nuestro servidor Jenkins.
service jenkins start
Si nos encontramos con que no arranca, podemos echar un vistazo al log en /var/log/jenkins
Si todo ha ido bien. Ya tenemos Jenkins respondiendo en el puerto 8082 en nuestro caso.
Crear un trabajo programado para Kettle
- Entramos en New Item
- Creamos un Freestyle project
- Le ponemos que se ejecute a las 14h cada día laborable, por ejemplo. (sigue una lógica similar al Cron de Linux)
- Y le indicamos cual es es script que usaremos para lanzar el Job (lanzamos el kitchen.sh).
Una de las ventajas en Jenkins es que nos guarda los logs de ejecución, para poder consultarlos. Inclusive si el trabajo no ha terminado, va refrescando el log con la nueva información.
Temas a tener en cuenta
A nivel de sistema operativo, Jenkins se ejecuta con su propio usuario jenkins. Recordaros de alinear la seguridad el Kettle con dicho usuario o incluirlo en el grupo del usuario que ejecuta Pentaho. Luego reiniciar el servicio Jenkins para que cargue dicha seguridad.
Jenkins viene abierto por defecto. Recordaros de cerrar los accesos.
Share this post
Twitter
Facebook
Reddit
LinkedIn
Email