Wskazówki dotyczące dostrajania wydajności programu Hive w usłudze HDInsight i Azure Data Lake Storage Gen1
Ustawienia domyślne zostały ustawione w celu zapewnienia dobrej wydajności w wielu różnych przypadkach użycia. W przypadku zapytań intensywnie korzystających z operacji we/wy można dostosować usługę Hive, aby uzyskać lepszą wydajność dzięki usłudze Azure Data Lake Storage Gen1.
Wymagania wstępne
- Subskrypcja platformy Azure. Zobacz temat Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
- Konto 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.
- Uruchamianie programu Hive w usłudze HDInsight. Aby dowiedzieć się więcej na temat uruchamiania zadań Hive w usłudze HDInsight, zobacz Use Hive on HDInsight (Korzystanie z programu Hive w usłudze HDInsight)
- Wytyczne dotyczące dostrajania wydajności dotyczące 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
Poniżej przedstawiono najważniejsze ustawienia, które należy dostosować w celu zwiększenia wydajności Data Lake Storage Gen1:
hive.tez.container.size — ilość pamięci używanej przez poszczególne zadania
tez.grouping.min-size — minimalny rozmiar każdego mapera
tez.grouping.max rozmiar — maksymalny rozmiar każdego mapera
hive.exec.reducer.bytes.per.reducer — rozmiar każdego reduktora
hive.tez.container.size — rozmiar kontenera określa ilość pamięci dostępnej dla każdego zadania. Jest to główne dane wejściowe do kontrolowania współbieżności w programie Hive.
tez.grouping.min-size — ten parametr umożliwia ustawienie minimalnego rozmiaru każdego mapera. Jeśli liczba maperów wybieranych przez tez jest mniejsza niż wartość tego parametru, wówczas tez użyje wartości ustawionej tutaj.
tez.grouping.max-size — parametr umożliwia ustawienie maksymalnego rozmiaru każdego mapera. Jeśli liczba maperów wybieranych przez tez jest większa niż wartość tego parametru, wówczas tez użyje wartości ustawionej tutaj.
hive.exec.reducer.bytes.per.reducer — ten parametr ustawia rozmiar każdego reduktora. Domyślnie każdy reduktor ma 256 MB.
Wskazówki
Ustaw wartość hive.exec.reducer.bytes.per.reducer — wartość domyślna działa dobrze, gdy dane są nieskompresowane. W przypadku skompresowanych danych należy zmniejszyć rozmiar reduktora.
Ustaw hive.tez.container.size — w każdym węźle pamięć jest określana przez yarn.nodemanager.resource.memory-mb i powinna być domyślnie poprawnie ustawiona w klastrze usługi HDI. Aby uzyskać dodatkowe informacje na temat ustawiania odpowiedniej pamięci w usłudze YARN, zobacz ten wpis.
Obciążenia intensywnie korzystające z operacji we/wy mogą korzystać z większej równoległości dzięki zmniejszeniu rozmiaru kontenera Tez. Daje to użytkownikowi więcej kontenerów, co zwiększa współbieżność. Jednak niektóre zapytania Hive wymagają znacznej ilości pamięci (np. MapJoin). Jeśli zadanie nie ma wystarczającej ilości pamięci, podczas wykonywania otrzymasz wyjątek braku pamięci. Jeśli wystąpią wyjątki braku pamięci, należy zwiększyć ilość pamięci.
Współbieżna liczba uruchomionych lub równoległych zadań zostanie ograniczona przez łączną pamięć usługi YARN. Liczba kontenerów usługi YARN będzie określać, ile współbieżnych zadań można uruchomić. Aby znaleźć pamięć usługi YARN na węzeł, możesz przejść do narzędzia Ambari. Przejdź do usługi YARN i wyświetl kartę Konfiguracje. W tym oknie zostanie wyświetlona pamięć usługi YARN.
Łączna pamięć usługi YARN = węzły * pamięć YARN na węzeł Liczba kontenerów usługi YARN = łączna ilość pamięci usługi YARN / rozmiar kontenera Tez
Kluczem do poprawy wydajności przy użyciu Data Lake Storage Gen1 jest zwiększenie współbieżności jak najwięcej. Aplikacja Tez automatycznie oblicza liczbę zadań, które należy utworzyć, aby nie trzeba było jej ustawiać.
Przykładowe obliczenie
Załóżmy, że masz klaster D14 z 8 węzłami.
Całkowita pamięć YARN = węzły * pamięć YARN na węzeł Całkowita pamięć YARN = 8 węzłów * 96 GB = 768 GB liczba kontenerów YARN = 768 GB / 3072 MB = 256
Ograniczenia
ograniczanie przepustowości Data Lake Storage Gen1
Jeśli osiągniesz limity przepustowości zapewniane przez Data Lake Storage Gen1, zaczniesz widzieć błędy zadań. Można to zidentyfikować, obserwując błędy ograniczania przepustowości w dziennikach zadań. Równoległość można zmniejszyć, zwiększając rozmiar kontenera Tez. Jeśli potrzebujesz większej współbieżnoś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 konfiguracji programu Hive. Można to zrobić w widoku systemu Ambari: 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, w pliku dziennika hive zostanie wyświetlony kod błędu HTTP 429. Plik dziennika hive znajduje się w folderze /tmp/<user>/hive.log
Więcej informacji na temat dostrajania hive
Oto kilka blogów, które ułatwią dostrojenie zapytań Hive:
- Optymalizowanie zapytań hive dla usługi Hadoop w usłudze HDInsight
- Kodowanie pliku zapytania hive w usłudze Azure HDInsight
- Ignite talk on optimize Hive on HDInsight