Monitoring Oozie Coordinators Using Web API


If you work with oozie for ETL workflow executions chances are that you ended up overwhelmed when you need to monitor several workflows all at once and you found the web console of Oozie being too basic. Fear no more my friend, this time I want to share with you a little script I made for dealing with such situations.

Bear in mind before starting with the script:

  • The bellow code is available on my github repo under creative commons license if you want to check it out for yourself before looking at the explanation.
  • Oozie web API was used as the base of the script, if you’re not familiar with it, you should take a look on the reference page.
  • The script is python-web based so you should have CGI module enabled on your Apache web server before proceding (here’s a guide for install apache on windows without additional packages that are unnecessary for the purpose of this post, in GNU/Linux this should be a piece of cake).

There are two main parts of the tool:

1. Filters form

Here you find parameters for getting the results for the workflows of your choice:

Select the status: choose between oozie status for coordinators (RUNNING, SUCCEEDED, KILLED, DONEWITHERROR)

Max jobs to search in: limit the number of jobs in which to search in for the proper workflows (this is for pagination on oozie API)

Select the workflows to analyse: This is really useful if you need to monitor a bunch of workflows everyday. All you need to do is edit oozieMonitoring.html file from line 60 to add your workflows names (you should use names here as the appName is defined without any date portion i.e: cristianpark-workflow and not cristianpark-workflow_Daily_20180220)

Custom workflow name:  Enter one workflow name (only one workflow currently supported) that want to monitor (sometimes you want to monitor a workflow outside your regular list of workflows).

 

2. Results script

For this script to work you should have CGI enabled and identify the path for python on your system.

Some quick notes on this:

If there are results for your workflows in the status filtered, you should see a screen like this (grouped by workflow name)

Where you can see all the instances a workflow has in execution (or in another state according to your selection) and pretty basic info about each instance.

If there are no results, you end up with something like this:

I hope this can help someone for his/her task of monitoring several workflows. This tool is in an alpha stage so you’re more than welcome to add your two cents to it.

 

Don’t Worry…….Be Linux!!!

 

 

Anuncios

Alimentar Tabla desde CSV usando Python


Hoy me enfrenté a la necesidad de alimentar una tabla de una BD de PostgreSQL usando archivos CSV (archivos QVD de Qlikview originalmente) y lo primero que traté de hacer fue generar el archivo CSV para importarlo a PostgreSQL pero algunos archivos estaban dando problemas y cuando es muy grande el CSV a importar, se hace más lento el proceso y el debug.

Desde Qlikview se tenía que recorrer todo el archivo e insertar cada una de las filas generando el comando SQL manualmente. Recurrí a Python para hacer la tarea y el resultado fue hacer el proceso mucho más fácil y divertido. La solución es usar pandas y su conexión para postgreSQL (a través de sqlalchemy), aquí el script:

#!/usr/bin/python

import pandas
from sqlalchemy import create_engine

RUTA_CSV="/ruta/archivocsv/"
archivo="ArchivoCSV.csv"

def main():
#Usando Pandas
engine = create_engine('postgresql://USER:PASS@IP:PORT/BD')
archivocsv=pandas.DataFrame.from_csv(RUTA_CSV+archivo, sep='\t')
archivocsv.to_sql("TABLA", engine, if_exists='append', schema='esquema')

if __name__ == "__main__":
main()

Al utilizar DataFrame.from_csv se crea el dataframe de pandas usando el separador requerido.
Con la función to_sql se realiza la inserción en la BD en la TABLA especificada usando el esquema schema y con la opción if_exists=’append’ indicamos que en caso de la tabla existir en la BD y esquema especificados, se haga una inserción de datos.

De ésta forma fácilmente podemos hacer un volcado de la información de archivos planos a una BD PostgreSQL, si los archivos planos son demasiado pesados es conveniente hacer el proceso en lotes y allí pandas brinda una alternativa también.

Don’t Worry….Be Linux!!!

Descargar archivos en masa con webscrapping en python


En algún momento todos hemos tenido la necesidad de descargar archivos en masa desde páginas de internet (y no, no siempre es con ánimos de piratear cosas). En algunos casos herramientas como JDownloader han sido de ayuda para tomar varios links, pero los links no siempre son visibles y tenemos qué navegar a través de varias páginas para obtener lo que buscamos.

Buscando podcasts para aprender inglés me encontré ésta página: https://learnenglish.britishcouncil.org/en/elementary-podcasts y los materiales me gustaron aunque vi que eran 4 series, dos de 10 capítulos y dos de 20 con sus transcripciones (120 archivos en total) así que descargué los dos primeros audios y me puse el reto de hacer algo con R o python para descargar el resto.

En éste post no voy a entrar en detalles técnicos sobre el script de python pero sí voy a hablar sobre los conceptos clave que involucra hacer un webscrapping para descargar archivos de páginas web:

  1. Conocer la estructura de la página web. Este proceso no es automático totalmente por lo que saber un poco de la estructura de la página de la que se quiere descargar ayuda bastante. Por ejemplo en mi caso, la estructura de la URL de los capítulos es: https://learnenglish.britishcouncil.org/en/elementary-podcasts/series-01-episode-01 que es susceptible de estar en un ciclo de programación. También sé que quiero descargar los archivos MP3 y un transcript en PDF y al examinar el código de la página es fácil ver que hay elementos span con clase “file” donde están los links para descargar.
  2. Determinar la herramienta para el scrapping. Decidí usar python para hacer el scrapping y basado en [1] empecé a entender cómo utilizar la función BeautifulSoup de la librería bs4 de python. Mi plan sería crear carpetas por cada sesión y guardar un archivo por cada capítulo (4 sesiones, ~15 captíulos por sesión) así que busqué cómo descargar los archivos una vez tuviera los links de descarga y encontré que así como en GNU/Linux, hay un wget en python.
  3. Crear el script. Con la estrategia definida creé el script que inicialmente fue de unas 15 líneas y luego lo perfecccioné un poco con el caso específico de la págin de British Council (algunas veces tienen 5 archivos de descarga, otras 2) y básicamente busca los links en la página, descarga los archivos y los almacena en la estructura de archivos que describí en el paso 2. El script y próximamente más info estilo notebook se encuentra disponible en mi github

Este es un ejemplo para que lo ajusten a sus necesidades y ojalá lo compartan en los comentarios.

Don’t worry….Be Linux!!!

[1] https://www.dataquest.io/blog/web-scraping-tutorial-python/

Adiós a un amigo del Software Libre: Adiós Marlon Manrique


Jamás esperé retomar el blog de esta forma pero este post es para dar la despedida personal para un amigo geek….

Marlon

“El man más teso que conozco”, esas eran las palabras que utilizaba siempre para describir a Marlon Manrique cuando sostenía un diálogo con alguna persona apasionada por los temas de la tecnología y más aún cuando se trataba de Software Libre . Marlon fue la persona que he visto que entendía los sistemas informáticos y la tecnología como ninguna otra y sin dudas me marcó profesionalmente y personalmente por su humildad. Siempre he tenido la concepción que las personas que realmente saben y pueden considerarse genios tienen una calidad humana incomparable, no se jactan de su conocimiento y están dispuestos siempre a compartirlo con los demás; esa precisamente es la descripción para Marlon Manrique, un genio.

Marlon fue un personaje conocido en la escena geek de Manizales por estar a la vanguardia de temas de programación y Hacking con dispositivos –como aquella vez que programó un wii mote para comunicarse con un celular a través de processsing por allá en 2008 [1]–. Si se hablaba de Java (en todos sus sabores), Arduino, Processing, Mobile Processing en Manizales y sin temor a equivocarme, en Colombia, Marlon estaba involucrado. Quienes lo conocieron pueden dar fe de su forma de ser descomplicada, abierto siempre al diálogo y con ganas de compartir todo su conocimiento y parte de su ser, fue así como lo conocí por nuestro interés mutuo en Software Libre y en lograr que nuestra región y nuestro país supieran un poco de esta filosofía de vida que busca el empoderamiento tecnológico de todas las personas, especialmente aquellos que no tienen los recursos económicos para hacerlo.

Sencillamente era genial compartir una cerveza con él y hablar de tecnología, podían pasar las horas sin darse cuenta, fue así como también me llegué a dar cuenta que teníamos gustos similares por la música –aunque mis gustos fueran demasiado comerciales para él– y conocer algunos de sus gustos aunque no fuéramos amigos cercanos. Recuerdo especialmente cómo se preparó sin dejar su lado geek aparte para un concierto de Nine Inch Nails (que finalmente cancelaron) y al que pensaba ir con luces en su cuerpo que se activaran y cambiaran con la intensidad de su movimiento.

La última vez que lo vi fue precisamente escuchando Metal  en el único bar decente para este tipo de música en la ciudad de las puertas abiertas y cruzamos un par de palabras sobre nuestras vidas, estaba dedicado a JavaScript y cómo mejorar los procesos que los Frameworks hacían de forma muy ineficiente en su concepto. El día de hoy me enteré de la triste noticia de su partida [2] y no quería dejar pasar desapercibido este duelo personal, de la comunidad tecnológica de Manizales y de su familia, a quienes no conozco por lo plano de este mundo tecnológico pero que quiero que sientan un abrazo fraternal en este momento tan difícil de asimilar.

Adiós Marlon, Happy Hacking wherever you are….

Quienes quieran saber más quién fue Marlon y su importancia en la escena geek, los invito a que visiten su perfil en LinkedIN [3] y su canal de YouTube [4].

 

 

[1] https://www.youtube.com/watch?v=QUZB9_VGme0

[2] http://www.lapatria.com/sucesos/hallaron-cuerpo-dentro-de-una-casa-en-el-barrio-el-campin-227227

[3] https://www.linkedin.com/in/marlonj

[4] https://www.youtube.com/channel/UCEGt_g6F79wpH9zfXyky0Gg

 

Foto tomada de la página web del periódico La Patria

El engaño de “Envía palabra al XXXX”


Esta vez me salgo un poco del tema técnico del blog para hablar de un tema que nos afecta a los consumidores de telefonía móvil en el país, los famosos mensajes “Envía palabra al XXX”, sí esos que dicen: Envía AMOR al 4456 y recibe los mejores consejos para tener una vida…

A más de uno le ha pasado sino en carne propia, con un familiar que no maneja del todo bien el concepto del celular que termina por una u otra razón suscrito a un servicio que no recuerda (y probablemente nunca lo hizo) haber aceptado y que se le está comiendo ferozmente el saldo que recarga en su teléfono móvil.

En qué consisten

Estos servicios por lo regular no son un cobro de una única vez sino que en la letra pequeña que pasa a velocidades absurdamente rápidas en los comerciales de TV dice que al enviar un mensaje, se autoriza un cobro periódico por el servicio por lo que cuando un usuario realiza una recarga, se empiezan a descontar $500, $800 o hasta $1700 diarios y termina con el saldo disponible en poco tiempo.

Responsabilidad de los operadores

Los operadores niegan que ellos tienen relación directa con quienes proveen este tipo de contenidos, pero salta a la vista que no es así ya que en el caso de un reclamo, los operadores son quienes reconocen el dinero extraído de los saldos de los usuarios. Por lo que parece -brindan muy poca información al respecto obviamente-, los operadores ayudan a realizar las inscripciones quizá con usuarios que por su historial de consumo, parecen presas fáciles para estos engaños y que quizá no notarán la reducción en su saldo tan rápido sino que pensarán “El saldo en el operador XXXX no alcanza para nada”. Cuando el usuario nota algo raro y se comunica con el operador, éste cancela la suscripción, reembolsa el dinero y el usuario se da por bien servido (es lo que ellos esperan).

¿Qué puedo hacer?

//—————- Eliminar suscripciones ——————————–

Puede solicitar la cancelación del servicio directamente en los operadores o seguir las recomendaciones de algunos usuarios de LANeros.com
Aportado por @Neon Strive:
Si no quieren que les llegue publicidad al celular, simplemente:

.:. Ingresen a esta página: http://www.siust.gov.co/siust/mercado/solicitud.jsp
.:. Seleccionen operador e ingresen su número celular.
.:. Hagan click en Continuar y listo.

Aportado por @BoltSpectrum:
si ya le activaron la suscripcion lo mejor es enviar

“Salir” o “SALIR” al codigo del que le estan llegando los avisos
//————————————————————–

 

Lo primero es no caer en la trampa “¿será que yo si acepté ese servicio?” sino radicar una queja en su operador donde exijan un reporte de recargas hechas y la fecha exacta de la supuesta aceptación del servicio (esto para determinar desde cuando se han hecho los cobros y por qué valor han sido). Probablemnte el operador haga el reembolso de un dinero y no provea más información, ahí es donde es crucial no dar por terminada la queja, sino exigir los registros y revisar que el mensaje de aceptación se haya enviado -si la persona no sabe usar mucho el celular, es poco probable que haya enviado un mensaje con una palabra a un código específico-, si dicho mensaje no existe, hay una irregularidad en el cobro de un servicio no adquirido, y el operador lo está admitiendo haciendo un reembolso, hora de la artillería pesada.

El operador dará por terminado el reclamo en este punto y es entonces cuando deben armarse de paciencia e interponer una queja ante la Superintendencia de Industria y Comercio o en última instancia ante la Comisión de Regulación de Comunicaciones. Es necesario informarse y hacerse valer para no caer en estas trampas que buscan sacar pequeñas porciones de saldo de miles de usuarios de forma que sea rentable responder a reclamos de unos cuantos…

Don’t Worry……Be Linux!!!!!!

Loop en tonos en Android


Muchas personas que usan Android, notarán que sus tonos personalizados sólo suenan una vez, así que si una persona llama y el teléfono suena más del tiempo que dura el tono (20 segundos por ejemplo), el celular vibra pero no emite más sonido pues el tono terminó, después de buscar la solución por un rato encontré que se debe adicionar un atributo a la etiqueta del archivo del tono. Todo lo que debemos hacer es:

1. Descargar un software de edición de etiquetas ID3 para mp3/ogg, yo probé en ArchLinux kid3 [1] (en tonos existentes) y audacity [2] (para crear nuevos tonos). En [3] pueden encontrar el proceso completo desde la instalación de Audacity

2. Editar/Crear el tono que deseemos que se repita indefinidamente al recibir una llamada y agregamos la propiedad ANDROID_LOOP con valor true

3. Copiar el tono a la carpeta Ringtones de la memoria interna/externa del teléfono

En el menú de selección de tono del celular, se puede verificar que el tono suena una y otra vez indefinidamente.

Probé lo anterior con mis tonos OGG y me funcionó muy bien, con mp3 no estoy seguro si funciona pero si algún lector lo prueba, por favor dejenos saber en los comentarios.

Don’t Worry, Be Linux!!!!

[1] http://kid3.sourceforge.net/

[2] http://audacity.sourceforge.net/?lang=es

[3] http://www.tytyweb.net/blog/2012/01/looping-ringtones-on-android/

Licencia tus órganos con GPL!!!


Antes que nada quería invitarlos a que donen sus órganos, este es un problema social que tenemos en nuestro país (y en todo el mundo), no se difunde lo suficiente la cultura de la donación.

Contexto propuesta

Definición licencia GPL: https://es.wikipedia.org/wiki/GNU_General_Public_License

En resumen, la licencia GPL es una licencia conocida como copyleft (parodia de copyright) que busca proteger los programas de Software Libre para que los programas derivados conserven esta naturaleza y sean por obligación libres también. Es una de las licencias más restrictiva, pero también la que más protege y garantiza que un Software sea libre

Idea

Cuando me suscribí a la donación, pensé que sería bueno implementar una especie de GPL: las personas que se vean beneficiadas de mis órganos, deben donar los suyos (uno supone que un receptor estaría de acuerdo en donar en un momento dado, pero no falta el que no) para así armar una cadena de donación.

Esto puede parecer un poco fuera de contexto, pero de cierto modo tiene relación porque lo que buscamos con el SL al fin y al cabo es generar una cultura de comunidad en la que nos ayudemos unos a otros. Les comparto el link [1] para que sepan más de la donación y se registren.

Don’t worry, Be Linux!!!

[1] http://www.ins.gov.co/donante-de-organos-y-tejidos/Paginas/obtener-el-carne-de-donante.aspx