Optimalizace Apache Hivu s využitím Apache Ambari ve službě Azure HDInsight

Apache Ambari je webové rozhraní pro správu a monitorování clusterů HDInsight. Úvod do webového uživatelského rozhraní Ambari najdete v tématu Správa clusterů HDInsight pomocí webového uživatelského rozhraní Apache Ambari.

Následující části popisují možnosti konfigurace pro optimalizaci celkového výkonu Apache Hivu.

  1. Pokud chcete upravit parametry konfigurace Hive, vyberte Hive na bočním panelu Služby.
  2. Přejděte na kartu Konfigurace .

Nastavení prováděcího modulu Hive

Hive poskytuje dva prováděcí moduly: Apache Hadoop MapReduce a Apache TEZ. Tez je rychlejší než MapReduce. Clustery HDInsight Linux mají Tez jako výchozí spouštěcí modul. Změna prováděcího modulu:

  1. Na kartě Konfigurace Hive zadejte do pole filtru prováděcí modul.

    Apache Ambari Search execution engine.

  2. Výchozí hodnota vlastnosti Optimization je Tez.

    Optimization - Apache Tez engine.

Ladění mapovačů

Hadoop se pokusí rozdělit (mapovat) jeden soubor do více souborů a zpracovat výsledné soubory paralelně. Počet mapovačů závisí na počtu rozdělení. Následující dva parametry konfigurace řídí počet rozdělení pro prováděcí modul Tez:

  • tez.grouping.min-size: Nižší limit velikosti seskupeného rozdělení s výchozí hodnotou 16 MB (16 777 216 bajtů).
  • tez.grouping.max-size: Horní limit velikosti seskupeného rozdělení s výchozí hodnotou 1 GB (1 073 741 824 bajtů).

Jako vodítko výkonu snižte oba tyto parametry, aby se zlepšila latence, aby se zvýšila propustnost.

Pokud například chcete nastavit čtyři úkoly mapperu pro velikost dat 128 MB, nastavili byste oba parametry na 32 MB každý (33 554 432 bajtů).

  1. Pokud chcete upravit parametry omezení, přejděte na kartu Konfigurace služby Tez. Rozbalte panel Obecné a vyhledejte tez.grouping.max-size parametry.tez.grouping.min-size

  2. Nastavte oba parametry na 33 554 432 bajtů (32 MB).

    Apache Ambari Tez grouping sizes.

Tyto změny ovlivňují všechny úlohy Tez na celém serveru. Pokud chcete získat optimální výsledek, zvolte odpovídající hodnoty parametrů.

Ladění reduktorů

Apache ORC i Snappy nabízejí vysoký výkon. Hive ale může mít ve výchozím nastavení příliš málo reduktorů, což způsobuje kritické body.

Řekněme například, že máte velikost vstupních dat 50 GB. Tato data ve formátu ORC s kompresí Snappy jsou 1 GB. Hive odhaduje počet reduktorů potřebných takto: (počet bajtů vstupu do mapperů / hive.exec.reducers.bytes.per.reducer).

Ve výchozím nastavení je tento příklad čtyři reduktory.

Parametr hive.exec.reducers.bytes.per.reducer určuje počet bajtů zpracovaných na redukci. Výchozí hodnota je 64 MB. Optimalizace této hodnoty zvyšuje paralelismus a může zlepšit výkon. Příliš nízké ladění by také mohlo způsobit příliš mnoho reduktorů, což může nepříznivě ovlivnit výkon. Tento parametr vychází z vašich konkrétních požadavků na data, nastavení komprese a dalších faktorů prostředí.

  1. Pokud chcete parametr upravit, přejděte na kartu Konfigurace Hive a na stránce Nastavení vyhledejte parametr Data per Reducer.

    Apache Ambari Data per Reducer.

  2. Vyberte Upravit , pokud chcete upravit hodnotu na 128 MB (134 217 728 bajtů) a stisknutím klávesy Enter uložte.

    Ambari Data per Reducer - edited.

    Vzhledem k velikosti vstupu 1 024 MB s 128 MB dat na redukční nástroj existuje osm reduktorů (1024/128).

  3. Nesprávná hodnota parametru Data per Reducer může mít za následek velký počet reduktorů, což nepříznivě ovlivňuje výkon dotazů. Pokud chcete omezit maximální počet reduktorů, nastavte hive.exec.reducers.max na odpovídající hodnotu. Výchozí hodnota je 1009.

Povolení paralelního spouštění

Dotaz Hive se provádí v jedné nebo více fázích. Pokud se nezávislé fáze dají spustit paralelně, zvýší se tím výkon dotazů.

  1. Pokud chcete povolit paralelní provádění dotazů, přejděte na kartu Konfigurace Hive a vyhledejte hive.exec.parallel vlastnost. Výchozí hodnota je false. Změňte hodnotu na true a stisknutím klávesy Enter hodnotu uložte.

  2. Chcete-li omezit počet spuštěných úloh paralelně, upravte hive.exec.parallel.thread.number vlastnost. Výchozí hodnota je 8.

    Apache Hive exec parallel display.

Povolení vektorizace

Hive zpracovává řádek dat po řádku. Vektorizace směruje Hive ke zpracování dat v blocích 1 024 řádků místo jednoho řádku najednou. Vektorizace se vztahuje pouze na formát souboru ORC.

  1. Pokud chcete povolit vektorizované spuštění dotazu, přejděte na kartu Konfigurace Hive a vyhledejte hive.vectorized.execution.enabled parametr. Výchozí hodnota platí pro Hive 0.13.0 nebo novější.

  2. Pokud chcete povolit vektorizované spouštění pro stranu redukce dotazu, nastavte hive.vectorized.execution.reduce.enabled parametr na hodnotu true. Výchozí hodnota je false.

    Apache Hive vectorized execution.

Povolení optimalizace na základě nákladů (CBO)

Hive ve výchozím nastavení používá sadu pravidel pro vyhledání jednoho optimálního plánu provádění dotazů. Optimalizace založená na nákladech (CBO) vyhodnocuje několik plánů pro spuštění dotazu. A přiřadí každému plánu náklady a pak určí nejlevnější plán pro provedení dotazu.

Pokud chcete povolit CBO, přejděte na Konfigurace> Hive>Nastavení a vyhledejte Enable Cost Based Optimizer a pak přepněte přepínač na Zapnuto.

HDInsight cost-based optimizer.

Následující další parametry konfigurace zvyšují výkon dotazů Hive při povolení CBO:

  • hive.compute.query.using.stats

    Pokud je nastavena hodnota true, Hive používá statistiky uložené v metastoru k zodpovězení jednoduchých dotazů, jako je count(*).

    Apache Hive compute query using stats.

  • hive.stats.fetch.column.stats

    Statistiky sloupců se vytvoří, když je povolený CBO. Hive používá statistiky sloupců, které jsou uložené v metastoru, k optimalizaci dotazů. Načtení statistiky sloupců pro každý sloupec trvá déle, když je počet sloupců vysoký. Pokud je nastavená hodnota false, toto nastavení zakáže načítání statistik sloupců z metastoru.

    Apache Hive stats set column stats.

  • hive.stats.fetch.partition.stats

    Základní statistiky oddílů, jako je počet řádků, velikost dat a velikost souboru, se ukládají do metastoru. Pokud je nastavená hodnota true, statistiky oddílů se načítají z metastoru. Pokud je hodnota false, velikost souboru se načte ze systému souborů. A počet řádků se načte ze schématu řádků.

    Hive stats set partition stats.

Další informace najdete v blogovém příspěvku optimalizace na základě nákladů Hive v Analýze na blogu Azure.

Povolení zprostředkující komprese

Úkoly mapování vytvářejí zprostředkující soubory, které používají úkoly redukce. Zprostředkující komprese zmenší velikost zprostředkujícího souboru.

Úlohy Hadoopu jsou obvykle kritické pro vstupně-výstupní operace. Komprese dat může urychlit vstupně-výstupní operace a celkový přenos sítě.

Dostupné typy komprese:

Formát Nástroj Algoritmus Přípona souboru Rozdělitelné?
Gzip Gzip DEFLACI .gz No
Bzip2 Bzip2 Bzip2 .bz2 Ano
LZO Lzop LZO .lzo Ano, pokud je indexováno
Elegantní Elegantní Elegantní No

Obecně platí, že rozdělení metody komprese je důležité, jinak se vytvoří několik mapperů. Pokud jsou vstupní data text, bzip2 je nejlepší volbou. U formátu ORC je funkce Snappy nejrychlejší možností komprese.

  1. Pokud chcete povolit zprostředkující kompresi, přejděte na kartu Konfigurace Hive a nastavte hive.exec.compress.intermediate parametr na true. Výchozí hodnota je false.

    `Hive exec compress intermediate`.

    Poznámka:

    Chcete-li komprimovat zprostředkující soubory, zvolte kodek komprese s nižšími náklady na procesor, i když kodek nemá vysoký výstup komprese.

  2. Chcete-li nastavit kodek zprostředkující komprese, přidejte do souboru nebo mapred-site.xml vlastní vlastnost.mapred.map.output.compression.codechive-site.xml

  3. Přidání vlastního nastavení:

    a. Přejděte na Konfigurace>Hive>Advanced Custom>Hive-site.

    b. Vyberte Přidat vlastnost... v dolní části podokna Vlastní podregistr-web.

    c. V okně Přidat vlastnost zadejte mapred.map.output.compression.codec jako klíč a org.apache.hadoop.io.compress.SnappyCodec hodnotu.

    d. Vyberte Přidat.

    `Apache Hive custom property add`.

    Toto nastavení zkomprimuje zprostředkující soubor pomocí komprese Snappy. Po přidání vlastnosti se zobrazí v podokně Vlastní podregistr-web.

    Poznámka:

    Tento postup upraví $HADOOP_HOME/conf/hive-site.xml soubor.

Komprese konečného výstupu

Konečný výstup Hive lze také zkomprimovat.

  1. Pokud chcete zkomprimovat konečný výstup Hive, přejděte na kartu Konfigurace Hive a nastavte hive.exec.compress.output parametr na true. Výchozí hodnota je false.

  2. Pokud chcete zvolit kodek komprese výstupu, přidejte mapred.output.compression.codec vlastní vlastnost do podokna Vlastní podregistr-web, jak je popsáno v kroku 3 předchozí části.

    Apache Hive custom property add2.

Povolení spekulativního spouštění

Spekulativní spuštění spustí určitý počet duplicitních úloh, které detekují a zamítnou seznam pomalého sledování úloh. Při zlepšování celkového provádění úlohy optimalizací výsledků jednotlivých úkolů.

Spekulativní spouštění by nemělo být zapnuté u dlouhotrvajících úloh MapReduce s velkými objemy vstupu.

  • Pokud chcete povolit spekulativní spuštění, přejděte na kartu Konfigurace Hive a nastavte hive.mapred.reduce.tasks.speculative.execution parametr na true. Výchozí hodnota je false.

    `Hive mapred reduce tasks speculative execution`.

Ladění dynamických oddílů

Hive umožňuje vytvářet dynamické oddíly při vkládání záznamů do tabulky bez předdefinování každého oddílu. Tato schopnost je výkonná funkce. I když může vést k vytvoření velkého počtu oddílů. A velký počet souborů pro každý oddíl.

  1. Aby Hive dělal dynamické oddíly, hodnota parametru hive.exec.dynamic.partition by měla být pravdivá (výchozí).

  2. Změňte režim dynamického oddílu na striktní. V přísném režimu musí být alespoň jeden oddíl statický. Toto nastavení zabraňuje dotazům bez filtru oddílů v klauzuli WHERE, to znamená, že striktní zabraňuje dotazům, které kontrolují všechny oddíly. Přejděte na kartu Konfigurace Hive a pak nastavte hive.exec.dynamic.partition.mode striktní nastavení. Výchozí hodnota není omezena.

  3. Pokud chcete omezit počet dynamických oddílů, které se mají vytvořit, upravte hive.exec.max.dynamic.partitions parametr. Výchozí hodnota je 5000.

  4. Chcete-li omezit celkový počet dynamických oddílů na uzel, upravte hive.exec.max.dynamic.partitions.pernode. Výchozí hodnota je 2000.

Povolení místního režimu

Místní režim umožňuje Hivu provádět všechny úkoly úlohy na jednom počítači. Nebo někdy v jednom procesu. Toto nastavení zlepšuje výkon dotazů, pokud jsou vstupní data malá. A režijní náklady na spouštění úloh pro dotazy spotřebovávají značné procento celkového provádění dotazů.

Pokud chcete povolit místní režim, přidejte hive.exec.mode.local.auto parametr na panel Vlastní podregistr-web, jak je vysvětleno v kroku 3 oddílu Povolit zprostředkující kompresi .

Apache Hive exec mode local auto.

Nastavení jedné skupiny MapReduce MultiGROUP BY

Pokud je tato vlastnost nastavena na hodnotu true, dotaz MultiGROUP BY s běžnými klíči seskupit podle vygeneruje jednu úlohu MapReduce.

Chcete-li toto chování povolit, přidejte hive.multigroupby.singlereducer parametr do podokna Vlastní podregistr-web, jak je vysvětleno v kroku 3 části Povolení zprostředkující komprese .

Hive set single MapReduce MultiGROUP BY.

Další optimalizace Hivu

Následující části popisují další optimalizace související s Hivem, které můžete nastavit.

Optimalizace spojení

Výchozí typ spojení v Hivu je náhodné spojení. Ve službě Hive načtou speciální mappery vstup a vygenerují dvojici klíč/hodnota spojení do zprostředkujícího souboru. Hadoop tyto páry seřadí a sloučí do fáze náhodného prohazování. Tato fáze náhodného prohazu je nákladná. Výběr správného spojení na základě vašich dat může výrazně zvýšit výkon.

Typ spojení Když Jak Nastavení Hivu Komentáře
Shuffle Join
  • Výchozí volba
  • Vždy funguje
  • Čtení z části jedné z tabulek
  • Kontejnery a řazení podle klíče Join
  • Odešle do každého redukce jeden kbelík.
  • Spojení se provádí na straně Redukce.
Není potřeba žádné významné nastavení Hivu. Funguje pokaždé
Připojení k mapě
  • Jedna tabulka se může vejít do paměti.
  • Čte malou tabulku do tabulky hash paměti.
  • Toky prostřednictvím části velkého souboru
  • Spojí každý záznam z tabulky hash.
  • Spojení jsou samotná mapperem.
hive.auto.confvert.join=true Rychlé, ale omezené
Seřadit slučovací kbelík Pokud jsou obě tabulky:
  • Seřazeno stejně
  • Stejné rozdělení do kontejneru
  • Spojení podle seřazeného nebo kontejnerového sloupce
Každý proces:
  • Načte kbelík z každé tabulky.
  • Zpracuje řádek s nejnižší hodnotou.
hive.auto.convert.sortmerge.join=true Efektivita

Optimalizace prováděcího modulu

Další doporučení pro optimalizaci modulu spouštění Hive:

Nastavení Doporučené Výchozí nastavení služby HDInsight
hive.mapjoin.hybridgrace.hashtable True = bezpečnější, pomalejší; false = rychlejší false (nepravda)
tez.am.resource.memory.mb Horní mez 4 GB pro většinu Automatické ladění
tez.session.am.dag.submit.timeout.secs 300 a více 300
tez.am.container.idle.release-timeout-min.millis 20 000 a více 10000
tez.am.container.idle.release-timeout-max.millis 40 000 a více 20 000

Další kroky