Udostępnij przez


Optymalizowanie programu Apache Hive za pomocą narzędzia Apache Ambari w usłudze Azure HDInsight

Apache Ambari to interfejs internetowy do zarządzania klastrami usługi HDInsight i monitorowania ich. Aby zapoznać się z wprowadzeniem do internetowego interfejsu użytkownika systemu Ambari, zobacz Manage HDInsight clusters by using the Apache Ambari Web UI (Zarządzanie klastrami usługi HDInsight przy użyciu internetowego interfejsu użytkownika systemu Apache Ambari).

W poniższych sekcjach opisano opcje konfiguracji służące do optymalizowania ogólnej wydajności oprogramowania Apache Hive.

  1. Aby zmodyfikować parametry konfiguracji programu Hive, wybierz pozycję Hive na pasku bocznym Usługi.
  2. Przejdź do karty Konfiguracje .

Ustaw silnik wykonawczy Hive

Usługa Hive udostępnia dwa silniki wykonawcze: Apache Hadoop MapReduce i Apache TEZ. Tez jest szybszy niż MapReduce. Klastry HDInsight z systemem Linux mają Tez jako domyślny silnik wykonawczy. Aby zmienić silnik wykonawczy:

  1. Na karcie Konfiguracje programu Hive wpisz silnik wykonawczy w polu filtrowania.

    Aparat wykonywania wyszukiwania systemu Apache Ambari.

  2. Wartość domyślna właściwości Optimization to Tez.

    Optymalizacja - silnik Apache Tez.

Konfiguracja maperów

Usługa Hadoop próbuje podzielić (mapować) pojedynczy plik na wiele plików i przetworzyć wynikowe pliki równolegle. Liczba mapujących zależy od liczby podziałów. Następujące dwa parametry konfiguracji określają liczbę podziałów dla silnika wykonawczego Tez:

  • tez.grouping.min-size: Dolny limit rozmiaru grupowanego podziału, z domyślną wartością 16 MB (16,777,216 bajtów).
  • tez.grouping.max-size: Górny limit rozmiaru pogrupowanego podziału z wartością domyślną 1 GB (1 073 741 824 bajtów).

W ramach wytycznych dotyczących wydajności obniż oba te parametry, aby zmniejszyć opóźnienia, zwiększ je, aby zwiększyć przepływność.

Aby na przykład ustawić cztery zadania mapowania dla rozmiaru danych o rozmiarze 128 MB, należy ustawić oba parametry na 32 MB każdy (33 554 432 bajty).

  1. Aby zmodyfikować parametry limitu, przejdź do karty Konfiguracje usługi Tez. Rozwiń panel Ogólne i znajdź parametry tez.grouping.max-size oraz tez.grouping.min-size.

  2. Ustaw oba parametry na 33 554 432 bajty (32 MB).

    Rozmiary grupowania Apache Ambari Tez.

Te zmiany wpływają na wszystkie zadania Tez na serwerze. Aby uzyskać optymalny wynik, wybierz odpowiednie wartości parametrów.

Reduktory dostrajania

Zarówno apache ORC, jak i Snappy oferują wysoką wydajność. Jednak Hive może mieć domyślnie zbyt małą liczbę reduktorów, co powoduje wąskie gardła.

Załóżmy na przykład, że masz rozmiar danych wejściowych o rozmiarze 50 GB. Te dane w formacie ORC z kompresją Snappy wynoszą 1 GB. Hive szacuje wymaganą liczbę reduktorów w następujący sposób: (liczba bajtów wejściowych (do maperów) / hive.exec.reducers.bytes.per.reducer).

W przypadku ustawień domyślnych ten przykład to cztery reduktory.

Parametr hive.exec.reducers.bytes.per.reducer określa liczbę bajtów przetworzonych dla każdego reduktora. Wartość domyślna to 64 MB. Dostrajanie tej wartości w dół zwiększa równoległość i może zwiększyć wydajność. Zbyt niskie dostrojenie może również spowodować powstawanie zbyt wielu reduktorów, co potencjalnie może negatywnie wpływać na wydajność. Ten parametr jest oparty na konkretnych wymaganiach dotyczących danych, ustawieniach kompresji i innych czynnikach środowiskowych.

  1. Aby zmodyfikować parametr, przejdź do karty Konfiguracje programu Hive i znajdź parametr Data per Reducer na stronie Ustawienia.

    Dane systemu Apache Ambari na reduktor.

  2. Wybierz pozycję Edytuj , aby zmodyfikować wartość na 128 MB (134 217 728 bajtów), a następnie naciśnij Enter , aby zapisać.

    Ambari Data na jednego reduktora — edytowano.

    Biorąc pod uwagę rozmiar wejściowy 1024 MB, z 128 MB danych na reduktor, istnieje osiem reduktorów (1024/128).

  3. Nieprawidłowa wartość parametru Data per Reducer może spowodować dużą liczbę reduktorów, co negatywnie wpływa na wydajność zapytań. Aby ograniczyć maksymalną liczbę reduktorów, ustaw wartość hive.exec.reducers.max na odpowiednią. Wartość domyślna to 1009.

Włącz równoległe wykonywanie

Zapytanie Hive jest wykonywane w co najmniej jednym etapie. Jeśli niezależne etapy mogą być uruchamiane równolegle, zwiększy to wydajność zapytań.

  1. Aby włączyć równoległe wykonywanie zapytań, przejdź do karty Konfiguracja programu Hive i wyszukaj hive.exec.parallel właściwość . Wartość domyślna to false. Zmień wartość na true, a następnie naciśnij Enter , aby zapisać wartość.

  2. Aby ograniczyć liczbę zadań do uruchomienia równolegle, zmodyfikuj hive.exec.parallel.thread.number właściwość . Wartość domyślna to 8.

    Równoległe wyświetlanie exec programu Apache Hive.

Włączanie wektoryzacji

Hive przetwarza dane wiersz po wierszu. Wektoryzacja kieruje hive do przetwarzania danych w blokach 1024 wierszy, a nie jednego wiersza jednocześnie. Wektoryzacja ma zastosowanie tylko do formatu pliku ORC.

  1. Aby włączyć wektoryzowane wykonywanie zapytania, przejdź do karty Konfiguracje programu Hive i wyszukaj hive.vectorized.execution.enabled parametr . Wartość domyślna ma wartość true dla programu Hive 0.13.0 lub nowszego.

  2. Aby włączyć wektoryzowane wykonywanie po stronie redukcji zapytania, ustaw hive.vectorized.execution.reduce.enabled parametr na true. Wartość domyślna to false.

    Wektoryzowane wykonywanie w Apache Hive.

Włączanie optymalizacji opartej na kosztach (CBO)

Domyślnie Hive stosuje zestaw reguł, aby znaleźć optymalny plan wykonania zapytania. Optymalizacja oparta na kosztach (CBO) ocenia wiele planów w celu wykonania zapytania. I przypisuje koszt do każdego planu, a następnie określa najtańszy plan do wykonania zapytania.

Aby włączyć funkcję CBO, przejdź dopozycji Ustawieniakonfiguracji>programu Hive> i znajdź pozycję Włącz optymalizator oparty na kosztach, a następnie przełącz przycisk przełącznika na .

Optymalizator kosztowy HDInsight.

Następujące dodatkowe parametry konfiguracji zwiększają wydajność zapytań hive po włączeniu CBO:

  • hive.compute.query.using.stats

    W przypadku ustawienia wartości true program Hive używa statystyk przechowywanych w magazynie metadanych, aby odpowiedzieć na proste zapytania, takie jak count(*).

    Zapytanie obliczeniowe apache Hive przy użyciu statystyk.

  • hive.stats.fetch.column.stats

    Statystyki kolumn są tworzone po włączeniu funkcji CBO. Usługa Hive używa statystyk kolumn, które są przechowywane w magazynie metadanych, aby zoptymalizować zapytania. Pobieranie statystyk kolumn dla każdej kolumny trwa dłużej, gdy liczba kolumn jest wysoka. Po ustawieniu wartości false to ustawienie wyłącza pobieranie statystyk kolumn z magazynu metadanych.

    Funkcja statystyk w Apache Hive ustawia statystyki kolumn.

  • hive.stats.fetch.partition.stats

    Podstawowe statystyki partycji, takie jak liczba wierszy, rozmiar danych i rozmiar pliku, są przechowywane w magazynie metadanych. Jeśli ustawiono wartość true, statystyki partycji są pobierane z magazynu metadanych. W przypadku wartości false rozmiar pliku jest pobierany z systemu plików. Liczba wierszy jest uzyskiwana ze struktury wiersza.

    Statystyki programu Hive ustawiają statystyki partycji.

Aby uzyskać więcej informacji, zapoznaj się z wpisem na blogu optymalizacji opartej na kosztach w Hive na Blogu o analizach na platformie Azure.

Włącz kompresję pośrednią

Zadania mapy tworzą pliki pośrednie, które są wykorzystywane przez zadania reduktora. Kompresja pośrednia zmniejsza rozmiar pliku pośredniego.

Zadania Hadoop zazwyczaj napotykają ograniczenia w zakresie wejścia/wyjścia. Kompresowanie danych może przyspieszyć we/wy i ogólny transfer sieciowy.

Dostępne typy kompresji to:

Forma Narzędzie Algorytm Rozszerzenie pliku Podzielny?
Gzip Gzip algorytm kompresji DEFLATE .gz Nie.
Bzip2 Bzip2 Bzip2 .bz2 Tak
LZO Lzop LZO .lzo Tak, jeśli indeksowane
Żwawy N/A Żwawy Żwawy Nie.

Ogólnie rzecz biorąc, możliwość podziału metody kompresji jest ważna, w przeciwnym razie mniej maperów zostanie utworzonych. Jeśli dane wejściowe są tekstowe, bzip2 jest najlepszą opcją. W przypadku formatu ORC snappy jest najszybszą opcją kompresji.

  1. Aby włączyć kompresję pośrednią, przejdź do karty Konfiguracje programu Hive, a następnie ustaw hive.exec.compress.intermediate parametr na wartość true. Wartość domyślna to false.

    Uwaga

    Aby skompresować pliki pośrednie, wybierz koder kompresji z niższym kosztem procesora, nawet jeśli nie oferuje on wysokiej kompresji wyjściowej.

  2. Aby ustawić pośredni kodek kompresji, dodaj niestandardową właściwość mapred.map.output.compression.codec do pliku hive-site.xml lub mapred-site.xml.

  3. Aby dodać ustawienie niestandardowe:

    a. Przejdź do Hive>Configs>Advanced>Custom hive-site.

    b. Wybierz Dodaj właściwość... na dole okienka niestandardowego hive-site.

    c. W oknie Dodawanie właściwości wprowadź mapred.map.output.compression.codec jako klucz i org.apache.hadoop.io.compress.SnappyCodec jako wartość.

    d. Wybierz Dodaj.

    `Właściwość niestandardowa Apache Hive: dodaj`.

    To ustawienie spowoduje skompresowanie pliku pośredniego przy użyciu kompresji Snappy. Po dodaniu właściwości zostanie ona wyświetlona w okienku niestandardowego hive-site.

    Uwaga

    Ta procedura modyfikuje $HADOOP_HOME/conf/hive-site.xml plik.

Kompresuj końcowe dane wyjściowe

Końcowe dane wyjściowe programu Hive można również skompresować.

  1. Aby skompresować końcowe dane wyjściowe programu Hive, przejdź do karty Konfiguracje programu Hive, a następnie ustaw hive.exec.compress.output parametr na true. Wartość domyślna to false.

  2. Aby wybrać kodek kompresji wyjściowej, dodaj właściwość niestandardową mapred.output.compression.codec do sekcji niestandardowej hive-site, zgodnie z opisem w kroku 3 poprzedniej sekcji.

    Dodaj właściwość niestandardową Apache Hive2.

Włącz wykonywanie spekulatywne

Wykonywanie spekulatywne uruchamia pewną liczbę zduplikowanych zadań w celu wykrywania i odrzucania listy wolno działających monitorów zadań. Podczas ulepszania ogólnego wykonywania zadania przez optymalizację wyników poszczególnych zadań.

Wykonywanie spekulatywne nie powinno być włączone w przypadku długotrwałych zadań MapReduce z dużą ilością danych wejściowych.

  • Aby włączyć wykonywanie spekulatywne, przejdź do karty Konfiguracje programu Hive, a następnie ustaw parametr na hive.mapred.reduce.tasks.speculative.execution true. Wartość domyślna to false.

Dostrajanie partycji dynamicznych

Program Hive umożliwia tworzenie partycji dynamicznych podczas wstawiania rekordów do tabeli bez wstępnie zdefiniowanej każdej partycji. Ta możliwość jest zaawansowaną funkcją. Chociaż może to spowodować utworzenie dużej liczby partycji. Duża liczba plików dla każdej partycji.

  1. W przypadku programu Hive do wykonywania partycji dynamicznych wartość parametru hive.exec.dynamic.partition powinna mieć wartość true (wartość domyślna).

  2. Zmień tryb partycji dynamicznej na rygorystyczny. W trybie ścisłym co najmniej jedna partycja musi być statyczna. To ustawienie uniemożliwia wykonywanie zapytań bez filtru partycji w klauzuli WHERE, czyli ścisłe uniemożliwia wykonywanie zapytań, które skanują wszystkie partycje. Przejdź do karty Konfiguracje programu Hive, a następnie ustaw ustawienie hive.exec.dynamic.partition.mode na ścisłe. Wartość domyślna to nonstrict.

  3. Aby ograniczyć liczbę partycji dynamicznych do utworzenia, zmodyfikuj hive.exec.max.dynamic.partitions parametr . Wartość domyślna to 5000.

  4. Aby ograniczyć łączną liczbę partycji dynamicznych na węzeł, zmodyfikuj element hive.exec.max.dynamic.partitions.pernode. Wartość domyślna to 2000.

Włączanie trybu lokalnego

Tryb lokalny umożliwia Hive wykonywanie wszystkich zadań na jednej maszynie. A czasami w jednym procesie. To ustawienie zwiększa wydajność zapytań, jeśli dane wejściowe są małe. Obciążenie związane z uruchamianiem zadań dla zapytań zużywa znaczną część całkowitego czasu wykonywania zapytań.

Aby włączyć tryb lokalny, dodaj parametr hive.exec.mode.local.auto do panelu niestandardowego hive-site, zgodnie z opisem w kroku 3 sekcji Włącz kompresję pośrednią.

Tryb exec programu Apache Hive w trybie lokalnym automatycznym.

Ustawianie pojedynczego elementu MapReduce MultiGROUP BY

Gdy ta właściwość ma wartość true, zapytanie MultiGROUP BY z typowymi kluczami grupowania generuje pojedyncze zadanie MapReduce.

Aby włączyć to zachowanie, dodaj parametr do niestandardowego okienka hive-site, zgodnie z opisem w kroku 3 sekcji Włącz kompresję pośrednią.

Konfiguracja Hive z pojedynczym MapReduce MultiGROUP BY.

Dodatkowe optymalizacje Hive

W poniższych sekcjach opisano dodatkowe optymalizacje związane z programem Hive, które można ustawić.

Optymalizacje złączeń

Domyślny typ sprzężenia w programie Hive to łączenie metodą tasowania. W programie Hive specjalne elementy mapujące odczytują dane wejściowe i emitują parę klucza i wartości dla sprzężenia do pliku tymczasowego. Usługa Hadoop sortuje i scala te pary w etapie mieszania. Ten etap mieszania jest kosztowny. Wybranie odpowiedniego sprzężenia na podstawie danych może znacznie poprawić wydajność.

Typ sprzężenia Kiedy Jak Ustawienia programu Hive Komentarze
Łączenie shuffle
  • Wybór domyślny
  • Zawsze działa
  • Odczyty z części jednej z tabel
  • Zasobniki i sortowanie według klucza łączenia
  • Wysyła jeden kubełek do każdej funkcji redukcji
  • Łączenie jest wykonywane po stronie redukcji
Nie jest wymagane żadne istotne ustawienie Hive. Działa za każdym razem
Łączenie map
  • Jedna tabela może zmieścić się w pamięci
  • Odczytuje małą tabelę do tabeli skrótów pamięci
  • Przetwarza części dużego pliku strumieniowo
  • Sprzęża każdy rekord z tabeli skrótów
  • Łączenia są realizowane wyłącznie przez maper.
hive.auto.convert.join=true Szybkie, ale ograniczone
Sortowanie metodą kubełkowego scalania Jeśli obie tabele są następujące:
  • Posortowane tak samo
  • Skategoryzowane tak samo
  • Łączenie na posortowanej/segmentowanej kolumnie
Każdy proces:
  • Odczytuje zasobnik z każdej tabeli
  • Przetwarza wiersz o najmniejszej wartości
hive.auto.convert.sortmerge.join=true Sprawny

Optymalizacje silnika wykonawczego

Dodatkowe zalecenia dotyczące optymalizowania aparatu wykonawczego programu Hive:

Ustawienie Zalecane Domyślna usługa HDInsight
hive.mapjoin.hybridgrace.hashtable True = bezpieczniejsze, wolniejsze; false = szybciej fałszywy
tez.am.resource.memory.mb Górna granica 4 GB dla większości Automatyczne dostrajanie
tez.session.am.dag.submit.timeout.secs 300+ 300
tez.am.container.idle.release-timeout-min.millis 20000+ 10 000
tez.am.container.idle.release-timeout-max.millis 40000+ 20000

Następne kroki