Aracılığıyla paylaş


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 Arama yürütme altyapısı.

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

    İyileştirme - Apache Tez altyapısı.

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 tez.grouping.max-size ile tez.grouping.min-size parametrelerini bulun.

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

    Apache Ambari Tez gruplandırma boyutları.

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ı ayarla

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.

    Azaltıcı başına Apache Ambari Verileri.

  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.

    Azaltıcı Başına Ambari Verileri - düzenlendi.

    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 yanlıştı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 paralel görüntüleme.

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 yanlıştır.

    Apache Hive vektörleştirilmiş yürütme.

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ırma Ayarları'na> gidin ve Maliyet Tabanlı İyileştiriciyi Etkinleştir'i bulun, ardından iki durumlu düğmeyi Açık olarak değiştirin.

HDInsight maliyet tabanlı iyileştirici.

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.

    İstatistikleri kullanarak Apache Hive işlem sorgusu.

  • 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 istatistikleri sütun istatistiklerini ayarlar.

  • 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 istatistikleri bölüm istatistiklerini ayarlar.

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

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

Harita görevleri ara dosyalar oluşturur ve bu dosyalar azaltıcı görevler tarafından kullanılır. 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çim Araç Algoritma Dosya Uzantısı Bölünebilir mi?
Gzip Gzip DEFLATE (veri sıkıştırma algoritması) .gz Hayı
Bzip2 Bzip2 Bzip2 .bz2 Evet
LZO Lzop LZO .lzo Evet, dizinlenmişse
Çabuk Mevcut Değil Çabuk Çabuk Hayı

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 yanlıştır.

    'Hive exec compress intermediate'.

    Uyarı

    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, özel özelliği mapred.map.output.compression.codechive-site.xml veya mapred-site.xml dosyasına ekleyin.

  3. Özel ayar eklemek için:

    a. Hive>Yapılandırmaları>Gelişmiş>Özel hive-site yapısına gidin.

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

    ç. Özellik Ekle penceresinde, anahtar olarak mapred.map.output.compression.codec ve değer olarak org.apache.hadoop.io.compress.SnappyCodec girin.

    ö. Add (Ekle) seçeneğini belirleyin.

    'Apache Hive özel özellik ekleme'.

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

    Uyarı

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

Nihai çıktıyı 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 yanlıştır.

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

    Apache Hive özel özellik ekleme2.

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. Bireysel görev sonuçlarını optimize ederek genel iş yürütülmesini 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 yanlıştır.

    'Hive haritalama ve azaltma görevleri tahmini yürütme'.

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 parametreyi 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ı etkinleştir bölümünün 3. adımında açıklandığı gibi, hive.exec.mode.local.auto parametresini Özel hive-site paneline ekleyin.

Apache Hive exec modu yerel otomatik.

Tek bir MapReduce MultiGROUP BY ayarla

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ı etkinleştir bölümünün 3. adımında açıklandığı gibi hive.multigroupby.singlereducer parametresini Özel hive-site bölmesine ekleyin.

Hive kümesi, tek bir MapReduce çoklu GRUPLA BY işlemi.

Ekstra 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ı Yorumlar
Karışık Birleştirme
  • Varsayılan seçenek
  • Her zaman çalışır
  • Tabloların bir bölümünden okur
  • Birleştirme anahtarında kümeler ve sıralar
  • Her reduce'e bir veri kovası gönderir
  • Join işlemi Reduce aşamasında yapılır
Önemli bir Hive ayarı gerekmez Her seferinde çalışır
Harita Birleştirme
  • Bir tablo belleğe sığabilir
  • Küçük tabloyu bellek karma tablosuna okur
  • Büyük dosyanın bir kısmından veri akışı sağlanır.
  • Karma tablodan her kaydı birleştirir
  • Birleştirmeler yalnızca eşleyici tarafından ılır
hive.auto.convert.join=true Hızlı, ancak sınırlı
Birleştirme Demetlerini Sırala Her iki tablo da şu şekildeyse:
  • Aynı şekilde sıralanmış
  • Aynı kategoriye yerleştirildi
  • Sıralanmış/demetlenmiş sütunda birleştirme
Her işlem:
  • Her tablodan bir demet okur
  • En düşük değere sahip satırı 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:

Ayarlar Ö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+ 10.000
tez.am.container.idle.release-timeout-max.millis 40000+ 20000

Sonraki adımlar