Hadoop – Ejemplos de hadoop-mapreduce-examples.jar

Hadoop MapReduce Una de las formas tradicionales de asegurarnos que un ambiente de Hadoop recién instalado funciona correctamente, es ejecutando el siempre presente jar de ejemplos map-reduce incluido con toda instalación de hadoop. Hablamos del hadoop-mapreduce-examples.jar.

 

En este tutorial, haremos un ejercicio que consiste en encontrar todas las apariciones de una palabra usando una expresión regular. Para hacerlo, crearemos un directorio llamado input en nuestro directorio de inicio y copiaremos los archivos de configuración (los xml) de Hadoop para usar esos archivos como nuestros datos de entrada.

Nota: la tilde (~) es un atajo muy útil en Bash para no tener que escribir la ruta de nuestra carpeta de usuario.

mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

A continuación, podemos usar el siguiente comando para ejecutar el programa (jar) hadoop-mapreduce-examples, un archivo Java con varias opciones. Invocaremos grep, uno de los muchos ejemplos incluidos en hadoop-mapreduce-examples, seguido por el directorio de entrada inputy el directorio de salida grep_example. El programa MapReduce grep contará las coincidencias de una palabra literal o expresión regular. Finalmente, proporcionaremos una expresión regular para encontrar ocurrencias de la palabra principaldentro o al final de una oración declarativa. La expresión distingue entre mayúsculas y minúsculas, por lo que no encontraríamos la palabra si estuviera en mayúscula al comienzo de una oración:

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.1.jar grep ~/input ~/grep_example 'principal[.]*'

El comando consta de las siguientes partes:

  1. /usr/local/hadoop/bin/hadoop Es el directorio donde esta el ejecutable de hadoop en el sistema.
  2. jar Le indica a hadoop que deseamos ejecutar una aplicacion empaquetada de Java. (Jar)
  3. /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.1.jar Es la ruta donde esta el Jar que deseamos ejecutar. Note que la versión del jar depende de la versión de hadoop instalada.
  4. grep Es un parámetro de los muchos que se le pueden pasar al Jar de ejemplos que trae Hadoop. grep sirve para encontrar y contar ocurrencias de strings haciendo uso de expresiones regulares. Para ver una lista de los ejemplos que trae, click aquí.
  5. ~/input El directorio de entrada. Es donde el programa va a buscar los archivos de entrada a la tarea de map-reduce. Aquí copiamos unos archivos de prueba en un comando anterior.
  6. ~/grep_example El directorio de salida. Es donde el programa va a escribir el resultado de la corrida de la aplicación. En este caso, la cantidad de veces que la palabra del parámetro siguiente, aparece en los archivos de entrada.
  7. ‘principal[.]*’ Es la expresión regular que deseamos buscar. Esta expresión regular en particular coincide con la palabra ‘principal’ y ‘principal.’ (con y sin punto al final). Si desean saber un poco mas de expresiones regulares, les recomiendo este sitio web.

Cuando la tarea finaliza, proporciona un resumen de lo que se ha procesado y los errores que ha encontrado, pero esto no contiene los resultados reales.

. . .
 File System Counters
 FILE: Number of bytes read=1247674
 FILE: Number of bytes written=2324248
 FILE: Number of read operations=0
 FILE: Number of large read operations=0
 FILE: Number of write operations=0
 Map-Reduce Framework
 Map input records=2
 Map output records=2
 Map output bytes=37
 Map output materialized bytes=47
 Input split bytes=114
 Combine input records=0
 Combine output records=0
 Reduce input groups=2
 Reduce shuffle bytes=47
 Reduce input records=2
 Reduce output records=2
 Spilled Records=4
 Shuffled Maps =1
 Failed Shuffles=0
 Merged Map outputs=1
 GC time elapsed (ms)=61
 Total committed heap usage (bytes)=263520256
 Shuffle Errors
 BAD_ID=0
 CONNECTION=0
 IO_ERROR=0
 WRONG_LENGTH=0
 WRONG_MAP=0
 WRONG_REDUCE=0
 File Input Format Counters
 Bytes Read=151
 File Output Format Counters
 Bytes Written=37

Nota: Si el directorio de salida ya existe, el programa fallará, y en lugar de ver el resumen, la salida se verá algo así como:

 . . .
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
 at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Los resultados se almacenan en el directorio de salida (~/grep_example/) y se pueden verificar ejecutando caten el directorio de salida:

cat ~/grep_example/*
 6 principal
 1 principal.

La tarea MapReduce encontró una aparición de la palabra principal seguida de un punto y seis apariciones en las que no estaba el punto. La ejecución del programa de ejemplo ha verificado que nuestra instalación autónoma (standalone, un solo servidor) funciona correctamente y que los usuarios no privilegiados del sistema pueden ejecutar Hadoop para su exploración o depuración.

Otros Ejemplos de Hadoop MapReduce

Vale la pena probar otros ejemplos contenidos en el jar, como por ejemplo:

  • Terasort: Se usa normalmente para hacer Benchmarking en clusters de hadoop.
  • PI: Calcula los decimales de PI usando MapReduce!

Machine Learning es una realidad, y una muy rentable.

Una nueva investigación sugiere que el Machine Learning es más frecuente de lo que uno pensaría.

La era del Machine Learning ya está en pleno apogeo, revela una reciente encuesta realizada por MIT Technology Review en colaboración con Google Cloud.

Los investigadores pidieron a 375 líderes de negocios y de TI de una variedad de organizaciones de todo el mundo sobre su uso del aprendizaje automático. Los resultados incluyen:

  • El 50% de quienes implementan Machine Learning pueden cuantificar el Retorno Sobre la  Inversión (ROI).
  • 60% de los encuestados tienen estrategias de Machine Learning en desarrollo, y casi un tercio caracteriza sus iniciativas como «maduras».
  • La ventaja competitiva se ubicó entre los objetivos principales de los proyectos de Machine Learning para el 46% de los usuarios actuales. El 26% de los usuarios actuales dijeron que ya han ganado una ventaja competitiva del aprendizaje automático.
  • La inversión en Machine Learning está creciendo, con un 26% de los encuestados comprometiendo más del 15% de sus presupuestos de TI a proyectos de ML.

Estos resultados sugieren que el ML se está volviendo más común, impulsando desde la detección de fraude y los motores de recomendación hasta la clasificación de imágenes médicas y la programación de aeronaves. En todos estos casos de uso, la premisa es la misma: a medida que los modelos de aprendizaje a máquina ingieren y procesan grandes cantidades de datos, cada vez son mejores viendo patrones, tal como el ojo humano, pero a una escala mucho mayor.

Esta capacidad puede ayudar a muchas empresas a desplegar capacidades automatizadas de análisis predictivo, lo que conduce a decisiones más inteligentes, nuevas eficiencias operativas y una mejor experiencia para los clientes. Y es por eso que la máquina de aprendizaje proporciona retorno un sobre la inversión, que más del 50% de los encuestados dijo que ya pueden detectar un ROI en sus proyectos.

Usos del Machine Learning en la industria.

Sigue leyendo Machine Learning es una realidad, y una muy rentable.

Contenedor Docker: Herramientas de Big Data

Para todos los que trabajamos con Big Data, es evidente que uno de los mayores retos es la configuración y puesta a punto de un ambiente funcional. Por mucho tiempo, la solución rápida para esto han sido las imágenes de sistemas para su virtualización. Sin embargo, existe una mejor solución: Los contenedores de Docker.

Les comparto un contenedor Docker que tiene el ambiente  Big Data mas usado en la actualidad:

  • Apache Hadoop (HDFS & YARN).
  • Apache Spark.
  • Apache Hive (on Spark).
  • Python 3 y herramientas para HDFS.
Descargar haciendo click en la imagen!

 

Para instalar directamente desde los repositorios de Docker:

docker build  -t sequenceiq/hadoop-docker:2.7.1 .
docker pull sequenceiq/spark:1.6.0

Acceder data en HDFS desde Python

Cuando se trabaja con Big Data, independientemente de si usamos Spark o trabajos Map-Reduce, generalmente nos encontraremos con el sistema de archivos distribuidos de Hadoop, HDFS.

El problema con HDFS siempre ha sido que acceder/modificar la data es un proceso tedioso, que casi siempre involucra realizar comandos dfs en una consola. Esto dificulta muchísimo automatizar scripts (a excepción de shell scripts) para realizar nuestras consultas.  Por esta razón, el equipo de Hadoop creó HttpFs, el cual es un portal hacia HDFS haciendo uso de servicios Rest que corren en el Namenode.

hdfsstatus

Para Python, les recomiendo el excelente proyecto Open-Source HdfsCLIEl mismo no es más que una atadura al propio servicio de HttpFS (y WebHDFS) que provee la mayoría de los métodos relevantes a través de un API y una interfaz de CLI.

La documentación está disponible en: https://hdfscli.readthedocs.io/en/latest/

Big Data: El ecosistema básico en las empresas.

Es bien sabido que en la actualidad, cuando hablamos de Big Data, no nos referimos a una sola herramienta (aunque a muchos nos venga el nombre ‘Hadoop’ a la mente). En este corto post, listo algunas de las herramientas mas básicas y comunes en despliegues empresariales de soluciones Big Data:

El Stack de una solución Big Data clásica. (Sin Spark).
El Stack de una solución Big Data clásica. (Sin Spark).

El ecosistema básico

  • Hadoop: La herramienta base de cualquier solución Big Data. Fundamentado en el procesamiento paralelo usando una tecnica llamada ‘Map-Reduce’ y un sistema de archivos distribuidos denominado ‘Hadoop File-System (HDFS)’. El origen de su nombre es todo un misterio…
  • Hive: Desarrollado en Facebook para facilitar la tarea de programar tareas Map-Reduce para hacer consultas en Hadoop. Permite consultar la data usando HQL (ANSI SQL con algunas modificaciones). De esta manera, se disminuye la dificultad al obtener resultados de la data.
  • Sqoop: Permite realizar tareas de importación de datos desde diversas bases de datos relacionales, encargándose de la conversión tipos de datos y de las transformaciones que sean necesarias.
  • Spark: Desarrollado para superar las deficiencias de Map-Reduce, Spark ofrece resultados mucho mas rápidos usando el mismo cluster que Hadoop. Su mayor ventaja es que el procesamiento es en la memoria y no en el disco. Ademas, tiene sus propios módulos de SQL e Inteligencia Artificial.

Para conocer un poco mas de la historia y evolución de estas herramientas, recomiendo el siguiente articulo: https://medium.com/@markobonaci/the-history-of-hadoop

Programación funcional vs procedimental: Un enfoque Big Data.

Recientemente, durante un conversación sobre Big Data, Hadoop y el análisis de data, surgió el tema de los lenguajes funcionales en los mismos. Es bien sabido que los lenguajes funcionales son ideales para Big Data, pero no nos quedaba claro porqué. Buscando un poco, ésta respuesta de SO nos dió más luces al respecto:

As a consequence, a purely functional program always yields the same value for an input, and the order of evaluation is not well-defined; which means that uncertain values like user input or random values are hard to model in purely functional languages.

Podemos resumir en que: Los lenguajes funcionales siempre arrojarán un valor para determinada entrada (La orden de evaluación no está bien definida). Ésto es totalmente deseable para la computación distribuida y el Big Data, puesto que la idea es asegurar una salida consistente en todos los nodos donde se procese.

Para saber un poco más al respecto, les recomiendo ésta lectura.

Por otro lado, recomiendo muchísimo ésta la especialización en SCALA, (un lenguaje funcional que corre en el JVM) dictado por la École Polytechnique Fédérale de Lausanne en Coursera.