bashreduce

300px-bash_screenshot

bashreduce es un proyecto relativamente nuevo el cual provee a la shell de bash de procesamiento paralelo. Basándose en la idea de mapreduce. Esta enfocado al procesamiento de datos. A groso modo, la idea es dividir los datos en fragmentos más pequeños y distribuirlos por distintos sistemas. De esta forma el proceso X correrá en cada máquina/procesador, pero sólo con una parte de los datos a procesar.

Para su instalación debemos bajarnos los fuentes y compilarlos:

$ git clone git://github.com/erikfrey/bashreduce.git
$ cd bashreduce/brutils
$ make
$ sudo make install

Una vez hayamos instalado el software, podremos empezar a probarlo. Lo primero que tenemos que tener en cuenta es que necesitamos tener en nuestro sistema las siguientes utilidades: sort, awk, ssh y netcat. Otro requerimiento es que tengamos configurado nuestro cliente de ssh con las máquinas que vayamos a comunicarnos con certificados digitales. Esto es, que nos podamos conectar a dichas máquinas sin tener que escribir ninguna clave. Una tercera cosa, es que podemos crear un fichero llamado /etc/br.hosts donde pondremos las máquinas por las que queremos distribuir nuestra tarea. Aunque también podemos ignorar dicho fichero y a través del parámetro -m pasarle la lista de máquinas.

$ br -m "host1 host2 host3"

Algunos ejemplos:

$ br -m "host1 host2" < /etc/passwd > /tmp/sorted

Aquí lo que hacemos es ordenar el fichero /etc/passwd repartiendo el trabajo entre host1 y host2.

$ cut -d' ' -f6 /var/log/messages | ./br -m "host1 host2 host3 host4" -r "uniq -c"

Supongamos que tienes un fichero de logs con varias columnas separadas por un espacio en blanco y queremos extraer una columna y contar las ocurrencias de cada valor en esa columna, por supuesto repartiendo la carga de trabajo entre los sistemas indicados.

Un último apunte, es que si tienes  un sistema multiprocesador, puedes hacer uso del los mismos indicando más de una vez en tu lista de máquinas. Por ejemplo:

$ br -m "localhost localhost" < /etc/passwd > /tmp/sorted

Visto en linux magazine.