2013-05-05 11 views
5

Chcę zmierzyć przepustowość w każdym z datanodów, mierząc czas potrzebny do wykonania każdej operacji odczytu/zapisu. To bardzo mylące, aby przeczytać milion funkcji i dowiedzieć się, gdzie to się dzieje. Czy ktoś mógłby wymienić serię wywołań wykonanych podczas odczytu/zapisu bloku danych? używam wersji 1.0.1. Alternatywnie, jeśli istnieje już interfejs API, który mierzy to w datanodzie, mógłbym użyć tych informacji.Mierzenie przepustowości w trybie datanode

+1

Odnosząc się do komentarza dotyczącego nagród: jeśli umieścisz czarną listę w węźle, nie będzie ona już uczestniczyć w klastrze, więc przepustowość nigdy się nie zwiększy. – likeitlikeit

+0

Hej Bug Catcher, jakieś przemyślenia na temat mojej odpowiedzi poniżej? – Engineiro

+0

@ likeitlikeit Zrobiłem coś na linii istniejącej polityki na uderzenia serca: daj jej trzy szanse, a jeśli nadal jest źle, to zaznacz to na czarnej liście. Nieprzeznaczone do praktycznego użytku. W każdym razie –

Odpowiedz

1

Ważne klasy do badania w celu pomiaru wydajności to FSDataOutputStream dla zapisów i FSDataInputStream dla odczytów.

Plik Czytaj: Pierwszą rzeczą, że węzeł nie czytając plik jest wywołanie open() na obiekcie FileSystem. W tym momencie wiesz, że ten węzeł wkrótce zacznie czytać i możesz umieścić kod po powrocie tego połączenia, aby przygotować się do pomiarów. Wywołanie open() na HDFS tworzy instancję DistributedFileSystem, która komunikuje się z NameNode w celu zbierania lokalizacji bloków (posortowanych zgodnie z bliskością węzła wywołującego). Wreszcie obiekt DistributedFileSystem zwraca FSDataInputStream ("widzi" czytanie pliku), który z kolei opakowuje DFSInputStream ("widzi" bloki odczytu, obsługuje awarie). Twoje pomiary będą obejmowały zakres read() i close() połączenia na FSDataInputStream.

Zapis pliku: Węzeł wezwie create() na FileSystem. W tym momencie wykonywane są różne sprawdzenia, które obejmują uprawnienia do plików, dostępność itp., Ale po pomyślnym zakończeniu zwraca obiekt FSDataOutputStream, który owija kod DFSOutputStream. Ta sama koncepcja ma zastosowanie, gdy widzi się ciągły zapis, drugi obsługuje spójność współczynnika replikacji (to znaczy jeden zapis = trzy zapisy) i niepowodzenie. Podobnie jak w przypadku odczytu, pomiary będą obejmowały zakres write() i close() wywołanie na FSDataInputStream.

Aby zrobić to globalnie dla wszystkich węzłów w klastrze, należy zastąpić te metody jako część dystrybucji Hadoop, którą udostępniasz w klastrze.

+0

Nie wyjaśnia sposobu agregowania statystyk dla każdego węzła danych. Nie można oczekiwać, że węzły klienta będą profilować poszczególne węzły danych i wysyłać informacje do węzła nazwy. W każdym razie, odkąd moja potrzeba minęła, przyjmuję tę odpowiedź –

Powiązane problemy