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.
- Aby zmodyfikować parametry konfiguracji programu Hive, wybierz pozycję Hive na pasku bocznym Usługi.
- 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:
Na karcie Konfiguracje programu Hive wpisz aparat wykonywania w polu filtru.
Wartość domyślna właściwości Optimization to Tez.
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).
Aby zmodyfikować parametry limitu, przejdź do karty Konfiguracje usługi Tez. Rozwiń panel Ogólne i znajdź
tez.grouping.max-size
parametry itez.grouping.min-size
.Ustaw oba parametry na 33 554 432 bajty (32 MB).
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.
Aby zmodyfikować parametr, przejdź do karty Konfiguracje programu Hive i znajdź parametr Data per Reducer na stronie Ustawienia.
Wybierz pozycję Edytuj , aby zmodyfikować wartość na 128 MB (134 217 728 bajtów), a następnie naciśnij klawisz Enter , aby zapisać.
Biorąc pod uwagę rozmiar wejściowy 1024 MB, z 128 MB danych na reduktor, istnieje osiem reduktorów (1024/128).
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ń.
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ść.Aby ograniczyć liczbę zadań do uruchomienia równolegle, zmodyfikuj
hive.exec.parallel.thread.number
właściwość . Wartość domyślna to 8.
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.
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.Aby włączyć wektoryzowane wykonywanie po stronie redukcji zapytania, ustaw
hive.vectorized.execution.reduce.enabled
parametr na true. Wartość domyślna to false.
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ł.
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(*)
.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.
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.
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.
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 koder kompresji z niższym kosztem procesora CPU, nawet jeśli koder koderowy nie ma wysokiej kompresji danych wyjściowych.
Aby ustawić kodek kompresji pośredniej, dodaj właściwość
mapred.map.output.compression.codec
niestandardową dohive-site.xml
pliku lubmapred-site.xml
.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 iorg.apache.hadoop.io.compress.SnappyCodec
jako wartość.d. Wybierz pozycję 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 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ć.
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.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.
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.
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.
W przypadku programu Hive do wykonywania partycji dynamicznych wartość parametru
hive.exec.dynamic.partition
powinna mieć wartość true (wartość domyślna).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.Aby ograniczyć liczbę partycji dynamicznych do utworzenia, zmodyfikuj
hive.exec.max.dynamic.partitions
parametr . Wartość domyślna to 5000.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ą.
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ą.
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 |
|
|
Nie jest wymagane żadne istotne ustawienie hive | Działa za każdym razem |
Sprzężenia mapy |
|
|
hive.auto.convert.join=true |
Szybkie, ale ograniczone |
Sortowanie zasobnika scalania | Jeśli obie tabele są następujące:
|
Każdy proces:
|
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
- Zarządzanie klastrami usługi HDInsight przy użyciu internetowego interfejsu użytkownika platformy Apache Ambari
- Apache Ambari REST API
- Optymalizowanie zapytań technologii Apache Hive w usłudze Azure HDInsight
- Optymalizowanie klastrów
- Optymalizowanie bazy danych Apache HBase
- Optymalizowanie oprogramowania Apache Pig