Udostępnij za pośrednictwem


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 .

Ustawianie aparatu wykonywania programu Hive

Usługa Hive udostępnia dwa aparaty wykonywania: Apache Hadoop MapReduce i Apache TEZ. Tez jest szybszy niż MapReduce. Klastry hdInsight z systemem Linux mają tez jako domyślny aparat wykonywania. Aby zmienić aparat wykonywania:

  1. Na karcie Konfiguracje programu Hive wpisz aparat wykonywania w polu filtru.

    Apache Ambari Search execution engine.

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

    Optimization - Apache Tez engine.

Dostrajanie maperów

Usługa Hadoop próbuje podzielić (mapować) pojedynczy plik na wiele plików i przetworzyć wynikowe pliki równolegle. Liczba maperów zależy od liczby podziałów. Następujące dwa parametry konfiguracji napędzają liczbę podziałów aparatu wykonywania Tez:

  • tez.grouping.min-size: Niższy limit rozmiaru podzielonego grupowanego podziału z wartością domyślną 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 niższe oba te parametry w celu zwiększenia opóźnienia zwiększają 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ź tez.grouping.max-size parametry i tez.grouping.min-size .

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

    Apache Ambari Tez grouping sizes.

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ło reduktorów, powodując 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 wynosi 1 GB. Hive szacuje wymaganą liczbę reduktorów jako: (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 na reduktor. Wartość domyślna to 64 MB. Dostrajanie tej wartości w dół zwiększa równoległość i może zwiększyć wydajność. Dostrajanie go zbyt niskie może również spowodować zbyt wiele reduktorów, potencjalnie negatywnie wpływających 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.

    Apache Ambari Data per Reducer.

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

    Ambari Data per Reducer - edited.

    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 hive.exec.reducers.max odpowiednią wartość. Wartość domyślna to 1009.

Włączanie równoległego wykonywania

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 klawisz 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.

    Apache Hive exec parallel display.

Włączanie wektoryzacji

Gałąź przetwarza wiersz danych według wiersza. 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.

    Apache Hive vectorized execution.

Włączanie optymalizacji opartej na kosztach (CBO)

Domyślnie program Hive jest zgodny z zestawem reguł, aby znaleźć jeden optymalny plan wykonywania zapytań. 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ź do pozycji Konfiguracje> programu Hive>Ustawienia i znajdź pozycję Włącz optymalizator oparty na kosztach, a następnie przełącz przycisk przełącznika na Wł.

HDInsight cost-based optimizer.

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(*).

    Apache Hive compute query using stats.

  • 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.

    Apache Hive stats set column stats.

  • 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 pobierana ze schematu wiersza.

    Hive stats set partition stats.

Aby uzyskać więcej informacji, zapoznaj się z wpisem w blogu dotyczącym optymalizacji opartej na kosztach hive w usłudze Analytics w blogu platformy Azure

Włącz kompresję pośrednią

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

Zadania usługi Hadoop są zwykle wąskim gardłem we/wy. Kompresowanie danych może przyspieszyć we/wy i ogólny transfer sieciowy.

Dostępne typy kompresji to:

Formatuj Narzędzie Algorytm Rozszerzenie pliku Tabela podziału?
Gzip Gzip DEFLATE .gz Nie.
Bzip2 Bzip2 Bzip2 .bz2 Tak
LZO Lzop LZO .lzo Tak, jeśli indeksowane
Żwawy Nie dotyczy Żwawy Żwawy Nie.

Ogólnie rzecz biorąc, posiadanie tabeli podziału metody kompresji jest ważne, w przeciwnym razie zostanie utworzonych kilka maperów. 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.

    `Hive exec compress intermediate`.

    Uwaga

    Aby skompresować pliki pośrednie, wybierz koder koder kompresji z niższym kosztem procesora CPU, nawet jeśli koder koderowy nie ma wysokiej kompresji danych wyjściowych.

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

  3. Aby dodać ustawienie niestandardowe:

    a. Przejdź do obszaru Konfiguracja programu Hive Advanced>Custom hive-site>>.

    b. Wybierz pozycję Dodaj właściwość... w dolnej części okienka Niestandardowe 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 pozycję Dodaj.

    `Apache Hive custom property add`.

    To ustawienie spowoduje skompresowanie pliku pośredniego przy użyciu kompresji Snappy. Po dodaniu właściwości zostanie ona wyświetlona w okienku Niestandardowe 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ć koder kompresji wyjściowej, dodaj właściwość niestandardową mapred.output.compression.codec do okienka Niestandardowe hive-site, zgodnie z opisem w kroku 3 poprzedniej sekcji.

    Apache Hive custom property add2.

Włączanie wykonywania spekulatywnego

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.

    `Hive mapred reduce tasks speculative execution`.

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 usłudze Hive wykonywanie wszystkich zadań zadania 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ęść ogólnego wykonywania zapytań.

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

Apache Hive exec mode local auto.

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 hive.multigroupby.singlereducer parametr do okienka Niestandardowe hive-site, zgodnie z opisem w kroku 3 sekcji Włącz kompresję pośrednią.

Hive set single MapReduce MultiGROUP BY.

Dodatkowe optymalizacje hive

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

Optymalizacje sprzężenia

Domyślny typ sprzężenia w programie Hive to sprzężenia mieszania. W programie Hive specjalne mapowania odczytują dane wejściowe i emitują parę klucz/wartość sprzężenia do pliku pośredniego. 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
Sprzężenia shuffle
  • Wybór domyślny
  • Zawsze działa
  • Odczyty z części jednej z tabel
  • Zasobniki i sortowanie w kluczu sprzężenia
  • Wysyła jeden zasobnik do każdej redukcji
  • Sprzężenia odbywa się po stronie redukcji
Nie jest wymagane żadne istotne ustawienie hive Działa za każdym razem
Sprzężenia mapy
  • Jedna tabela może mieścić się w pamięci
  • Odczytuje małą tabelę do tabeli skrótów pamięci
  • Strumienie przez część dużego pliku
  • Sprzęża każdy rekord z tabeli skrótów
  • Sprzężenia są same przez maper
hive.auto.convert.join=true Szybkie, ale ograniczone
Sortowanie zasobnika scalania Jeśli obie tabele są następujące:
  • Posortowane tak samo
  • Zasobniki są takie same
  • Łączenie w posortowanej/zasobnikowej kolumnie
Każdy proces:
  • Odczytuje zasobnik z każdej tabeli
  • Przetwarza wiersz o najniższej wartości
hive.auto.convert.sortmerge.join=true Wydajność

Optymalizacje aparatu wykonywania

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łsz
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