2012-07-30 18 views
6

Obawiam się, że nie rozumiem wyników pomiaru czasu pracy polegającej na zmniejszeniu liczby map. Na przykład praca, którą wykonuję, daje mi następujące wyniki z modułu śledzenia zadań.Co oznacza czas procesora dla zadania Hadoop?

Zakończone w: 1mins, 39sec czasu

CPU spędzone (MS) 150,460 152030 302490

wpisy w czasie CPU spędzone (MS) są za mapą, Reduce i Total odpowiednio. Ale w jaki sposób mierzony jest "czas pracy procesora" i co to oznacza? Czy jest to łączny łączny czas spędzony w każdym z mapperów i reduktorów przypisanych do pracy? Czy jest możliwe zmierzenie innych czasów z frameworka, takich jak czas na losowanie, sortowanie, podział itp.? Jeśli tak to jak?

Drugie pytanie, które mi przeszkadza. Widziałem kilka postów tutaj (Link1, Link2), który zalecamy użycie getTime() w klasie kierowcy:

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

Czy to nie robi tego, co pierwszy wpis na wyjściu Job Tracker zapewnia tak? Czy to konieczne? Jaki jest najlepszy sposób, aby odmierzać czas pracy w trybie hadoop, szczególnie gdy chcę uzyskać czas IO, czas obliczeń na węzeł/na etap?

+0

powinieneś umieścić różne pytania w różnych postach –

Odpowiedz

14

Faza mapy składa się z: czytnika rekordów, mapy, sumatora i partycjonera.

Faza redukcji składa się z: tasowania, sortowania, redukcji, wyjścia.

Czas procesora, który widzisz, obejmuje całą fazę mapy i całą fazę zmniejszania ... nie tylko samą funkcję. Jest to trochę myląca terminologia, ponieważ masz funkcję mapowania i funkcji zmniejszania, które są tylko częścią mapy i są redukowane. Jest to łączny czas procesora we wszystkich węzłach w klastrze.

Czas procesora jest bardzo różny w czasie rzeczywistym. Czas procesora to czas spędzony na procesorach, podczas gdy w czasie rzeczywistym to, co ty i ja doświadczamy jako ludzie. Pomyśl o tym: załóżmy, że masz tę samą pracę, która działa na tych samych danych, ale w jednym klastrze z 20 węzłami, a następnie w klastrze z 200 węzłami. Ogólnie rzecz biorąc, w obu klastrach zostanie wykorzystana ta sama ilość czasu procesora, ale klaster 200 węzłów będzie działał 10 razy szybciej w czasie rzeczywistym. Czas procesora jest użytecznym wskaźnikiem, gdy masz wspólny system z dużą liczbą zadań uruchomionych na tym samym czasie.

Nie wiem, jak zanurkować głębiej, aby uzyskać czas procesora w każdej fazie. Używanie datownika prawdopodobnie nie jest tym, czego szukasz.

+0

Dzięki. To było bardzo przydatne. – Alps

+0

@donaldminer Czas procesora w rzeczywistości nie jest taki sam, jak czas, którego doświadczamy, szczególnie jeśli weźmiemy pod uwagę liczbę węzłów. Jednak czas procesora zapewnia lepszy wgląd w zużycie energii. O ile rozumiem, czas procesora obejmuje WSZYSTKIE części zarówno mapperów, jak i reduktorów. – Xaero182

+0

W moim trybie distrubuted widziałem -> MapReduce Całkowity łączny czas procesora: 20 minut 38 sekund 680 ms i Całkowity czas MapReduce Wydajność procesora: 20 minut 25 sekund 980 ms, ale tak naprawdę, jeśli widzę rzeczywisty czas to tylko -> Zajęty czas: 47,769 sekund w realnym świecie. Czy to oznacza, że ​​jeśli użyjemy tego samego zadania, spróbuj uruchomić w klastrze z jednym węzłem, który zajmie 20 minut i tyle czasu ... ?? proszę zasugeruj, czy to prawda !! –