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 memstore
sunulmaları en uygunudur.
Sorgu önerisi, bir tablodaki > belirli bir sütun ailesi için %75'lik bir okumanın adresinden memstore
sunulduğ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 memstore
bir 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:
hbase.rs.cacheblocksonwrite
seçeneğinitrue
olarak ayarlayın. HDInsight HBase'deki bu varsayılan yapılandırmadırtrue
, bu nedenle olarak sıfırlanmadığındanfalse
denetleyin.Sıkıştırmanın başlamasını
hbase.hstore.compactionThreshold
önlemek için değeri artırın. Varsayılan olarak bu3
değerine ayarlanır. gibi10
daha yüksek bir değere artırabilirsiniz.2. adımı izler ve compactionThreshold ayarlarsanız, örneğin
100
daha yüksek bir değere geçinhbase.hstore.compaction.max
ve yapılandırmanın değerinihbase.hstore.blockingStoreFiles
örneğin300
daha yüksek bir değere yükseltin.Yalnızca son verileri okumanız gerektiğinden eminseniz yapılandırmayı AÇI olarak ayarlayın
hbase.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'}}
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ğeridir128M
. içinhbase.regionserver.global.memstore.size
varsayılan değerdir0.4
. Bu da 10 GB'ın 4 GB'ının (genel olarak) içinmemstore
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çinmemstore
yalnı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.count
artı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.bound
yapı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)