Als je op EC2 draait, kun je vaak niet winnen als het gaat om instantietypen. Een van de meer kosteneffectieve typen die beschikbaar zijn, is de c1.xlarge. Het heeft genoeg CPU om verdichtingen aan te kunnen, een behoorlijke hoeveelheid schijf en een hoge netwerk-I/O. We hebben echter geconstateerd dat het relatief lage geheugen van 7 GB op de c1.xlarge vaak leidt tot stabiliteitsproblemen in zeer gelijktijdige HBase-clusters. Hoewel er andere, duurdere opties zijn, helpt deze HBase-zelfstudie je om het meeste uit je c1.xlarge RegionServers te halen.
1. Verminder het aantal regio's per RegionServer
Idealiter zou u minder dan 100 regio's per RegionServer moeten hebben . De geheugenopslag is verdeeld voor gebruik door alle actieve regio's en elke regio voegt (standaard) 2 MB geheugen toe voor de MSLAB. Als u dit aantal verlaagt, verloopt alles soepeler, en niet alleen vanuit geheugenoogpunt.
2. Geheugen stelen van andere diensten
U zou zeker geen TaskTracker moeten uitvoeren met uw RegionServer op deze instantietypen, maar u gebruikt hoogstwaarschijnlijk een lokale DataNode. Een typische configuratie vereist 1 GB geheugen voor een DataNode, maar we hebben geconstateerd dat je in veel gevallen niet zoveel nodig hebt. Controleer uw statistieken voordat u dit uitrolt, maar we waren volkomen veilig de DataNode-heap terug te brengen tot 400 MB . Deze mooie brok van 624 MB helpt HBase een beetje verder te komen.
3. MSLAB afstemmen of uitschakelen
Als u na het stelen van geheugen en het inkorten van regio's nog steeds problemen ondervindt, kunt u een stap verder gaan. Zoals ik al zei, voegt de MSLAB-functie standaard 2 MB heap overhead toe voor elke regio. U kunt deze buffer verlagen met hbase.hregion.memstore.mslab.chunksize
. Hoe lager u gaat, hoe minder effectief het is, maar hoe minder geheugenoverhead. Schakel het helemaal uit met hbase.hregion.memstore.mslab.enabled
.
4. Wees agressief met caching en batching
Caching (Scan#setCaching(int)
) en batchverwerking (Scan#setBatch(int)
) zijn geweldig voor het beperken van het effect van netwerklatentie op grote scans. Helaas hebben ze ook meer geheugen nodig aan zowel de client- als de serverkant. Houd rekening met de snelheidsafweging, maar geniet van een beetje meer stabiliteit door deze af te stemmen , zo dicht mogelijk bij een waarde van 1 als nodig is.
De RegionServer moet ook voldoende geheugen hebben om al uw gelijktijdige schrijfbewerkingen af te handelen. Als u uw schrijfbewerkingen zwaar in batches uitvoert of een paar zeer grote celwaarden verzendt, loopt u waarschijnlijk OutOfMemoryExceptions tegen het lijf. Verlaag hier ook uw batching, of zoek op een andere manier een manier om de grootte van uw celwaarden te verkleinen.
5. Belasting regelen vanuit Hadoop
Als u hadoop-taken uitvoert op uw HBase-gegevens, voert u in feite veel grote scans uit. In een HBase MapReduce-taak wordt elke regio een mapper. Als u meer dan 1 regio per RegionServer heeft, is de kans groot dat u op een gegeven moment een paar mappers tegelijkertijd dezelfde RegionServer zult laten scannen. Elk van deze scans neemt geheugen-, schijf- en CPU-bronnen in beslag en wanneer er meerdere worden opgebouwd, kan dit wat pijn veroorzaken.
hbase.regionserver.handler.count
verlagen zal helpen het aantal actieve verbindingen te beperken die geheugen in beslag nemen, maar u kunt nog steeds een probleem hebben als alle handlers grote scans van de volledige regio afhandelen. Met onze extensie TableInputFormat kunt u gemakkelijk bepalen hoeveel gelijktijdige mappers worden uitgevoerd op een enkele RegionServer , wat een voorspelbaarder geheugengebruik oplevert.
Als u vanaf een reducer naar HBase schrijft, wilt u daar ook de partitionering regelen. Dit is eenvoudig te implementeren met Hadoop's Partitioner
interface, met HBase's HBaseAdmin
interface die de regio levert aan RegionServer-toewijzingen.
HBase uitvoeren met weinig geheugen is moeilijk, maar niet onmogelijk
Met deze tips in de hand zou u goed op weg moeten zijn om operaties in uw omgeving met weinig geheugen te overleven. Het kan frustrerend zijn om te vechten voor elke megabyte geheugen in een tijdperk van extreem goedkope, snelle RAM. Maar volg deze tips en uw CFO zal u dankbaar zijn voor het optimaal benutten van dit kosteneffectieve type instantie. Voor degenen met wat meer financiële vrijheid:we zullen de impact van Amazon's nieuwe I2-instantietypes in een toekomstige post onderzoeken . Dus blijf op de hoogte!
Dit artikel verscheen oorspronkelijk op dev.hubspot.com