Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden verschillende adviezen beschreven om u te helpen de Prestaties van Apache HBase in Azure HDInsight te optimaliseren.
HBase optimaliseren om laatst geschreven gegevens te lezen
Als uw use-case betrekking heeft op het lezen van de meest recent geschreven gegevens van HBase, kan dit advies u helpen. Voor hoge prestaties is het optimaal dat HBase-leesbewerkingen worden geleverd vanuit memstore, in plaats van de externe opslag.
Het queryadvies geeft aan dat voor een bepaalde kolomfamilie in een tabel > 75% van de leesbewerkingen afkomstig zijn van memstore. Deze indicator suggereert dat, zelfs als er een flush plaatsvindt op het memstore, het recente bestand geopend moet worden en dat het in de cache moet staan. De gegevens worden eerst naar memstore geschreven, waarna het systeem daar toegang krijgt tot de recente gegevens. Er is een kans dat de interne HBase flush-draadjes detecteren dat een bepaalde regio 128M (standaard) in grootte heeft bereikt en daardoor een flush kunnen initiëren. Dit scenario gebeurt zelfs met de meest recente gegevens die zijn geschreven toen de grootte van de memstore ongeveer 128M was. Daarom kan een latere leesbewerking van deze recente records een bestand lezen vereisen in plaats van vanuit memstore. Daarom is het raadzaam om te optimaliseren dat zelfs recente gegevens die onlangs zijn leeggemaakt, zich in de cache kunnen bevinden.
Houd rekening met de volgende configuratie-instellingen om de recente gegevens in de cache te optimaliseren:
Stel
hbase.rs.cacheblocksonwritein optrue. Deze standaardconfiguratie in HDInsight HBase istrue, dus controleer of deze niet is teruggezet naarfalse.Verhoog de
hbase.hstore.compactionThresholdwaarde zodat u kunt voorkomen dat de compressie wordt geactiveerd. Standaard is deze waarde ingesteld op3. U kunt deze verhogen naar een hogere waarde, zoals10.Als u stap 2 volgt en de compactionThreshold instelt, wijzig dan
hbase.hstore.compaction.maxnaar een hogere waarde, bijvoorbeeld100, en verhoog ook de waarde van de configuratiehbase.hstore.blockingStoreFilesnaar bijvoorbeeld300.Als u zeker weet dat u alleen de recente gegevens moet lezen, stelt u
hbase.rs.cachecompactedblocksonwritede configuratie in op AAN. Deze configuratie vertelt het systeem dat, zelfs als de compressie plaatsvindt, de gegevens in de cache blijven. De configuraties kunnen ook op gezinsniveau worden ingesteld.Voer in de HBase Shell de volgende opdracht uit om de configuratie in te stellen
hbase.rs.cachecompactedblocksonwrite:alter '<TableName>', {NAME => '<FamilyName>', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '300'}}Blokcache kan worden uitgeschakeld voor een bepaalde familie in een tabel. Zorg ervoor dat deze functie is ingeschakeld voor gezinnen met de meest recente gegevensleesbewerkingen. Blokcache is standaard ingeschakeld voor alle families in een tabel. Als u de blokcache voor een gezin hebt uitgeschakeld en deze moet inschakelen, gebruikt u de opdracht Alter van de hbase-shell.
Deze configuraties helpen ervoor te zorgen dat de gegevens beschikbaar zijn in de cache en dat de recente gegevens niet worden gecomprimeerd. Als een TTL mogelijk is in uw geval, overweeg dan het gebruik van datum-gebaseerde compactie. Voor meer informatie, zie de Apache HBase Referentiegids: Datum-gebaseerde gelaagde compactie
De wachtrij voor het doorspoelen optimaliseren
Dit advies geeft aan dat HBase flush-operaties mogelijk moeten worden afgestemd. De huidige configuratie voor flush-handlers is mogelijk niet hoog genoeg om schrijfverkeer te verwerken, wat kan leiden tot vertraging van flush-operaties.
In de gebruikersinterface van de regioserver ziet u of de flush-wachtrij groter wordt dan 100. Deze drempelwaarde geeft aan dat de leegmaken traag zijn en dat u de hbase.hstore.flusher.count configuratie mogelijk moet afstemmen. De waarde is standaard 2. Zorg ervoor dat de maximale flusher-threads niet hoger zijn dan 6.
Kijk ook of u een aanbeveling hebt voor het afstemmen van het aantal regio's. Zo ja, dan raden we u aan om het afstemmen van de regio uit te voeren om te zien of dat helpt bij het sneller leegmaken. Anders kan het afstemmen van de flusher-threads u helpen.
Afstellen van regio-aantal
Het afstemmingsadvies voor regioaantal geeft aan dat HBase updates heeft geblokkeerd en het aantal regio's kan groter zijn dan de optimaal ondersteunde heapgrootte. U kunt de heapgrootte, memstore grootte en het aantal regio's afstemmen.
Als voorbeeldscenario:
Stel dat de heap-grootte voor de regioserver 10 GB is.
hbase.hregion.memstore.flush.sizeDe standaardwaarde is128M. De standaardwaarde ishbase.regionserver.global.memstore.size0.4. Dit betekent dat uit de 10 GB 4 GB wordt toegewezenmemstore(wereldwijd).Stel dat er een gelijkmatige verdeling is van de schrijfbelasting voor alle regio's en ervan uitgaande dat elke regio groeit tot aan 128 MB, dan is het maximaal aantal regio's in deze opstelling
32regio's. Als een bepaalde regioserver is geconfigureerd voor 32 regio's, voorkomt het systeem dat updates worden geblokkeerd.Met deze instellingen is het aantal regio's 100. Het 4-GB globale
memstoreis nu verdeeld over 100 regio's. Dus in feite krijgt elke regio slechts 40 MB voormemstore. Wanneer de schrijfbewerkingen uniform zijn, wordt het systeem regelmatig leeggemaakt en wordt de order < 40 MB kleiner. Het hebben van veel flusher threads kan de spoelsnelheidhbase.hstore.flusher.countverhogen.
Het advies betekent dat het verstandig is om het aantal regio's per server, de heapgrootte en de configuratie van de globale memstore grootte te herzien, samen met het afstemmen van flush threads om te voorkomen dat updates worden geblokkeerd.
Afstemmen van compressiewachtrij
Als de HBase-compressiewachtrij groter wordt dan 2000 en periodiek plaatsvindt, kunt u de compressiethreads verhogen naar een grotere waarde.
Wanneer er een overmatig aantal bestanden is voor compressie, kan dit leiden tot meer heapgebruik met betrekking tot de interactie van de bestanden met het Azure-bestandssysteem. Het is dus beter om de verdichting zo snel mogelijk af te ronden. Soms kunnen compactie-instellingen in oudere clusters die betrekking hebben op throttling leiden tot een tragere compactiesnelheid.
Controleer de configuraties hbase.hstore.compaction.throughput.lower.bound en hbase.hstore.compaction.throughput.higher.bound. Als ze al zijn ingesteld op 50 M en 100M, laat u ze staan zoals het is. Als u deze instellingen echter hebt geconfigureerd voor een lagere waarde (wat het geval was bij oudere clusters), wijzigt u de limieten respectievelijk in 50M en 100M.
De configuraties zijn hbase.regionserver.thread.compaction.small en hbase.regionserver.thread.compaction.large (de standaardwaarden zijn elk 1).
De maximumwaarde voor deze configuratie moet kleiner zijn dan 3.
Volledige tabelscan
Het advies voor een volledige tabelscan geeft aan dat meer dan 75% van de uitgegeven scans volledige tabel-/regioscans zijn. U kunt teruggaan naar de manier waarop uw code de scans aanroept om de queryprestaties te verbeteren. Houd rekening met de volgende procedures:
Stel de juiste begin- en eindrij in voor elke scan.
Gebruik de MultiRowRangeFilter-API , zodat u in één scanoproep verschillende bereiken kunt opvragen. Zie de documentatie voor MultiRowRangeFilter-API voor meer informatie.
In gevallen waarin u een volledige tabel- of regioscan nodig hebt, controleert u of er een mogelijkheid is om cachegebruik voor deze query's te voorkomen, zodat andere query's die gebruikmaken van de cache de blokken die hot zijn, mogelijk niet verwijderen. Gebruik de scan-API met de optie setCaching(false) in uw code om ervoor te zorgen dat de scans geen cache gebruiken:
scan#setCaching(false)