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
- Subskrypcja platformy Azure. Zobacz temat Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
- Konto usługi Azure Data Lake Storage Gen1. Aby uzyskać instrukcje dotyczące tworzenia, zobacz Wprowadzenie do usługi Azure Data Lake Storage Gen1
- Klaster usługi Azure HDInsight z dostępem do konta Data Lake Storage Gen1. Zobacz Tworzenie klastra usługi HDInsight przy użyciu Data Lake Storage Gen1. Upewnij się, że włączono pulpit zdalny dla klastra.
- Korzystanie z usługi MapReduce w usłudze HDInsight. Aby uzyskać więcej informacji, zobacz Use MapReduce in Hadoop on HDInsight (Używanie technologii MapReduce w usłudze Hadoop w usłudze HDInsight)
- Zapoznaj się z wytycznymi dotyczącymi dostrajania wydajności dla Data Lake Storage Gen1. Aby zapoznać się z ogólnymi pojęciami dotyczącymi wydajności, zobacz wskazówki dotyczące dostosowywania wydajności Data Lake Storage Gen1
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ć:
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
Uruchom ponownie wszystkie węzły/usługę, aby konfiguracja weszła w życie.
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