Wskazówki dotyczące dostrajania wydajności w usłudze MapReduce w usłudze HDInsight i usłudze Azure Data Lake Storage Gen1

Wymagania wstępne

Parametry

Podczas uruchamiania zadań MapReduce poniżej przedstawiono najważniejsze parametry, które można skonfigurować w celu zwiększenia wydajności Data Lake Storage Gen1:

Parametr Opis
Mapreduce.map.memory.mb Ilość pamięci do przydzielenia do każdego mapera.
Mapreduce.job.maps Liczba zadań mapy na zadanie.
Mapreduce.reduce.memory.mb Ilość pamięci do przydzielenia do każdego reduktora.
Mapreduce.job.reduces Liczba zadań redukcji na zadanie.

Mapreduce.map.memory / Mapreduce.reduce.memory

Dostosuj tę liczbę na podstawie ilości pamięci potrzebnej dla zadania mapy i/lub redukcji. Wartości domyślne mapreduce.map.memory elementów i mapreduce.reduce.memory w narzędziu Ambari można wyświetlić za pośrednictwem konfiguracji usługi Yarn. W narzędziu Ambari przejdź do usługi YARN i wyświetl kartę Configs (Konfiguracje ). Zostanie wyświetlona pamięć usługi YARN.

Mapreduce.job.maps / Mapreduce.job.reduces

Określa maksymalną liczbę maperów lub reduktorów do utworzenia. Liczba podziałów określa, ile maperów jest tworzonych dla zadania MapReduce. W związku z tym możesz uzyskać mniej maperów niż zażądano, jeśli istnieje mniej podziałów niż liczba żądanych maperów.

Wskazówki

Krok 1. Określanie liczby uruchomionych zadań

Domyślnie usługa MapReduce będzie używać całego klastra dla zadania. Możesz użyć mniejszej liczby klastrów, używając mniejszej liczby maperów niż dostępne kontenery. Wskazówki zawarte w tym dokumencie zakładają, że aplikacja jest jedyną aplikacją działającą w klastrze.

Krok 2. Ustaw mapreduce.map.memory/mapreduce.reduce.memory

Rozmiar pamięci dla zadań mapy i redukcji będzie zależeć od konkretnego zadania. Jeśli chcesz zwiększyć współbieżność, możesz zmniejszyć rozmiar pamięci. Liczba współbieżnych uruchomionych zadań zależy od liczby kontenerów. Zmniejszając ilość pamięci na maper lub reduktor, można utworzyć więcej kontenerów, co umożliwia współbieżne uruchamianie większej liczby maperów lub reduktorów. Zmniejszenie ilości pamięci za dużo może spowodować, że niektóre procesy zabraknie pamięci. Jeśli podczas uruchamiania zadania wystąpi błąd stert, zwiększ ilość pamięci na maper lub reduktor. Należy pamiętać, że dodanie większej liczby kontenerów zwiększa obciążenie dla każdego dodatkowego kontenera, co może potencjalnie obniżyć wydajność. Inną alternatywą jest uzyskanie większej ilości pamięci przy użyciu klastra z większą ilością pamięci lub zwiększenie liczby węzłów w klastrze. Większa ilość pamięci umożliwi użycie większej liczby kontenerów, co oznacza większą współbieżność.

Krok 3. Określanie całkowitej pamięci usługi YARN

Aby dostroić mapreduce.job.maps/mapreduce.job.reduces, rozważ łączną ilość dostępnej pamięci YARN do użycia. Te informacje są dostępne w systemie Ambari. Przejdź do usługi YARN i wyświetl kartę Konfiguracje . W tym oknie zostanie wyświetlona pamięć usługi YARN. Pomnóż pamięć usługi YARN przy użyciu liczby węzłów w klastrze, aby uzyskać łączną ilość pamięci usługi YARN.

Total YARN memory = nodes * YARN memory per node

Jeśli używasz pustego klastra, pamięć może być całkowitą pamięcią usługi YARN dla klastra. Jeśli inne aplikacje używają pamięci, możesz użyć tylko części pamięci klastra, zmniejszając liczbę maperów lub reduktorów do liczby kontenerów, których chcesz użyć.

Krok 4. Obliczanie liczby kontenerów usługi YARN

Kontenery usługi YARN określają ilość współbieżności dostępnej dla zadania. Weź całkowitą pamięć YARN i podziel je przez mapreduce.map.memory.

# of YARN containers = total YARN memory / mapreduce.map.memory

Krok 5. Ustawianie mapreduce.job.maps/mapreduce.job.reduces

Ustaw parametr mapreduce.job.maps/mapreduce.job.zmniejsza się do co najmniej liczby dostępnych kontenerów. Możesz eksperymentować dalej, zwiększając liczbę maperów i reduktorów, aby sprawdzić, czy uzyskasz lepszą wydajność. Należy pamiętać, że więcej maperów będzie miało dodatkowe obciążenie, dlatego zbyt wiele maperów może obniżyć wydajność.

Planowanie procesora CPU i izolacja procesora CPU są domyślnie wyłączone, więc liczba kontenerów usługi YARN jest ograniczona przez pamięć.

Przykładowe obliczenie

Załóżmy, że obecnie masz klaster składający się z 8 węzłów D14 i chcesz uruchomić zadanie intensywnie korzystające z operacji we/wy. Poniżej przedstawiono obliczenia, które należy wykonać:

Krok 1. Określanie liczby uruchomionych zadań

W naszym przykładzie przyjęto założenie, że nasze zadanie jest jedynym uruchomionym zadaniem.

Krok 2. Ustaw mapreduce.map.memory/mapreduce.reduce.memory

W naszym przykładzie uruchamiasz zadanie intensywnie korzystające z operacji we/wy i decydujesz, że 3 GB pamięci dla zadań mapy jest wystarczające.

mapreduce.map.memory = 3GB

Krok 3. Określanie całkowitej pamięci usługi YARN

total memory from the cluster is 8 nodes * 96GB of YARN memory for a D14 = 768GB

Krok 4. Obliczanie liczby kontenerów usługi YARN

# of YARN containers = 768 GB of available memory / 3 GB of memory = 256

Krok 5. Ustawianie mapreduce.job.maps/mapreduce.job.reduces

mapreduce.map.jobs = 256

Ograniczenia

ograniczanie przepustowości Data Lake Storage Gen1

Jako usługa wielodostępna Data Lake Storage Gen1 ustawia limity przepustowości na poziomie konta. Jeśli osiągniesz te limity, zaczniesz widzieć błędy zadań. Można to zidentyfikować, obserwując błędy ograniczania przepustowości w dziennikach zadań. Jeśli potrzebujesz większej przepustowości dla zadania, skontaktuj się z nami.

Aby sprawdzić, czy ograniczanie jest ograniczane, należy włączyć rejestrowanie debugowania po stronie klienta. Oto jak to zrobić:

  1. Umieść następującą właściwość we właściwościach log4j w narzędziu Ambari > YARN > Config > Advanced yarn-log4j: log4j.logger.com.microsoft.azure.datalake.store=DEBUG

  2. Uruchom ponownie wszystkie węzły/usługę, aby konfiguracja weszła w życie.

  3. Jeśli masz ograniczenie przepustowości, zobaczysz kod błędu HTTP 429 w pliku dziennika usługi YARN. Plik dziennika YARN znajduje się w folderze /tmp/<user>/yarn.log

Przykłady do uruchomienia

Aby zademonstrować sposób działania usługi MapReduce w Data Lake Storage Gen1, poniżej przedstawiono przykładowy kod, który został uruchomiony w klastrze z następującymi ustawieniami:

  • 16 węzłów D14v2
  • Klaster Hadoop z uruchomioną usługą HDI 3.6

Poniżej przedstawiono przykładowe polecenia służące do uruchamiania teragenów MapReduce Teragen, Terasort i Teravalidate. Te polecenia można dostosować na podstawie zasobów.

Teragen

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teragen -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 10000000000 adl://example/data/1TB-sort-input

Terasort

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar terasort -Dmapreduce.job.maps=2048 -Dmapreduce.map.memory.mb=3072 -Dmapreduce.job.reduces=512 -Dmapreduce.reduce.memory.mb=3072 adl://example/data/1TB-sort-input adl://example/data/1TB-sort-output

Terawalidate

yarn jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-mapreduce-examples.jar teravalidate -Dmapreduce.job.maps=512 -Dmapreduce.map.memory.mb=3072 adl://example/data/1TB-sort-output adl://example/data/1TB-sort-validate