sql >> Database >  >> NoSQL >> HBase

Apache HBase Do's en Don'ts

Ik heb onlangs een lezing gegeven in de LA Hadoop User Group over Apache HBase Do's en Don'ts. Het publiek was uitstekend en had zeer goed geïnformeerde en goed gearticuleerde vragen. Jody van Shopzilla was een uitstekende gastheer en ik ben hem veel dank verschuldigd voor het geven van de mogelijkheid om met meer dan 60 LA Hadoopers te spreken. Omdat niet iedereen in LA woont of de bijeenkomst kan halen, heb ik hier enkele van de meest opvallende punten samengevat. Voor degenen onder u met een drukke dag, hier is de tl;dr:

  • HBase is goed, maar geen RDBMS- of HDFS-vervanging
  • Goede configuratie betekent goede werking
  • Monitor monitor monitor monitor monitor

Wij bij Cloudera zijn grote fans van HBase. We houden van de technologie, we houden van de gemeenschap en we hebben ontdekt dat het uitstekend geschikt is voor veel toepassingen. Succesvol gebruik van HBase is goed gedocumenteerd en als gevolg daarvan overwegen veel organisaties of HBase geschikt is voor sommige van hun toepassingen. De aanleiding voor mijn lezing en deze vervolgblogpost is om enkele van de goede toepassingen voor HBase te verduidelijken, te waarschuwen voor sommige slechte toepassingen en belangrijke stappen voor een succesvolle HBase-implementatie te benadrukken.

Wanneer HBase gebruiken

De belangrijkste overweging bij het kijken naar HBase is dat, hoewel het een geweldige oplossing is voor veel problemen, het geen wondermiddel is. HBase is niet geoptimaliseerd voor klassieke transactionele toepassingen of zelfs relationele analyses. Het is ook geen volledige vervanging voor HDFS bij het uitvoeren van grote batches MapReduce. Bekijk enkele van de use-cases in dit bericht om een ​​idee te krijgen van welke applicaties geschikt zijn voor HBase en als je vragen hebt, ga je gang en post op de lijsten. Heb ik al gezegd dat de community fantastisch is?

Met dat voorbehoud uit de weg - waarom zou u HBase gebruiken? Als uw toepassing een variabel schema heeft waarbij elke rij iets anders is, moet u naar HBase kijken. Als voorbeeld het doen van een modelleringsoefening met behulp van een standaard relationeel schema; Als u kolommen niet snel genoeg kunt toevoegen en de meeste zijn NULL in elke rij, moet u HBase overwegen. Als u merkt dat uw gegevens zijn opgeslagen in collecties, bijvoorbeeld sommige metagegevens, berichtgegevens of binaire gegevens die allemaal op dezelfde waarde zijn gebaseerd, moet u HBase overwegen. Als u op sleutels gebaseerde toegang tot gegevens nodig hebt bij het opslaan of ophalen, moet u HBase overwegen.

Ondersteunende diensten

Ervan uitgaande dat u ervan overtuigd bent dat HBase geschikt is voor uw toepassing, volgen hier enkele tips waarmee u rekening moet houden bij de implementatie ervan. Er zijn een paar ondersteunende services die belangrijk zijn en een die vereist is. Als je ZooKeeper nog niet eerder hebt bekeken, is dit het moment. HBase gebruikt ZooKeeper voor verschillende gedistribueerde coördinatiediensten, zoals masterverkiezing. Terwijl HBase zich ontwikkelt en groeit, blijft het vertrouwen op ZooKeeper voor extra functionaliteit, waardoor het een belangrijk onderdeel van het systeem wordt. Bovendien moet u over de juiste netwerkservices beschikken, zoals NTP en DNS. HBase is afhankelijk van het feit dat alle knooppunten in het cluster nauw gesynchroniseerde klokken hebben en consistent naar elkaar verwijzen. Het gebruik van NTP en DNS zorgt ervoor dat u geen vreemd gedrag tegenkomt wanneer een knooppunt A denkt dat het morgen is en knooppunt B denkt dat het gisteren is. U voorkomt ook situaties waarin het hoofdknooppunt knooppunt C vertelt om een ​​regio te bedienen, maar knooppunt C zijn eigen naam niet kent en niet antwoordt. Het gebruik van NTP en DNS zal u veel kopzorgen besparen als u aan de slag gaat.

Ik heb gezegd dat de belangrijkste overweging bij het selecteren van HBase is om ervoor te zorgen dat je een use case hebt die past. Het belangrijkste dat u moet doen bij het gebruik van HBase, is om het systeem te bewaken. Monitoring is de sleutel tot succesvolle HBase-activiteiten. Zoals het geval is met veel gedistribueerde systemen, is HBase gevoelig voor trapsgewijze storingen. Als een node begint te wisselen, kan deze het contact met de master verliezen, waardoor een andere server de belasting oppakt en overbelast raakt. Die tweede server zal falen en de fout zal cascade zijn. U moet het geheugen, de CPU, de I/O en de netwerklatentie en bandbreedte op elk van uw HBase-knooppunten bewaken om er zeker van te zijn dat ze binnen gezonde parameters werken. Monitoring is de belangrijkste oefening om een ​​gezond HBase-cluster te laten werken.

Goede praktijken voor HBase-architectuur

Snel vooruit naar uw goed bewaakte HBase-cluster met een perfecte use-case, hier zijn enkele goede praktijken. Gebruik een sleutelvoorvoegsel dat goed wordt gedistribueerd op basis van uw gebruiksscenario. Als u uw sleutel voorvoegt met een tijdstempel of een vergelijkbare waarde die, wanneer gesorteerd, wordt opgeslagen of opgevraagd in een batch, dan zult u waarschijnlijk elke regioserver op zijn beurt overbelasten in plaats van de belasting gelijkmatig te verdelen. U moet het aantal regio's ook op een redelijk aantal houden, gebaseerd op de grootte van het geheugen en de hoeveelheid RAM, en de RegionServer JVM moet worden beperkt tot 12 GB Java-heap om lange GC-pauzes te minimaliseren. Een machine met 36 GB RAM waarop ook een DataNode-daemon draait, kan bijvoorbeeld ongeveer 100 regio's aan met actieve schrijfbewerkingen en een geheugenopslag van elk 48 MB. Dat biedt voldoende ruimte voor DataNode- en RegionServer-geheugenvereisten, Linux-bestandsbufferruimte en een redelijke flushgrootte voor elke RegionServer.

Enkele configuratie-aanbevelingen omvatten het uitschakelen van automatische compressie (standaard gebeurt dit elke 24 uur vanaf het moment dat u start HBase) en plan het om elke dag buiten de piekuren te draaien. U moet ook compressie configureren (zoals LZO) en expliciet de correct geconfigureerde HBase conf-directory in uw CLASSPATH plaatsen.

HBase NIET DOEN

We hebben een breed scala aan goede praktijken voor HBase behandeld. Er zijn ook enkele gebruikspatronen die u moet vermijden. Verwacht bijvoorbeeld niet dat u HBase gebruikt als een groothandelsvervanger voor al uw relationele databases. HBase is geweldig in veel dingen, maar het vervangt relationele databases niet. Om te beginnen spreekt het geen SQL, heeft het geen optimizer, ondersteunt het cross record-transacties of joins. Als u geen van deze in uw databasetoepassing gebruikt, zou HBase heel goed de perfecte oplossing kunnen zijn.

Wees voorzichtig bij het uitvoeren van gemengde workloads op een HBase-cluster. Wanneer u SLA's op HBase-toegang hebt, onafhankelijk van MapReduce-taken (bijvoorbeeld een transformatie in Pig en het verstrekken van gegevens vanuit HBase), voert u deze op afzonderlijke clusters uit. HBase is CPU- en geheugenintensief met sporadische grote sequentiële I/O-toegang, terwijl MapReduce-taken voornamelijk I/O-gebonden zijn met vast geheugen en sporadische CPU. Gecombineerd kunnen deze leiden tot onvoorspelbare latenties voor HBase- en CPU-conflicten tussen de twee. Een gedeeld cluster vereist ook minder taaksleuven per knoop punt om tegemoet te komen aan de HBase CPU-vereisten (meestal de helft van de slots op elk knoop punt die u zou toewijzen zonder HBase). Houd ook geheugenswap in de gaten. Als HBase begint te wisselen, is de kans groot dat het een hartslag zal missen en uit het cluster wordt verwijderd. Op een druk cluster kan dit een andere regio overbelasten, waardoor deze verwisselt en een cascade van storingen veroorzaakt.

Laatste gedachten

Nog een laatste advies voordat we het samenvatten. Gebruik bij het laden van HBase HFileOuputFormat als u laadt via een MapReduce-taak of een verzameling servers met batch-puts. Laden met een enkele client zal een bottleneck vormen voor die client en geen voordeel halen uit de schaalbaarheid die HBase biedt.

Samengevat, overweeg HBase wanneer u gegevens op sleutel laadt, gegevens zoekt op sleutel (of bereik), gegevens op sleutel weergeeft, gegevens opvraagt ​​op sleutel of wanneer u gegevens per rij opslaat die niet goed voldoen aan een schema.

Gebruiksvoorbeelden

  • Apache HBase:mogelijk gemaakt door HBase Wiki
  • Mozilla:Socorro naar HBase verplaatsen
  • Facebook:het nieuwe realtime berichtensysteem van Facebook:HBase
  • StumbleUpon:HBase bij StumbleUpon

  1. rangschikkingsbord in mongo met omringende spelers

  2. Redis hash paginering

  3. Gedeeltelijke indexen in mongodb / mangoest

  4. Redis publiceren-abonneren:levert Redis gegarandeerd de boodschap af, zelfs onder enorme stress?