MapReduce ofrece un nuevo modelo de desarrollo, en el que por otro lado es fácil cometer errores.
Veamos algunas prácticas a evitar en trabajos MapReduce:
Demasiada caché:
Es habitual cachear datos para operaciones como JOINS de datos.
Pero este cacheo crea un overhead de memoria en Java que puede llevarnos a excepciones OutOfMemory.
Registros de entrada grandes
Qué pasa si usamos un TextInputFormat y mi línea tiene millones de caracteres?
Podemos usar la configuración de RecordReader para limitar el tamaño máximo de una línea con mapred.linerecordreader.maxlength.
Ejecución especulativa
La ejecución especulativa es un mecanismo provisto por Hadoop para cubrirnos antes nodos Map o Reduce lentos en un cluster, para eso ejecuta tareas duplicadas.
Si generamos el output con los mecanismos estándares de Hadoop no hay problemas, pero que pasa si estamos escribiendo en una base de datos por ejemplo.
En estos casos se puede deshabilitar la ejecución especulativa:
conf.set("mapred.map.tasks.speculative.execution", "false");
conf.set("mapred.reduce.tasks.speculative.execution", "false");
No controlar inputs erróneas
Nuestro código siempre debe tener en cuenta esas entradas erróneas.
Clustes con diferentes versiones de Hadoop y diferentes configuraciones
Es importante que todos las versiones y configuraciones de nuestros clusters sean lo más similares que sea posible.
Testing y de debugging con datasets grandes
Cuando estamos desarrollando y testando con MapReduce es tentador trabajar directamente con el conjunto completo de datos.
Esto afecta a la velocidad de desarrollo.
No controlar errores de parseo o lógica
Un alto porcentaje de los problemas en los Jobs se deben a entradas inesperadas.
Es importante medirlo para depurarlo fácilmente.
Demasiados contadores
Los contadores son un mecanismo para comunicar datos numéricos al Driver que corre el job, pero cada contador crea un overhead en la memoria usada en el JobTracker.
No deben por tanto usarse para cosas como crear un contador por cada input record.

Deja un comentario