Aracılığıyla paylaş


Azure HDInsight'ta Apache HBase önerileri

Bu makalede, Azure HDInsight'ta Apache HBase performansını iyileştirmenize yardımcı olacak çeşitli öneriler açıklanmaktadır.

En son yazılan verileri okumak için HBase'i iyileştirme

Kullanım örneğiniz HBase'den en son yazılan verileri okumayı içeriyorsa, bu öneri size yardımcı olabilir. Yüksek performans için, HBase okumalarının uzak depolama yerine uygulamasından memstoresunulmaları en uygunudur.

Sorgu önerisi, bir tablodaki > belirli bir sütun ailesi için %75'lik bir okumanın adresinden memstoresunulduğunu gösterir. Bu gösterge, son dosyada memstore temizleme işlemi gerçekleşse bile bu dosyaya erişilmesi ve önbellekte olması gerektiğini gösterir. Veriler ilk olarak sisteme yazılır memstore ve buradaki son verilere erişir. İç HBase boşaltma iş parçacıklarının belirli bir bölgenin 128M (varsayılan) boyuta ulaştığını algılaması ve temizleme işlemini tetikleyebileceği bir olasılık vardır. Bu senaryo, boyutu 128M civarında olduğunda memstore yazılmış olan en son veriler için bile gerçekleşir. Bu nedenle, bu son kayıtların daha sonra okunmasının için yerine memstorebir dosyanın okunmasını gerekebilir. Bu nedenle, yakın zamanda temizlenen son verilerin bile önbellekte bulunabilmesini iyileştirmek en iyisidir.

Önbellekteki son verileri iyileştirmek için aşağıdaki yapılandırma ayarlarını göz önünde bulundurun:

  1. hbase.rs.cacheblocksonwrite seçeneğini true olarak ayarlayın. HDInsight HBase'deki bu varsayılan yapılandırmadır true, bu nedenle olarak sıfırlanmadığından falsedenetleyin.

  2. Sıkıştırmanın başlamasını hbase.hstore.compactionThreshold önlemek için değeri artırın. Varsayılan olarak bu 3 değerine ayarlanır. gibi 10daha yüksek bir değere artırabilirsiniz.

  3. 2. adımı izler ve compactionThreshold ayarlarsanız, örneğin 100daha yüksek bir değere geçin hbase.hstore.compaction.max ve yapılandırmanın değerini hbase.hstore.blockingStoreFiles örneğin 300daha yüksek bir değere yükseltin.

  4. Yalnızca son verileri okumanız gerektiğinden eminseniz yapılandırmayı AÇI olarak ayarlayınhbase.rs.cachecompactedblocksonwrite. Bu yapılandırma, sıkıştırma gerçekleşse bile verilerin önbellekte kaldığını sisteme bildirir. Yapılandırmalar aile düzeyinde de ayarlanabilir.

    HBase Kabuğu'nda aşağıdaki komutu çalıştırarak yapılandırmayı ayarlayın hbase.rs.cachecompactedblocksonwrite :

    alter '<TableName>', {NAME => '<FamilyName>', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '300'}}
    
  5. Blok önbelleği, bir tablodaki belirli bir aile için kapatılabilir. En son veri okuması olan aileler için açık olduğundan emin olun. Varsayılan olarak, blok önbelleği bir tablodaki tüm aileler için AÇILDI. Bir aile için blok önbelleğini devre dışı bırakmış olmanız ve etkinleştirmeniz gerekiyorsa hbase kabuğundan alter komutunu kullanın.

    Bu yapılandırmalar, verilerin önbellekte kullanılabilir olmasını ve son verilerin sıkıştırılmamasını sağlamaya yardımcı olur. Senaryonuzda bir TTL mümkünse tarih katmanlı sıkıştırmayı kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz . Apache HBase Başvuru Kılavuzu: Tarih Katmanlı Sıkıştırma

Temizleme kuyruğunun en iyi duruma getirme

Bu öneri, HBase temizlemelerinin ayarlanması gerekebileceğini gösterir. Temizleme işleyicileri için geçerli yapılandırma, temizleme işlemlerinin yavaşlanmasına neden olabilecek yazma trafiğiyle başa çıkabilecek kadar yüksek olmayabilir.

Bölge sunucusu kullanıcı arabiriminde temizleme kuyruğunun 100'e kadar artıp artmadığını görebilirsiniz. Bu eşik, temizlemelerin yavaş olduğunu gösterir ve yapılandırmayı hbase.hstore.flusher.count ayarlamanız gerekebilir. Varsayılan olarak değer 2'dir. Maksimum flusher iş parçacıklarının 6'nın ötesine geçmediğinden emin olun.

Ayrıca, bölge sayısını ayarlamayla ilgili bir öneriniz olup olmadığını denetleyin. Evet ise, daha hızlı temizlemeye yardımcı olup olmadığını görmek için bölge ayarlamayı denemenizi öneririz. Aksi takdirde, boşaltma iş parçacıklarını ayarlamak size yardımcı olabilir.

Bölge sayısı ayarlama

Bölge sayısı ayarlama önerisi, HBase'in güncelleştirmeleri engellediğini ve bölge sayısının en iyi şekilde desteklenen yığın boyutundan daha fazla olabileceğini gösterir. Yığın boyutunu, memstore boyutunu ve bölge sayısını ayarlayabilirsiniz.

Örnek bir senaryo olarak:

  • Bölge sunucusunun yığın boyutunun 10 GB olduğunu varsayalım. Varsayılan olarak hbase.hregion.memstore.flush.size değeridir 128M. için hbase.regionserver.global.memstore.size varsayılan değerdir 0.4. Bu da 10 GB'ın 4 GB'ının (genel olarak) için memstore ayrıldığı anlamına gelir.

  • Yazma yükünün tüm bölgelerde eşit bir dağılımı olduğunu varsayalım ve her bölgenin 128 MB'a kadar büyüdüğünü varsayarak bu kurulumdaki en fazla bölge sayısı bölgelerdir 32 . Belirli bir bölge sunucusu 32 bölgeye sahip olacak şekilde yapılandırılmışsa, sistem güncelleştirmeleri engellemeyi daha iyi önler.

  • Bu ayarlar gerçekleştiğinde bölge sayısı 100'dür. 4 GB genel memstore artık 100 bölgeye ayrılmıştır. Bu nedenle, her bölge için memstoreyalnızca 40 MB alır. Yazma işlemleri tekdüzen olduğunda sistem sık sık boşaltma yapar ve siparişin < boyutu 40 MB'ın daha küçüktür. Çok sayıda boşaltma iş parçacığına sahip olmak, temizleme hızını hbase.hstore.flusher.countartırabilir.

Danışmanlık, güncelleştirmelerin engellenmesini önlemek için sunucu başına bölge sayısını, yığın boyutunu ve genel memstore boyut yapılandırmasını ve temizleme iş parçacıklarının ayarlanmasını yeniden gözden geçirmenin iyi olacağı anlamına gelir.

Sıkıştırma kuyruğu ayarlama

HBase sıkıştırma kuyruğu 2000'den fazla büyürse ve düzenli aralıklarla gerçekleşirse, sıkıştırma iş parçacıklarını daha büyük bir değere artırabilirsiniz.

Sıkıştırma için çok fazla sayıda dosya olduğunda, dosyaların Azure dosya sistemiyle nasıl etkileşime geçtiğiyle ilgili daha fazla yığın kullanımına yol açabilir. Bu nedenle sıkıştırmayı mümkün olan en kısa sürede tamamlamak daha iyidir. Eski kümelerde bazı durumlarda azaltmayla ilgili sıkıştırma yapılandırmaları daha yavaş sıkıştırma hızına yol açabilir.

ve hbase.hstore.compaction.throughput.higher.boundyapılandırmalarını hbase.hstore.compaction.throughput.lower.bound denetleyin. Zaten 50M ve 100M olarak ayarlandıysa, olduğu gibi bırakın. Ancak, bu ayarları daha düşük bir değerle yapılandırdıysanız (eski kümelerde bu durum geçerliydi), sınırları sırasıyla 50M ve 100M olarak değiştirin.

Yapılandırmalar ve hbase.regionserver.thread.compaction.large 'tir hbase.regionserver.thread.compaction.small (varsayılan değerler her birinde 1'tir). Bu yapılandırma için en büyük değeri 3'ten küçük olacak şekilde sınırla.

Tam tablo taraması

Tam tablo tarama önerisi, verilen taramaların %75'inden fazlasının tam tablo/bölge taramaları olduğunu gösterir. Sorgu performansını geliştirmek için kodunuzun taramaları çağırma şeklini yeniden ziyaret edebilirsiniz. Aşağıdaki uygulamaları göz önünde bulundurun:

  • Her tarama için uygun başlangıç ve durdurma satırını ayarlayın.

  • Tek bir tarama çağrısında farklı aralıkları sorgulayabilmeniz için MultiRowRangeFilter API'sini kullanın. Daha fazla bilgi için Bkz . MultiRowRangeFilter API belgeleri.

  • Tam tablo veya bölge taramasına ihtiyaç duyduğunuz durumlarda, önbelleği kullanan diğer sorguların sık erişimli blokları çıkarmaması için bu sorgular için önbellek kullanımından kaçınma olasılığının olup olmadığını denetleyin. Taramaların önbelleği kullanmadığından emin olmak için, kodunuzda setCaching(false) seçeneğiyle tarama API'sini kullanın:

    scan#setCaching(false)
    

Sonraki adımlar

Ambari kullanarak Apache HBase'i iyileştirme