Posts Tagged ‘hadoop’

Tip de rendimiento: Usar compresión LZO para archivos de entrada en Hadoop

miércoles, noviembre 18th, 2009

Kevin Weil de Twitter (a quien mencioné en mi entrada anterior) acaba de publicar en el blog de Cloudera un tutorial sobre como usar archivos con compresión LZO. La compresión LZO resulta más adecuada que los algoritmos gzip y bz2 para el procesamiento masivo de datos con Hadoop. Gzip no puede ser usado en Hadoop porque un bloque (chunk) independiente de un gran archivo no puede descomprimirse sin conocer la información de los bloques anteriores; es decir, no se puede trabajar en paralelo con pedazos de archivos grandes. Bz2 sí puede ser usado en Hadoop, pero tiene la desventaja de ser muy lento, lo cual hace que una gran parte de lo que se gana en reducir E/S al usar compresión, se pierde debido a la sobrecarga de CPU requerida para las operaciones de descompresión. LZO tiene la ventaja de poder descomprimirse en paralelo y de manera muy rápida, lo que lo hace ideal para Hadoop.

Reduce empezando antes que termine Map

lunes, noviembre 16th, 2009

En los gráficos que ilustran las implementaciones MapReduce podemos ver una «barrera» entre la fase Map y la Reduce. Una «barrera» es un mecanismo de sincronización entre procesos que espera a que todos los procesos de un lado de la barrera terminen antes que empiecen los procesos del otro lado. En este caso, eso significa que la fase Map debe terminar antes que empiece la fase Reduce. Este comportamiento parece no verse plasmado en Hadoop, en donde podemos ver que la fase Reduce empieza antes que terminen los Maps. Por ejemplo:

09/11/14 10:58:50 INFO mapred.JobClient: map 79% reduce 18%
09/11/14 10:58:54 INFO mapred.JobClient: map 79% reduce 19%
09/11/14 10:58:55 INFO mapred.JobClient: map 80% reduce 19%
09/11/14 10:58:58 INFO mapred.JobClient: map 80% reduce 20%
09/11/14 10:59:00 INFO mapred.JobClient: map 81% reduce 20%
09/11/14 10:59:04 INFO mapred.JobClient: map 82% reduce 20%
09/11/14 10:59:05 INFO mapred.JobClient: map 82% reduce 21%
09/11/14 10:59:08 INFO mapred.JobClient: map 82% reduce 22%

Recientemente, en un thread en la lista common-user de Hadoop se justificó muy bien este comportamiento.

David Howell dijo: «The first 2/3 of the reduce phase (as reported by the progress meters) are all about getting the map results from the map tasktracker to the reduce tasktracker and sorting them. The real reduce happens in the last third, and that part won’t start until all of the maps are done. »

Kevin Weil (líder del equipo de Analytics de Twitter) dijo: «The first third of the reduce phase is really the shuffle, where map outputs get sent to and collected at their respective refucers. You’ll see this transfer happening, and the «reduce» creeping up towards 33%, towards the end of your map phase.  The 33% mark is where the real barrier is.»

Lo que quiere decir que la fase Reduce no empieza realmente hasta que termina la fase Map. Ese porcentaje de «Reduce» que se ve avanzando en paralelo con los Maps, en realidad es la llamada fase de «Shuffle and Sort» que copia y ordena los valores intermedios generados por los Mappers antes de que puedan ser procesados por los Reducers.

Alternativa al Plug-in de Hadoop para Eclipse

jueves, noviembre 5th, 2009

En clase algunos tuvieron problemas con el plug-in de Hadoop para Eclipse. Este problema se debe a que el mantenimiento del plug-in ha sido descontinuado. Leí en un e-mail (y respuestas) enviado a la lista common-user de Hadoop y se puede solucionar el problema re-compilando el plug-in. Pero al parecer una mejor alternativa sería trabajar con el Karmasphere Studio for Hadoop basado en Netbeans.

HadoopDB

miércoles, julio 22nd, 2009

Un artículo publicado en Computerworld indica que un equipo de investigadores de Yale (que incluye a Silberchatz, el autor del libro que uso en la materia Sistemas Operativos) han desarrollado un híbrido entre una base de datos relacional y Hadoop, denominada HadoopDB.

Según uno de los profesores del equipo de investigación HadoopDB, se diferencia de otros productos comerciales existentes en que:

[…] unlike already-developed projects and vendors such as Aster Data, Greenplum or Hive, HadoopDB «is not a hybrid simply at the language/interface level. It is a hybrid at a deeper, systems implementation level.»

En el artículo de Computerworld, mecionan también HadoopDB podría ser de interés a empresas de la Web 2.0 y otros miembros del creciente movimiento «NoSQL».

Sistemas de recomendación con Hadoop

miércoles, julio 22nd, 2009

Uno de los grupos de la materia de graduación me comentó que estaba teniendo problemas implementando un sistema de recomendaciones usando Mahout (específicamente, Taste), debido a que tenían problemas de insuficiencia de memoria. Debe haber una manera de solucionar el problema, pero como alternativa pienso que podrían analizar utilizar el algoritmo descrito en el paper «Pairwise Document Similarity in Large Collections with MapReduce«. Encontré una entrada en un blog detallando el uso de este algoritmo, y un tutorial que muestra cómo implementarlo usando Elastic MapReduce.

Hadoop input formats

martes, junio 23rd, 2009

A más del TextInputFormat (cada registro es una línea de un archivo de texto) usado por defecto, Hadoop soporta varios formatos de entrada para los mappers. Por ejemplo,

  • WholeFileInputFormat: Cada registro es un archivo completo. No utiliza keys (NullWritable). Los valores son instancias de BytesWritable. Usando esta clase como formato de entrada para los mappers, nos permite asegurar que un mapper reciba el contenido de un archivo completo (a manera de arreglo de bytes). En el libro Hadoop: The definitive guide (págs. 193-196) hay una explicación detallada de cómo usar esta clase.
  • KeyValueTextInputFormat: Cada registro es una línea de texto. Utilizado para leer de archivos de texto en los que cada línea representa una tupla <key, value> (por ejemplo, los archivos generados por los reducers que emiten TextOutputFormat). El delimitador entre la clave y el valor es configurable (TAB por defecto).
  • StreamInputFormat en combinación con StreamXmlRecordReader: Cada registro es un «registro» XML. Los tags de inicio y fin del «registro» XML son configurables.
  • DBInputFormat: permite leer datos de una base de datos relacional, vía JDBC. Hay una entrada detallando el uso de esta clase en el blog de Cloudera.

El PiggyBank: Funciones definidas por usuarios

miércoles, junio 17th, 2009

El repositorio de funciones definidas por usuarios (UDFs) para el manejo de datos en Pig se llama, muy apropiadamente, PiggyBank. Entre las funciones disponibles en el repositorio encontramos operaciones matemáticas, UPPER (para la conversión de strings a mayúsculas), y unas para el uso de expresiones regulares (con lo que fácilmente se puede definir cualquier tipo de dato especial).

Una entrada reciente en el blog de Cloudera muestra cómo usar el PiggyBank para el analizar logs de las descargas de los proyectos de Apache.

Tip de rendimiento: reutilizar la JVM entre tareas Map

martes, junio 16th, 2009

En un e-mail de la lista core-user de hadoop, alguien preguntó lo siguiente:

Subject: Can I share datas for several map tasks?
Hi,
I want to share some data structures for the map tasks on a same node(not through files), I mean, if one map task has already initialized some data structures (e.g. an array or a list), can other map tasks share these memorys and directly access them, for I don’t want to reinitialize these datas and I want to save some memory. Can hadoop help me do this?

Eason.Lee sugirió:

I think you can just define the data structures in your map classinit it in
setup(Context context) and use it in your map method
hope it is helpful!

Pero si lo que se quiere es que los mappers que se levanten en el mismo nodo re-utilicen la estructura de datos creada por el primer Map task levantado en ese nodo, entonces la solución—planteada por Sharad Agarwal de Yahoo!—es re-utilizar la JVM:

You can enable jvm reuse across tasks. See mapred.job.reuse.jvm.num.tasks in mapred-default.xml for usage. Then you can cache the data in a static variable in your mapper.

¿Tendrá Hadoop problemas de incompatibilidad en el futuro?

miércoles, junio 10th, 2009

En un post en los foros de la materia, Romeo Cabrera publicó información sobre la nueva distribución de Hadoop liberada por Yahoo!, y sobre una alternativa a Hive que Yahoo! planea lanzar en un futuro. Lo bueno de todo esto, es que mientras más respaldo tenga Hadoop y sus sub-proyectos de gigantes como Yahoo!, más probable es que otras empresas conozcan de las ventajas de esta herramienta para el procesamiento masivo de datos y se animen a adoptarla (o al menos, probarla). Por otro lado, el problema que se puede presentar es que a medida que empresas como Cloudera y Yahoo! empiezan a parchar el código de Apache Hadoop de manera independiente, surjan incompatibilidades y problemas difíciles de rastrear.

Descuento en Libro Pro Hadoop

miércoles, junio 10th, 2009

Jason Venner envió el siguiente e-mail a la lista core-user de Hadoop:

From: jason hadoop <jason.hadoop@gmail.com>
To: core-user@hadoop.apache.org
Date: Tue, 9 Jun 2009 19:15:24 -0700
Subject: [ADV] Blatant marketing of the book Pro Hadoop. In honor of the 09 summit here is a 50% off coupon,

In honor of the Hadoop Summit on June 10th(tomorrow), Apress has agreed to provide some conference swag, in the form of a 50% off coupon. Purchase the book at http://eBookshop.apress.com and use code LUCKYOU,  for 50% off the list price. The coupon has a short valid time so don’t delay your purchase 🙂


http://www.apress.com/book/view/9781430219422
www.prohadoopbook.com a community for Hadoop Professionals

El descuento, que al parecer solamente se aplica al eBook, permite adquirir el libro por $14.00. Yo pre-ordené la versión impresa en Amazon $36.37 (incluyendo el S&H). Acabo de revisar el estado de la orden, y me dice Amazon que me lo enviará el 22 de junio. Anteriormente, compré el libro de Hadoop de O’Reilly en versión digital e impresa. Todavía no me llega la impresa, pero a la digital ya tengo acceso desde hace algunos meses. Lo he leído por partes, y está bastante bueno, pero no sé cómo se compara con el Pro Hadoop. Acabo de enterarme también de que hay un tercer libro de Hadoop en proceso: Hadoop in Action. Lastimosamente no he podido encontrar comentarios comparándolos, así que no sabría cuál recomendarles.