2012-07-30 15 views
6

Me temo que no entiendo los resultados de tiempo de un trabajo Map-Reduce. Por ejemplo, un trabajo que estoy ejecutando me da los siguientes resultados del rastreador de trabajos.¿Qué significa el tiempo de CPU para un trabajo de Hadoop?

terminado en: 1mins, 39sec tiempo

CPU empleado (ms) 150,460 152,030 302,490

Las entradas de tiempo de CPU gastado (ms) son de Mapa, reducir y total, respectivamente. Pero, ¿cómo se mide el "tiempo de la CPU" y qué significa? ¿Es este el tiempo acumulado total en cada uno de los mapeadores y reductores asignados para el trabajo? ¿Es posible medir otras veces desde el marco como el tiempo para mezclar, ordenar, particionar, etc.? ¿Si es así, cómo?

Una segunda pregunta que me molesta. He visto algunas críticas aquí (Link1, Link2), que sugieren el uso de getTime() de la clase del controlador:

long start = new Date().getTime(); 
boolean status = job.waitForCompletion(true); 
long end = new Date().getTime(); 
System.out.println("Job took "+(end-start) + "milliseconds"); 

No es esto lo que hace la primera entrada en la salida Job Tracker ofrece todos modos? ¿Es esto necesario? ¿Cuál es la mejor manera de calcular el tiempo de un trabajo de hadoop, especialmente cuando quiero medir el tiempo de IO, calcular el tiempo por nodo/por etapa?

+0

debe poner diferentes preguntas en diferentes mensajes –

Respuesta

14

La fase del mapa consta de: lector de registros, mapa, combinador y particionador.

La fase de reducción consiste en: mezclar, ordenar, reducir, salida.

El tiempo de CPU que está viendo allí es de toda la fase del mapa y toda la fase de reducción ... no solo de la función en sí. Esta es una terminología confusa porque tiene la función de mapa y función de reducción, que son solo una parte del mapa fase y reducen fase. Este es el tiempo total de CPU en todos los nodos del clúster.

El tiempo de CPU es muy diferente en tiempo real. El tiempo de CPU es la cantidad de tiempo que se gasta en las CPU, mientras que el tiempo real es lo que tú y yo experimentamos como humanos. Piense en esto: suponga que tiene el mismo trabajo ejecutando los mismos datos pero en un clúster de 20 nodos, luego un clúster de 200 nodos. En general, se usará la misma cantidad de tiempo de CPU en ambos clústeres, pero el clúster de 200 nodos se ejecutará 10 veces más rápido en tiempo real. El tiempo de CPU es una medida útil cuando tiene un sistema compartido con muchos trabajos ejecutándose al mismo tiempo.

No sé cómo bucear más profundo para obtener el tiempo de CPU en cada fase. Sin embargo, usar un temporizador de fecha probablemente no sea lo que estás buscando.

+0

Gracias. Esto fue muy útil. – Alps

+0

@donaldminer el tiempo de CPU no es el mismo que el tiempo que experimentamos, especialmente si se tiene en cuenta la cantidad de nodos. Pero, el tiempo de CPU le da más información sobre el consumo de energía. Por lo que yo entiendo, el tiempo de la CPU incluye TODAS las partes tanto del mapeador como de los reductores. – Xaero182

+0

En mi modo distribuido, he visto -> MapReduce Tiempo acumulado total de la CPU: 20 minutos 38 segundos 680 msec y Total MapReduce Tiempo de CPU gastado: 20 minutos 25 segundos 980 mseg, pero en realidad si veo el tiempo real, es justo -> Tiempo: 47.769 segundos en el mundo real. ¿Esto significa que si usamos el mismo trabajo intentemos ejecutar en clúster de nodo único que tomaría 20 minutos y entonces ...? por favor sugiera si es correcto !! –

Cuestiones relacionadas