Piszę harmonogram Hadoop. Moje planowanie wymaga znalezienia czasu procesora zajętego przez każde zadanie Map/Reduce.
Wiem to:
Klasa TaskInProgress utrzymuje wartości execStartTime i execFinishTime, które są czasami zegara ściennego, gdy proces został rozpoczęty i zakończony, ale nie wskazują dokładnie czasu procesora zużywanego przez zadanie.
Każde zadanie jest wykonywane w nowej JVM i mógłbym użyć OperatingSystemMXBean.getProcessCpuTime (), ale ponownie opis metody mówi mi: „Zwraca czas procesora używany przez proces, w którym wirtualna Java maszyna działa w ciągu nanosekund". Nie wiem do końca, czy tego właśnie chcę.
2 odpowiedzi
Dla potomności rozwiązałem ten problem, wprowadzając zmianę w src/mapred/org/apache/hadoop/mapred/TaskLog.java (Hadoop 0.20.203) w wierszu 572
mergedCmd.append("exec setsid 'time' "); // add 'time'
Czas procesora zostanie zapisany do: logs/userlogs/JOBID/TASKID/stderr. Napisałem również skrypt, który zbiera skumulowany czas procesora: https://gist.github.com/1984365 Przed uruchomieniem zadania upewnij się, że:
rm -rf logs/userlogs/*
Aby skrypt działał.
Używam biblioteki, która rejestruje metryki zasobów, takie jak użycie procesora/czas bezczynności, użycie wymiany i użycie pamięci.
http://code.google.com/p/hadoop-toolkit/
Musisz wyodrębnić łatkę i zastosować ją do wersji tagu 20.2.
I am not entirely clear if this is what I want.
Jestem prawie pewien, że ta metoda zwraca również czas zegara ściennego.
Podobne pytania
Nowe pytania
hadoop
Hadoop to projekt open source Apache, który zapewnia oprogramowanie do niezawodnego i skalowalnego przetwarzania rozproszonego. Rdzeń składa się z rozproszonego systemu plików (HDFS) i menedżera zasobów (YARN). Różne inne projekty open source, takie jak Apache Hive, używają Apache Hadoop jako warstwy trwałości.