2012-04-29 16 views
5

Tengo un programa "map only" (sin fase de reducción). El tamaño del archivo de entrada es lo suficientemente grande como para crear 7 tareas de mapa y lo he verificado mirando la producción producida (part-000 a part006). Ahora, mi clúster tiene 8 nodos, cada uno con 8 núcleos y 8 GB de memoria y sistema de archivos compartido alojado en el nodo principal.Cómo programar las tareas de Hadoop Map en un clúster de 8 nodos de múltiples núcleos?

Mi pregunta es ¿puedo elegir entre ejecutar todas las tareas 7 mapa de nodo sólo 1 o ejecutar las tareas 7 7 mapas en diferentes nodos esclavos (1) de trabajo por nodo. Si puedo hacerlo, entonces qué cambio en mi código y archivo de configuración es necesario.

Intenté establecer el parámetro "mapred.tasktracker.map.tasks.maximum" en 1 y 7 en mi código solamente, pero no encontré ninguna diferencia de tiempo apreciable. En mi archivo de configuración se establece como 1.

Respuesta

4

"mapred.tasktracker.map.tasks.maximum" ofertas con el número de tareas de mapas que deberá ser lanzado en cada nodo, no el número de nodos que se utilizará para cada tarea mapa. En la arquitectura de Hadoop, hay 1 rastreador de tareas para cada nodo (esclavos) y 1 rastreador de trabajos en un nodo maestro (maestro). Por lo tanto, si configura la propiedad mapred.tasktracker.map.tasks.maximum, solo cambiará el número de tareas de mapa que se ejecutarán por nodo. La gama de "mapred.tasktracker.map.tasks.maximum" es 1/2*cores/node-2*cores/node

El número de tareas mapa que desea en general debe establecerse usando setNumMapTasks(int)

1

Ahora, mi grupo tiene 8 nodos, cada uno con 8 núcleos y 8 GB de memoria y sistema de archivos compartido alojado en el nodo principal.

Cuando dice que un sistema de archivos compartido alojó un nodo principal, ¿quiere decir que los datos están alojados en HDFS, o en algún sistema de archivos tipo NFS montado en cada nodo? Supongo que quiere decir HDFS, pero si usted está usando NFS o algo similar, entonces usted debe esperar ver un mayor rendimiento con HDFS (que desea mover el código de procesamiento de los datos, en lugar de la de mover los datos a la máquina de procesamiento)

¿qué tan grande es el archivo de entrada y cuál es su tamaño de división, formato de archivo (texto, secuencia, etc.), factor de replicación y compresión methof?

Dependiendo de las respuestas a las preguntas anteriores, con la configuración de 8x8, es posible que pueda obtener un mejor rendimiento si se reduce el tamaño del mapa de división, y el factor de replicación.

1

definitivamente debe ejecutar las tareas 7 mapa en 7 nodos diferentes, si es posible. Toda la ventaja de MapReduce es poder paralelizar su computación para que cada tarea se ejecute de la manera más eficiente posible. Si ejecutó 7 tareas de mapa en un nodo, cada tarea estaría compitiendo por los mismos recursos (RAM, CPU, IO) en ese único nodo.

Un ajuste estándar para mapred.tasktracker.map.tasks.maximum es uno por núcleo por lo que podría cambiar la configuración a 8.

Además, si usted tiene un trabajo Map-solamente, usted querrá una buena razón para establecer el número de creadores de mapas a cierto número. Establecer el número de tareas del mapa es solo una "pista" para el rastreador de trabajos sobre cuántos mapas ejecutar, pero esto finalmente lo decide el rastreador de trabajos en función de cómo DFS almacena sus datos de entrada. This wiki has more details.

Usted desea controlar el número de reducir las tareas en ciertos casos, sin embargo. Por ejemplo, si quisiera una lista de números ordenados, me gustaría asegurar que todos mis datos pasen a través de un solo reductor.

Cuestiones relacionadas