Azure HDInsight'ta Apache Ambari ile Apache Hive'ı iyileştirme

Apache Ambari, HDInsight kümelerini yönetmek ve izlemek için bir web arabirimidir. Ambari Web kullanıcı arabirimine giriş için bkz . Apache Ambari Web kullanıcı arabirimini kullanarak HDInsight kümelerini yönetme.

Aşağıdaki bölümlerde genel Apache Hive performansını iyileştirmeye yönelik yapılandırma seçenekleri açıklanmaktadır.

  1. Hive yapılandırma parametrelerini değiştirmek için Hizmetler kenar çubuğundan Hive'ı seçin.
  2. Yapılandırmalar sekmesine gidin.

Hive yürütme altyapısını ayarlama

Hive iki yürütme altyapısı sağlar: Apache Hadoop MapReduce ve Apache TEZ. Tez, MapReduce'tan daha hızlıdır. HDInsight Linux kümeleri, varsayılan yürütme altyapısı olarak Tez'e sahiptir. Yürütme altyapısını değiştirmek için:

  1. Hive Yapılandırmaları sekmesinde, filtre kutusuna yürütme altyapısı yazın.

    Apache Ambari Search execution engine.

  2. optimization özelliğinin varsayılan değeri Tez'dir.

    Optimization - Apache Tez engine.

Eşleyicileri ayarlama

Hadoop, tek bir dosyayı birden çok dosyaya bölmeye (eşlemeye) ve sonuçta elde edilen dosyaları paralel olarak işlemeye çalışır. Eşleyicilerin sayısı bölme sayısına bağlıdır. Aşağıdaki iki yapılandırma parametresi, Tez yürütme altyapısı için bölme sayısını yönlendirir:

  • tez.grouping.min-size: Varsayılan değeri 16 MB (16.777.216 bayt) olan gruplandırılmış bölmenin boyutuna ilişkin alt sınır.
  • tez.grouping.max-size: Varsayılan değeri 1 GB (1.073.741.824 bayt) olan gruplandırılmış bölme boyutu üst sınırı.

Performans yönergeleri olarak, gecikme süresini iyileştirmek için bu parametrelerin her ikisini de düşürerek daha fazla aktarım hızına yükseltin.

Örneğin, 128 MB veri boyutu için dört eşleyici görevi ayarlamak için her iki parametreyi de 32 MB (33.554.432 bayt) olarak ayarlayabilirsiniz.

  1. Sınır parametrelerini değiştirmek için Tez hizmetinin Yapılandırmalar sekmesine gidin. Genel panelini genişletin ve ve tez.grouping.min-size parametrelerini buluntez.grouping.max-size.

  2. Her iki parametreyi de 33.554.432 bayt (32 MB) olarak ayarlayın.

    Apache Ambari Tez grouping sizes.

Bu değişiklikler sunucu genelindeki tüm Tez işlerini etkiler. En iyi sonucu almak için uygun parametre değerlerini seçin.

Azaltıcıları ayarlama

Apache ORC ve Snappy yüksek performans sunar. Ancak Hive varsayılan olarak çok az azaltıcıya sahip olabilir ve bu da performans sorunlarına neden olabilir.

Örneğin, 50 GB giriş veri boyutunuz olduğunu varsayalım. Snappy sıkıştırmalı ORC biçimindeki veriler 1 GB'tır. Hive, gereken azaltıcı sayısını şu şekilde tahmin eder: (eşleyicilere giriş bayt sayısı / hive.exec.reducers.bytes.per.reducer).

Varsayılan ayarlarda bu örnek dört azaltıcıdır.

parametresi, hive.exec.reducers.bytes.per.reducer azaltıcı başına işlenen bayt sayısını belirtir. Varsayılan değer 64 MB'tır. Bu değerin aşağı ayarlanması paralelliği artırır ve performansı artırabilir. Bu ayarın çok düşük olması da çok fazla azaltıcıya neden olabilir ve bu da performansı olumsuz etkileyebilir. Bu parametre, belirli veri gereksinimlerinize, sıkıştırma ayarlarınıza ve diğer çevresel faktörlere dayanır.

  1. Parametresini değiştirmek için Hive Yapılandırmaları sekmesine gidin ve Ayarlar sayfasında Azaltıcı Başına Veri parametresini bulun.

    Apache Ambari Data per Reducer.

  2. Değeri 128 MB (134.217.728 bayt) olarak değiştirmek için Düzenle'yi seçin ve ardından kaydetmek için Enter tuşuna basın.

    Ambari Data per Reducer - edited.

    1.024 MB giriş boyutu ve azaltıcı başına 128 MB veri verildiğinde sekiz azaltıcı vardır (1024/128).

  3. Azaltıcı Başına Veri parametresi için yanlış bir değer, çok sayıda azaltıcıya neden olabilir ve sorgu performansını olumsuz etkileyebilir. En fazla azaltıcı sayısını sınırlamak için uygun bir değere ayarlayın hive.exec.reducers.max . Varsayılan değer 1009'dur.

Paralel yürütmeyi etkinleştirme

Hive sorgusu bir veya daha fazla aşamada yürütülür. Bağımsız aşamalar paralel olarak çalıştırılabilirse, bu sorgu performansını artırır.

  1. Paralel sorgu yürütmeyi etkinleştirmek için Hive Yapılandırma sekmesine gidin ve özelliğini arayın hive.exec.parallel . Varsayılan değer olarak yanlış kullanılır. Değeri true olarak değiştirin ve enter tuşuna basarak değeri kaydedin.

  2. Paralel çalıştırılacak iş sayısını sınırlamak için özelliğini değiştirin hive.exec.parallel.thread.number . Varsayılan değer 8'dir.

    Apache Hive exec parallel display.

Vektörleştirmeyi etkinleştirme

Hive, verileri satır satır işler. Vektörleştirme, Hive'ı tek seferde bir satır yerine 1.024 satırlık bloklar halinde verileri işlemeye yönlendirir. Vektörleştirme yalnızca ORC dosya biçimi için geçerlidir.

  1. Vektörleştirilmiş sorgu yürütmeyi etkinleştirmek için Hive Yapılandırmaları sekmesine gidin ve parametresini hive.vectorized.execution.enabled arayın. Hive 0.13.0 veya üzeri için varsayılan değer doğrudur.

  2. Sorgunun azaltma tarafında vektörleştirilmiş yürütmeyi etkinleştirmek için parametresini hive.vectorized.execution.reduce.enabled true olarak ayarlayın. Varsayılan değer olarak yanlış kullanılır.

    Apache Hive vectorized execution.

Maliyet tabanlı iyileştirmeyi (CBO) etkinleştirme

Hive, varsayılan olarak en uygun sorgu yürütme planını bulmak için bir dizi kural izler. Maliyet tabanlı iyileştirme (CBO), sorgu yürütmek için birden çok planı değerlendirir. Her plana bir maliyet atar ve ardından sorgu yürütmek için en ucuz planı belirler.

CBO'yı etkinleştirmek için Hive>Yapılandırmaları'na> gidin Ayarlar Maliyet Tabanlı İyileştiriciyi Etkinleştir'i bulun ve iki durumlu düğmeyi Açık olarak değiştirin.

HDInsight cost-based optimizer.

Aşağıdaki ek yapılandırma parametreleri, CBO etkinleştirildiğinde Hive sorgu performansını artırır:

  • hive.compute.query.using.stats

    True olarak ayarlandığında Hive, gibi count(*)basit sorguları yanıtlamak için meta veri deposunda depolanan istatistikleri kullanır.

    Apache Hive compute query using stats.

  • hive.stats.fetch.column.stats

    Sütun istatistikleri, CBO etkinleştirildiğinde oluşturulur. Hive, sorguları iyileştirmek için meta veri deposunda depolanan sütun istatistiklerini kullanır. Sütun sayısı yüksek olduğunda her sütun için sütun istatistiklerini getirme işlemi daha uzun sürer. False olarak ayarlandığında, bu ayar meta veri deposundan sütun istatistiklerini getirmeyi devre dışı bırakır.

    Apache Hive stats set column stats.

  • hive.stats.fetch.partition.stats

    Satır sayısı, veri boyutu ve dosya boyutu gibi temel bölüm istatistikleri meta veri deposunda depolanır. true olarak ayarlanırsa bölüm istatistikleri meta veri deposundan getirilir. False olduğunda, dosya boyutu dosya sisteminden getirilir. Satır sayısı da satır şemasından getirilir.

    Hive stats set partition stats.

Daha fazla bilgi için Azure'da Analiz Blogu'ndaki Hive Maliyet Tabanlı İyileştirme blog gönderisine bakın

Ara sıkıştırmayı etkinleştirme

Eşleme görevleri, azaltıcı görevler tarafından kullanılan ara dosyalar oluşturur. Ara sıkıştırma, ara dosya boyutunu küçültür.

Hadoop işleri genellikle G/Ç performans sorunlarına neden olur. Verilerin sıkıştırılması G/Ç ve genel ağ aktarımını hızlandırabilir.

Kullanılabilir sıkıştırma türleri şunlardır:

Biçimlendir Araç Algoritma Dosya Uzantısı Bölünebilir mi?
Gzip Gzip DEFLATE .gz Hayır
Bzip2 Bzip2 Bzip2 .bz2 Yes
LZO Lzop LZO .lzo Evet, dizinlenmişse
Çabuk Yok Çabuk Çabuk Hayır

Genel bir kural olarak, sıkıştırma yöntemi splittable'ın olması önemlidir, aksi takdirde birkaç eşleyici oluşturulur. Giriş verileri metinse en bzip2 iyi seçenektir. ORC biçimi için Snappy en hızlı sıkıştırma seçeneğidir.

  1. Ara sıkıştırmayı etkinleştirmek için Hive Yapılandırmaları sekmesine gidin ve parametresini hive.exec.compress.intermediate true olarak ayarlayın. Varsayılan değer olarak yanlış kullanılır.

    `Hive exec compress intermediate`.

    Not

    Ara dosyaları sıkıştırmak için, codec'in yüksek sıkıştırma çıkışı olmasa bile daha düşük CPU maliyetine sahip bir sıkıştırma codec'i seçin.

  2. Ara sıkıştırma codec'ini ayarlamak için veya mapred-site.xml dosyasına özel özelliği mapred.map.output.compression.codechive-site.xml ekleyin.

  3. Özel ayar eklemek için:

    a. Hive>Yapılandırmaları>Gelişmiş>Özel hive-sitesine gidin.

    b. Özel hive-site bölmesinin alt kısmındaki Özellik Ekle... öğesini seçin.

    c. Özellik Ekle penceresinde anahtar olarak ve org.apache.hadoop.io.compress.SnappyCodec değer olarak girinmapred.map.output.compression.codec.

    d. Ekle'yi seçin.

    `Apache Hive custom property add`.

    Bu ayar, Snappy sıkıştırmasını kullanarak ara dosyayı sıkıştırır. Özellik eklendikten sonra Özel hive-site bölmesinde görünür.

    Not

    Bu yordam dosyayı değiştirir $HADOOP_HOME/conf/hive-site.xml .

Son çıkışı sıkıştır

Son Hive çıkışı da sıkıştırılabilir.

  1. Son Hive çıkışını sıkıştırmak için Hive Yapılandırmaları sekmesine gidin ve parametresini hive.exec.compress.output true olarak ayarlayın. Varsayılan değer olarak yanlış kullanılır.

  2. Çıkış sıkıştırma codec'ini seçmek için, özel özelliği önceki bölümün 3. adımında açıklandığı gibi Özel hive-site bölmesine ekleyin mapred.output.compression.codec .

    Apache Hive custom property add2.

Kurgusal yürütmeyi etkinleştirme

Tahmini yürütme, yavaş çalışan görev izleyicisini algılamak ve reddetmek için belirli sayıda yinelenen görevi başlatır. Tek tek görev sonuçlarını iyileştirerek genel iş yürütmeyi geliştirirken.

Büyük miktarda giriş içeren uzun süre çalışan MapReduce görevleri için tahmini yürütme açık olmamalıdır.

  • Tahmini yürütmeyi etkinleştirmek için Hive Yapılandırmaları sekmesine gidin ve parametresini hive.mapred.reduce.tasks.speculative.execution true olarak ayarlayın. Varsayılan değer olarak yanlış kullanılır.

    `Hive mapred reduce tasks speculative execution`.

Dinamik bölümleri ayarlama

Hive, her bölümü önceden tanımlamadan bir tabloya kayıt eklerken dinamik bölümler oluşturulmasına olanak tanır. Bu özellik güçlü bir özelliktir. Ancak çok sayıda bölüm oluşturulmasına neden olabilir. Ve her bölüm için çok sayıda dosya.

  1. Hive'ın dinamik bölümler hive.exec.dynamic.partition yapması için parametre değeri true (varsayılan) olmalıdır.

  2. Dinamik bölüm modunu katı olarak değiştirin. Katı modda en az bir bölümün statik olması gerekir. Bu ayar WHERE yan tümcesinde bölüm filtresi olmayan sorguları engeller, yani tüm bölümleri tarayen sorguları kesin olarak engeller. Hive Yapılandırmaları sekmesine gidin ve katı olarak ayarlayınhive.exec.dynamic.partition.mode. Varsayılan değer çekişsizdir.

  3. Oluşturulacak dinamik bölüm sayısını sınırlamak için parametresini hive.exec.max.dynamic.partitions değiştirin. Varsayılan değer 5000'dir.

  4. Düğüm başına toplam dinamik bölüm sayısını sınırlamak için öğesini değiştirin hive.exec.max.dynamic.partitions.pernode. Varsayılan değer 2000'dir.

Yerel modu etkinleştirme

Yerel mod, Hive'ın bir işin tüm görevlerini tek bir makinede gerçekleştirmesini sağlar. Veya bazen tek bir işlemde. Bu ayar, giriş verileri küçükse sorgu performansını artırır. Sorgular için görevleri başlatma yükü, genel sorgu yürütmesinin önemli bir yüzdesini tüketir.

Yerel modu etkinleştirmek için Ara sıkıştırmayı hive.exec.mode.local.auto etkinleştir bölümünün 3. adımında açıklandığı gibi parametresini Özel hive-site paneline ekleyin.

Apache Hive exec mode local auto.

Tek MapReduce MultiGROUP BY ayarlama

Bu özellik true olarak ayarlandığında, ortak gruplandırma anahtarları olan multiGROUP BY sorgusu tek bir MapReduce işi oluşturur.

Bu davranışı etkinleştirmek için Ara sıkıştırmayı hive.multigroupby.singlereducer etkinleştir bölümünün 3. adımında açıklandığı gibi parametresini Özel hive-site bölmesine ekleyin.

Hive set single MapReduce MultiGROUP BY.

Ek Hive iyileştirmeleri

Aşağıdaki bölümlerde, ayarlayabileceğiniz Hive ile ilgili ek iyileştirmeler açıklanmaktadır.

Birleştirme iyileştirmeleri

Hive'daki varsayılan birleştirme türü karışık birleştirmedir. Hive'da özel eşleyiciler girişi okur ve bir birleştirme anahtarı/değer çiftini ara bir dosyaya yayar. Hadoop bu çiftleri bir karıştırma aşamasında sıralar ve birleştirir. Bu karıştırma aşaması pahalıdır. Verilerinize göre doğru birleştirmeyi seçmek performansı önemli ölçüde artırabilir.

Birleştirme Türü Ne zaman Nasıl? Hive ayarları Açıklamalar
Birleştirmeyi Karıştır
  • Varsayılan seçenek
  • Her zaman çalışır
  • Tabloların bir bölümünden okur
  • Birleştirme anahtarında demetler ve sıralamalar
  • Her azaltmaya bir demet gönderir
  • Birleştirme Azaltma tarafında yapılır
Önemli bir Hive ayarı gerekmez Her seferinde çalışır
Harita Katılımı
  • Bir tablo belleğe sığabilir
  • Küçük tabloyu bellek karma tablosuna okur
  • Büyük dosyanın bir bölümünden Akışlar
  • Karma tablodan her kaydı birleştirir
  • Birleştirmeler yalnızca eşleyici tarafından ılır
hive.auto.confvert.join=true Hızlı, ancak sınırlı
Birleştirme Demetlerini Sırala Her iki tablo da şu şekildeyse:
  • Aynı şekilde sıralanmış
  • Aynı demetle
  • Sıralanmış/demetlenmiş sütunda birleştirme
Her işlem:
  • Her tablodan bir demet okur
  • Satırı en düşük değerle işler
hive.auto.convert.sortmerge.join=true Verimli

Yürütme altyapısı iyileştirmeleri

Hive yürütme altyapısını iyileştirmeye yönelik ek öneriler:

Ayar Önerilir HDInsight Varsayılanı
hive.mapjoin.hybridgrace.hashtable True = daha güvenli, daha yavaş; false = daha hızlı yanlış
tez.am.resource.memory.mb Çoğu için 4 GB üst sınır Otomatik Ayarlı
tez.session.am.dag.submit.timeout.secs 300+ 300
tez.am.container.idle.release-timeout-min.millis 20000+ 10000
tez.am.container.idle.release-timeout-max.millis 40000+ 20000

Sonraki adımlar