Delen via


Het hulpprogramma Apache HBase HBCK2 gebruiken

In dit artikel leest u hoe u het HBase HBCK2-hulpprogramma gebruikt. HBCK2 is het herstelprogramma voor Apache HBase-clusters.

OVERZICHT VAN HBCK2

HBCK2 is momenteel een eenvoudig hulpmiddel dat slechts één ding tegelijk doet. In hbase-2.x is de master de laatste arbiter van alle staten, dus een algemeen principe voor de meeste HBCK2-opdrachten is dat het de Master vraagt om alle reparaties te maken.

Een master moet actief zijn voordat u HBCK2-opdrachten kunt uitvoeren. HBCK1 heeft een analyse uitgevoerd en uw cluster gerapporteerd als goed of slecht, maar HBCK2 is minder aaneengesloten. In hbase-2.x bepaalt de operator wat er moet worden opgelost en wordt vervolgens gebruikgemaakt van hulpprogramma's, waaronder HBCK2, om reparaties te maken.

HBCK2 versus HBCK1

HBCK2 is de opvolger van HBCK, het reparatieprogramma dat is geleverd met hbase-1.x (ook wel HBCK1 genoemd). U kunt HBCK2 gebruiken in plaats van HBCK1 om reparaties uit te voeren op hbase-2.x-clusters. HBCK1 mag niet worden uitgevoerd op een hbase-2.x-installatie omdat dit schade kan veroorzaken. De schrijffaciliteit (-fix) is verwijderd. Het kan rapporteren over de status van een hbase-2.x-cluster, maar de beoordelingen zijn onjuist omdat het de interne werking van een hbase-2.x niet begrijpt.

HBCK2 werkt niet zoals HBCK1 gewend is, zelfs in gevallen waarin opdrachten op dezelfde manier worden genoemd in de twee versies.

HBCK2 verkrijgen

U vindt de release onder de HBase-distributiemap. Zie de pagina HBase-downloads voor meer informatie.

Hoofdgebruikersinterface: het HBCK-rapport

Een HBCK-rapportpagina die in 2.1.6 aan het model is toegevoegd, /hbck.jsp toont de uitvoer van twee inspecties die volgens een interval door de master worden uitgevoerd. Een is de uitvoer door de CatalogJanitor keer dat deze wordt uitgevoerd. Als overlappingen of gaten worden gevonden, hbase:metaworden de CatalogJanitor lijsten weergegeven die er zijn gevonden. Een ander achtergrondproces chore vergelijkt de inhoud van het bestandssysteem en de inhoud van het hbase:meta bestandssysteem. Als er een anomalie wordt gevonden, wordt er een notitie in de sectie HBCK-rapport weergegeven.

Als u de CatalogJanitoropdracht wilt uitvoeren, voert u de opdracht uit in de hbase-shell: catalogjanitor_run.

Als u de hbck choreopdracht wilt uitvoeren, voert u de opdracht uit in de hbase-shell: hbck_chore_run.

Beide opdrachten nemen geen invoer.

HBCK2 uitvoeren

U kunt de opdracht uitvoeren door deze hbck te starten via het $HBASE_HOME/bin/hbase script. Wanneer u uitvoert bin/hbase hbck, wordt de ingebouwde HBCK1-hulpprogramma's standaard uitgevoerd. Als u HBCK2 wilt uitvoeren, moet u verwijzen naar een ingebouwde HBCK2-jar met behulp van de -j optie, zoals in dit voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar

Met deze opdracht wordt de HBCK2-help afgedrukt, zonder opties of argumenten door te geven.

HBCK2-opdrachten

Notitie

Test deze opdrachten op een testcluster om inzicht te hebben in de functionaliteit voordat u ze uitvoert in een productieomgeving.

assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...

Opties:

  • -o,--override: Overschrijft het eigendom door een andere procedure.
  • -i,--inputFiles: gebruikt een of meer gecodeerde regionamen.

Deze raw toewijzing kan zelfs tijdens de initialisatie van de master worden gebruikt (als de -skip vlag is opgegeven). Het rokken coprocessors en geeft een of meer gecodeerde regionamen door. de00010733901a05f5a2a3a382e27dd4 is een voorbeeld van hoe een door de gebruiker gecodeerde regionaam eruitziet. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4

Deze retourneert de PID's van de gemaakte AssignProcedures of -1 als er geen zijn. Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat gecodeerde regionamen, één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -i fileName1 fileName2

unassigns [OPTIONS] <ENCODED_REGIONNAME>...| -i <INPUT_FILE>...

Opties:

  • -o,--override: Overschrijft het eigendom door een andere procedure.
  • -i,--inputFiles: neemt een of meer invoerbestanden van gecodeerde namen.

Deze raw toewijzing kan zelfs tijdens de initialisatie van de master worden gebruikt (als de -skip vlag is opgegeven). Het rokken coprocessors en geeft een of meer gecodeerde regionamen door. de00010733901a05f5a2a3a382e27dd4 is een voorbeeld van hoe een gebruiker de naam van een door ruimte gecodeerde regio overschrijft. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4 

Deze retourneert de PID's van de gemaakte UnassignProcedures of -1 als er geen zijn. Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat gecodeerde regionamen, één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassigns fileName1 -i fileName2

bypass [OPTIONS] <PID>...

Opties:

  • -o,--override: overschrijft als de procedure wordt uitgevoerd of vastgelopen.
  • -r,--recursive: Slaat de bovenliggende en de onderliggende items over. Deze optie is traag en duur.
  • -w,--lockWait: Wacht milliseconden voordat u het opgeeft. Default=1.
  • -i,--inputFiles: neemt een of meer invoerbestanden van PID's.

Er worden een of meer procedure-PID's doorgegeven om naar de procedure te gaan. Het bovenliggende item van de omzeilde procedure wordt overgeslagen naar het einde. Entiteiten blijven in een inconsistente status en vereisen handmatige reparatie. Mogelijk moet een master opnieuw worden opgestart om vergrendelingen te wissen die nog steeds zijn bewaard. Bypass mislukt als de procedure onderliggende items bevat. Voeg toe recursive als alles wat u hebt een bovenliggende PID is om de bovenliggende en onderliggende items te voltooien. Deze optie is traag en gevaarlijk, dus gebruik deze selectief. Het werkt niet altijd.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>

Als -i or --inputFiles dit is opgegeven, geeft u een of meer namen van invoerbestanden door. Elk bestand bevat PID's, één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass -i fileName1 fileName2

reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Optie:

  • i,--inputFiles: gebruikt een of meer invoerbestanden van naamruimte- of tabelnamen.

Gebruik deze optie wanneer regio's ontbreken hbase:meta , maar wanneer mappen nog steeds aanwezig zijn in HDFS. Deze opdracht is alleen een controlemethode. Het is ontworpen voor rapportagedoeleinden en voert geen oplossingen uit. Het biedt een weergave van welke regio's (indien van toepassing) worden gelezen naar hbase:meta, gegroepeerd op respectieve tabel of naamruimte.

Voer uit om effectief gelezen regio's in meta uit te voeren addFsRegionsMissingInMeta. Deze opdracht moet hbase:meta online zijn. Voor elke naamruimte/tabel die als parameter wordt doorgegeven, wordt er een verschil uitgevoerd tussen regio's die beschikbaar zijn in hbase:meta de regio's in HDFS. Regio-dirs zonder overeenkomsten worden gegroepeerd onder de naam van de gerelateerde tabel. Tabellen zonder ontbrekende regio's geven het bericht 'Geen ontbrekende regio's' weer. Als er geen naamruimte of tabel is opgegeven, wordt alle bestaande regio's gecontroleerd.

Het accepteert een combinatie van meerdere naamruimten en tabellen. Tabelnamen moeten het naamruimtegedeelte bevatten, zelfs voor tabellen in de standaardnaamruimte. Anders wordt ervan uitgegaan dat er een naamruimtewaarde is. In dit voorbeeld worden ontbrekende regiorapporten voor de tabellen table_1 geactiveerd en table_2onder een standaardnaamruimte:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 default:table_2

In dit voorbeeld wordt een rapport met ontbrekende regio's geactiveerd voor de tabel table_1 onder een standaardnaamruimte en voor alle tabellen uit de naamruimte ns1:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 ns1

Het retourneert een lijst met ontbrekende regio's voor elke tabel die als parameter wordt doorgegeven, of voor elke tabel in naamruimten die zijn opgegeven als parameter. Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <NAMESPACE|NAMESPACE:TABLENAME>één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta -i fileName1 fileName2

addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Optie:

  • -i,--inputFiles: Gebruikt een of meer invoerbestanden met namen van naamruimtetabellen die moeten worden gebruikt wanneer regio's ontbreken hbase:meta , maar mappen nog steeds aanwezig zijn in HDFS. Moet hbase:meta online zijn.

Voor elke tabelnaam die als parameter is doorgegeven, wordt een verschil uitgevoerd tussen regio's die beschikbaar zijn in hbase:meta en regio-dirs op HDFS. Vervolgens worden voor dirs zonder hbase:meta overeenkomsten het regioninfo metagegevensbestand gelezen en wordt een specifieke regio opnieuw gemaakt in hbase:meta. Regio's worden opnieuw gemaakt in de status GESLOTEN in de hbase:meta tabel, maar niet in de Masters cache. Ze zijn ook niet toegewezen. Als u deze regio's online wilt krijgen, voert u de HBCK2-opdracht assigns uit die wordt afgedrukt wanneer deze opdracht is voltooid.

Als u hbase-releases gebruikt die ouder zijn dan 2.3.0, is een rolling herstart van HMasters nodig voordat de set assigns uitvoer wordt uitgevoerd. In dit voorbeeld worden ontbrekende regio's toegevoegd voor tabellen tbl_1 in de standaardnaamruimte, tbl_2 in naamruimte n1en voor alle tabellen uit naamruimte n2:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

Het retourneert HBCK2 en een assigns opdracht met alle opnieuw geplaatste regio's. Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <NAMESPACE|NAMESPACE:TABLENAME>één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta -i fileName1 fileName2

extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Opties:

  • -f, --fix: Corrigeert meta door alle extra regio's te verwijderen.
  • -i,--inputFiles: gebruikt een of meer invoerbestanden van naamruimte- of tabelnamen.

Het rapporteert regio's die aanwezig zijn, hbase:meta maar zonder gerelateerde mappen in het bestandssysteem. Moet hbase:meta online zijn. Voor elke tabelnaam die als parameter is doorgegeven, wordt er onderscheid tussen regio's uitgevoerd die beschikbaar zijn in hbase:meta en regio-dirs op het specifieke bestandssysteem. Extra regio's worden verwijderd uit Meta als deze de --fix optie heeft doorgegeven.

Notitie

Voordat u besluit om de --fix optie te gebruiken, is het de moeite waard om te controleren of gerapporteerde extra regio's overlappen met bestaande geldige regio's. Zo ja, dan is dit extraRegionsInMeta --fix de optimale oplossing. Anders is de assigns opdracht de eenvoudigere oplossing. De regio's worden opnieuw gemaakt in het bestandssysteem, als ze niet bestaan.

In dit voorbeeld worden extra regiorapporten geactiveerd voor table_1 onder de standaardnaamruimte en voor alle tabellen uit de naamruimte ns1:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta default:table_1 ns1

In dit voorbeeld worden extra regiorapporten geactiveerd voor table_1 onder de standaardnaamruimte en voor alle tabellen uit de naamruimte ns1 met de fix-optie:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -f default:table_1 ns1

Het retourneert een lijst met extra regio's voor elke tabel die als parameter wordt doorgegeven, of voor elke tabel in naamruimten die zijn opgegeven als parameter. Als -i or --inputFiles dit is opgegeven, geeft u een of meer namen van invoerbestanden door. Elk bestand bevat <NAMESPACE|NAMESPACE:TABLENAME>één per regel. Bijvoorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -i fileName1 fileName2

fixMeta

Notitie

Deze optie werkt niet goed met HBase 2.1.6. Het wordt niet aanbevolen voor gebruik op een 2.1.6 HBase-cluster.

Voer een oplossing aan de serverzijde met een onjuiste of inconsistente status in hbase:meta. De hoofdgebruikersinterface heeft een overeenkomend nieuw HBCK Report tabblad waarmee rapporten worden gedumpt die zijn gegenereerd door de meest recente uitvoering van catalogjanitor en een nieuwe hbck chore.

Het is van cruciaal belang dat hbase:meta eerst gezond moet worden gemaakt voordat u andere reparaties uitvoert. Het herstelt holes en overlaps, het maken van (lege) regiomappen in HDFS zodat deze overeenkomen met regio's die zijn toegevoegd aan hbase:meta.

Deze opdracht is niet hetzelfde als de oude hbck1-opdracht die op dezelfde manier wordt genoemd. Het werkt op basis van de rapporten die zijn gegenereerd door de laatste catalog_janitor en hbck chore wordt uitgevoerd. Als er niets te verhelpen is, is de uitvoering een lus. Als de HBCK Report gebruikersinterface problemen meldt, fixMeta worden problemen gewist hbase:meta .

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta

generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>

Met deze opdracht wordt geprobeerd een zwevende tabel op te lossen door een ontbrekend tabeldescriptorbestand te genereren. Deze opdracht heeft geen effect als de tabelmap ontbreekt of aanwezig .tableinfo is. (Bestaande tabeldescriptors worden niet overschreven.) Met deze opdracht wordt eerst gecontroleerd of TableDescriptor deze in de cache is opgeslagen in HBase Master. In dat geval wordt dienovereenkomstig hersteld .tableinfo . Als TableDescriptor het bestand niet in de cache wordt opgeslagen in de hoofdserver, wordt er een standaardbestand .tableinfo gemaakt met de volgende items:

  • De tabelnaam.
  • De kolomfamilielijst die is bepaald op basis van het bestandssysteem.
  • De standaardeigenschappen voor zowel TableDescriptor als ColumnFamilyDescriptors. Als het .tableinfo bestand is gegenereerd met standaardparameters, controleert u de eigenschappen van de tabel- of kolomfamilie later. (Wijzig ze indien nodig.) Deze methode wijzigt niets in HBase. Het nieuwe .tableinfo bestand wordt alleen naar het bestandssysteem geschreven. Als u bijvoorbeeld ServerCrashProcedures zwevende tabellen wilt plakken, moet u de fout mogelijk oplossen nadat u de ontbrekende tabelgegevensbestanden hebt gegenereerd.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar generateMissingTableDescriptorFile namespace:table_name

replication [OPTIONS] [<NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...]

Opties:

  • -f, --fix: Lost eventuele gevonden replicatieproblemen op.
  • -i,--inputFiles: gebruikt een of meer invoerbestanden met tabelnamen.

Er wordt gezocht naar niet-verwijderde replicatiewachtrijen en verwijdert deze als deze de --fix optie heeft doorgegeven. Er wordt een tabelnaam doorgegeven om te controleren op een replicatiebarrière en te leegmaken als --fix.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name

Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <TABLENAME>één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication -i fileName1 fileName2

setRegionState [<ENCODED_REGIONNAME> <STATE> | -i <INPUT_FILE>...]

Optie:

  • -i,--inputFiles: gebruikt een of meer invoerbestanden met gecodeerde regionamen en -statussen.

Mogelijke regiostatussen:

  • OFFLINE
  • OPENING
  • OPENEN
  • CLOSIN
  • GESLOTEN
  • SPLITSEN
  • SPLIJTEN
  • FAILED_OPEN
  • FAILED_CLOSE
  • SAMENVOEGEN
  • SAMENGEVOEGDE
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Waarschuwing

Deze riskante optie is alleen bedoeld voor gebruik als laatste redmiddel.

Voorbeeldscenario's omvatten het intrekken of toewijzen van toewijzingen die niet verder kunnen, omdat de regio een inconsistente status heeft in hbase:meta. De unassigns opdracht kan bijvoorbeeld alleen doorgaan als er een regio wordt doorgegeven in een van de volgende statussen: SPLITSEN, SPLITSEN, SAMENVOEGEN, OPENEN of SLUITEN.

Voordat u handmatig een regiostatus instelt met deze opdracht, moet u certificeren dat deze regio niet wordt verwerkt door een actieve procedure, zoals assign of split. U kunt met behulp van de list_procedures opdracht een weergave krijgen van actieve procedures in de hbase-shell. In dit voorbeeld wordt de regio de00010733901a05f5a2a3a382e27dd4 ingesteld op SLUITEN:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING

Deze retourneert 0 als de regiostatus is gewijzigd en 1 anders. Als -i or --inputFiles dit is opgegeven, geeft u een of meer namen van invoerbestanden door. Elk bestand bevat <ENCODED_REGIONNAME> <STATE>één paar per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState -i fileName1 fileName2

setTableState [<TABLENAME> <STATE> | -i <INPUT_FILE>...]

Optie:

  • -i,--inputFiles: gebruikt een of meer invoerbestanden met tabelnamen en statussen.

Mogelijke tabelstatussen zijn INGESCHAKELD, UITGESCHAKELD, UITSCHAKELEN en INSCHAKELEN.

Als u de huidige tabelstatus wilt lezen, voert u in de hbase-shell het volgende uit:

hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'

Een waarde van x08x00 == INGESCHAKELD, x08x01 == UITGESCHAKELD, enzovoort. Het kan ook worden uitgevoerd describe <TABLENAME> bij de shell-prompt. In dit voorbeeld wordt de gebruiker ingeschakeld voor de tabelnaam:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED

Hiermee wordt de vorige tabelstatus geretourneerd. Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <TABLENAME> <STATE>één paar per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState -i fileName1 fileName2

scheduleRecoveries <SERVERNAME>... | -i <INPUT_FILE>...

Optie:

  • -i,--inputFiles: gebruikt een of meer invoerbestanden met servernamen.

Plannen ServerCrashProcedure(SCP) voor een lijst met RegionServers. Maak de servernaam op als <HOSTNAME>,<PORT>,<STARTCODE>. (Zie HBase UI/logs.)

In dit voorbeeld wordt het volgende gebruikt RegionServer a.example.org, 29100,1540348649479:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479

Deze retourneert de PID's van de gemaakte ServerCrashProcedures of -1 als er geen procedure wordt gemaakt. (Zie hoofdlogboeken voor waarom dit niet zo is.) Opdrachtondersteuning wordt toegevoegd in HBase-versies 2.0.3, 2.1.2, 2.2.0 of hoger. Als -i or --inputFiles dit is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <SERVERNAME>één per regel. Voorbeeld:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2 

Problemen oplossen

Deze sectie helpt u bij het oplossen van veelvoorkomende problemen.

Algemene principes

Wanneer u een reparatie uitvoert, moet u ervoor zorgen dat dit hbase:meta eerst consistent is voordat u een ander type probleem oplost, zoals een afwijking van het bestandssysteem. Deviance in het bestandssysteem of problemen met het toewijzen moeten worden opgelost nadat de hbase:meta toewijzing in volgorde is geplaatst. Als hbase:meta er problemen zijn, kan de master geen juiste plaatsingen maken wanneer er zwevende bestandssysteemgegevens worden gebruikt of regiotoewijzingen worden uitgevoerd.

Een regio kan niet worden toegewezen als deze de status SLUITEN heeft (of de inverse, niet toegewezen als deze de status OPENEN heeft) zonder eerst over te stappen via GESLOTEN. Regio's moeten altijd worden verplaatst van GESLOTEN naar OPENEN, openen en vervolgens sluiten en gesloten.

Wanneer u een reparatie uitvoert, herstelt u tabellen één voor één.

Als een tabel UITGESCHAKELD is, kunt u geen regio toewijzen. In de hoofdlogboeken ziet u dat de hoofdrapporten zijn overgeslagen omdat de tabel is uitgeschakeld. U kunt een regio toewijzen omdat deze zich momenteel in de status OPENEN bevindt en u wilt dat deze de status GESLOTEN heeft, zodat deze overeenkomt met de status UITGESCHAKELD van de tabel. In dit geval moet u mogelijk tijdelijk de tabelstatus instellen op INGESCHAKELD, zodat u de toewijzing kunt uitvoeren. Vervolgens stelt u deze opnieuw in na de toewijzingsinstructie. HBCK2 heeft de faciliteit waarmee u deze wijziging kunt uitvoeren. Zie de uitvoer van het HBCK2-gebruik.

Toewijzen en intrekken

Over het algemeen blijft de master bij toewijzen behouden totdat deze is geslaagd. Een toewijzing heeft een exclusieve vergrendeling voor de regio. De vergrendeling voorkomt dat gelijktijdig toewijzen of intrekken wordt uitgevoerd. Een toewijzing voor een vergrendelde regio wacht totdat de vergrendeling wordt vrijgegeven voordat de voortgang wordt uitgevoerd.

Master startup cannot progress, in holding-pattern until region online:

2018-10-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,1.1588230740 isn't online; state={1588230740 state=CLOSING, ts=1538456302300, server=ve1017.example.org,22101,1538449648131}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region online.

De master kan niet doorgaan met opstarten omdat er geen procedure is om toe te wijzen hbase:meta (of hbase:namespace). Als u er een wilt injecteren, gebruikt u het HBCK2-hulpprogramma:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740

In dit voorbeeld is 1588230740 de gecodeerde naam van de hbase:meta regio. Geef de -skip optie door om te voorkomen dat HBCK2 een versiecontrole uitvoert op de externe master. Als de externe master niet is ingeschakeld, vraagt de versiecontrole een Master is initializing response of PleaseHoldException en wordt de toewijzingspoging verbroken. De -skip opdracht voorkomt de versiecontrole en landt de geplande toewijzing.

Hetzelfde kan gebeuren met de hbase:namespace systeemtabel. Zoek naar de gecodeerde regionaam van de hbase:namespace regio en voer vergelijkbare stappen uit als waar we voor hbase:metahebben gedaan. In dit laatste geval drukt de master daadwerkelijk een nuttig bericht af dat er als volgt uitziet:

2019-07-09 22:08:38,966 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562733904278.9559cf72b8e81e1291c626a8e781a6ae. isn't online; state={9559cf72b8e81e1291c626a8e781a6ae state=CLOSED, ts=1562735318897, server=null}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

Een toewijzing plannen voor de hbase:namespace tabel die is genoteerd in de voorgaande logboekregel:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae

Geef de gecodeerde naam voor de naamruimteregio door. (De gecodeerde naam verschilt per implementatie.)

Ontbrekende regio's in hbase:metaregio/tabel herstellen/herbouwen

In sommige ongebruikelijke gevallen zijn tabelregio's uit de hbase:meta tabel verwijderd. Uit de triage van deze gevallen bleek dat de operator geïnduceerd was. Gebruikers hebben het verouderde HBCK1 OfflineMetaRepair-hulpprogramma uitgevoerd op een HBCK2-cluster. OfflineMetaRepair is een bekend hulpprogramma voor het oplossen van hbase:meta tabelgerelateerde problemen in HBase 1.x-versies. De oorspronkelijke versie is niet compatibel met HBase 2.x of hogere versies en heeft enkele aanpassingen ondergaan. In extreme situaties kan het nu worden uitgevoerd via HBCK2.

In de meeste gevallen ontbreken hbase:meta regio's willekeurig, maar hbase is mogelijk nog steeds operationeel. In dergelijke situaties kan het probleem online worden opgelost met de master met behulp van de addFsRegionsMissingInMeta opdracht in HBCK2. Deze opdracht is minder verstorend voor hbase dan een volledige hbase:meta herbouw, die later wordt behandeld. Het kan zelfs worden gebruikt voor het herstellen van de naamruimtetabelregio.

Extra regio's in hbase:metaregio/tabel herstellen/herbouwen

Er kunnen zich ook situaties voordoen waarin tabelregio's zijn verwijderd in het bestandssysteem, maar nog steeds gerelateerde vermeldingen in de hbase:meta tabel hebben. Dit scenario kan optreden vanwege problemen bij het splitsen, fouten bij handmatige bewerkingen (zoals het handmatig verwijderen of verplaatsen van de regio), of zelfs problemen met gegevensverlies van metagegevens zoals HBASE-21843.

Dergelijke problemen kunnen met de Master online worden opgelost met behulp van de extraRegionsInMeta --fix opdracht in HBCK2. Deze opdracht is minder verstorend voor hbase dan een volledige hbase:meta herbouw, die later wordt behandeld. Het is ook handig als dit gebeurt op versies die de fixMeta HBCK2-optie niet ondersteunen (versies vóór 2.0.6, 2.1.6, 2.2.1, 2.3.0 of 3.0.0).

Online hbase:meta rebuild recept

Als hbase:meta beschadiging niet te kritiek is, kan hbase deze nog steeds online brengen. Zelfs als de naamruimteregio deel uitmaakt van de ontbrekende regio's, is het mogelijk om te scannen hbase:meta tijdens de initialisatieperiode, waarbij master wacht tot de naamruimte is toegewezen. Om deze situatie te controleren, kan een hbase:meta scanopdracht worden uitgevoerd. Als er geen time-out optreedt of er fouten worden weergegeven, is het hbase:meta online:

echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell

HBCK2 addFsRegionsMissingInMeta kan worden gebruikt als het bericht geen fouten weergeeft. Het leest metagegevens van regio's die beschikbaar zijn in de FS-regiomappen om regio's opnieuw te maken in hbase:meta. Omdat het kan worden uitgevoerd met hbase gedeeltelijk operationeel, wordt geprobeerd om onlinetabellen uit te schakelen die worden beïnvloed door het gemelde probleem en worden leesregio's naar hbase:meta. Het kan controleren op specifieke tabellen of naamruimten, of alle tabellen uit alle naamruimten. In dit voorbeeld ziet u het toevoegen van ontbrekende regio's voor tabellen tbl_1 in de standaardnaamruimte, tbl_2 in de naamruimte n1en voor alle tabellen uit de naamruimte n2:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

Omdat het onafhankelijk van de master werkt, zijn er meer stappen vereist om de gelezen regio's toe te wijzen nadat de master is voltooid. Deze berichten worden als volgt weergegeven:

  • addFsRegionsMissingInMeta voert een opdracht toe met alle regio's die zijn gelezen. Deze opdracht moet later worden uitgevoerd, dus kopieer en sla deze voor het gemak op.
  • Voor HBase-versies vóór 2.3.0, nadat addFsRegionsMissingInMeta de uitvoering is voltooid en uitvoer is opgeslagen, start u alle actieve HBase-masters opnieuw.

Nadat masters opnieuw zijn opgestart en hbase:meta al online zijn (controleer of de webgebruikersinterface toegankelijk is), voert u de opdracht assigns uit vanuit addFsRegionsMissingInMeta de uitvoer die u eerder hebt opgeslagen.

Notitie

Als de naamruimteregio deel uitmaakt van de ontbrekende regio's, moet u de --skip vlag aan het begin van de geretourneerde toewijzingsopdracht toevoegen.

Als een cluster een catastrofaal verlies van de hbase:meta tabel ondervindt, is een ruwe herbouw mogelijk met behulp van het volgende recept. In het overzicht stoppen we het cluster. Voer het HBCK2 OfflineMetaRepair-hulpprogramma uit, dat mappen en metagegevens leest die in het bestandssysteem zijn geplaatst en de beste inspanning levert om een haalbare hbase:met tabel te reconstrueren. Start het cluster opnieuw op. Injecteer een toewijzing om de systeemnaamruimtetabel online te brengen. Wijs ten slotte gebruikersruimtetabellen toe die u wilt inschakelen. (De herbouwde hbase:meta tabel maakt een tabel met alle tabellen offline en geen regio's toegewezen.)

Gedetailleerd recept herbouwen

Notitie

Gebruik deze optie alleen als laatste redmiddel. We raden het niet aan.

  • Stop het cluster.

  • Voer de opdracht opnieuw opbouwen hbase:meta uit vanuit HBCK2. Met deze opdracht wordt het origineel hbase:meta afgetrokken en wordt er een nieuw herbouwd. In dit voorbeeld ziet u hoe u het hulpprogramma uitvoert. Hiermee wordt de -details vlag toegevoegd, zodat het hulpprogramma informatie dumpt over de regio's die in HDFS zijn gevonden:

    hbase --config /etc/hbase/conf -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar org.apache.hbase.hbck1.OfflineMetaRepair -details
    
  • Start het cluster. Het zal niet volledig worden opgestart. De tabel is vastgelopen omdat de naamruimtetabel niet online is en er geen toewijzingsprocedure is in het procedurearchief voor deze onvoorziene gebeurtenis. In het HBase-hoofdlogboek wordt deze status weergegeven. In dit voorbeeld ziet u wat het registreert:

    2019-07-10 18:30:51,090 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562808216225.725a0fe6c2c869d3d0a9ed82bfa80fa3. isn't online; state={725a0fe6c2c869d3d0a9ed82bfa80fa3 state=CLOSED, ts=1562808619952, server=null}; ServerCrashProcedures=false. Master startup can't progress, in holding-pattern until region onlined.
    

    Als u de tabelregio van de naamruimte wilt toewijzen, kunt u de shell niet gebruiken. Als u de shell gebruikt, mislukt dit omdat PleaseHoldException de master nog niet is bijgewerkt. (Er wordt gewacht tot de naamruimtetabel online komt voordat deze zichzelf 'up' noemt.) U moet de opdracht HBCK2 gebruiken. U hebt de gecodeerde naam van de naamruimte nodig om toe te wijzen. Het wordt weergegeven in het aanmeldlogboek. Dat is 725a0fe6c2c869d3d0a9ed82bfa80fa3 in dit geval. U moet de -skip opdracht doorgeven om de controle van de hoofdversie over te slaan. (Zonder dit is uw HBCK2-aanroep de PleaseHoldException aanroep omdat de Master nog niet is ingeschakeld.) In dit voorbeeld wordt een toewijzing van de naamruimtetabel toegevoegd:

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    

    Als de aanroep terugkomt Connection refused, is de Master up? De master wordt na een tijdje afgesloten als deze niet kan worden geïnitialiseerd. Start het cluster/master opnieuw op en voer de opdracht assigns opnieuw uit.

  • Wanneer de toewijzingen zijn uitgevoerd, ziet u dat deze iets lijkt op het volgende voorbeeld. De 48 aan het einde is de PID van de toewijzingsprocedureplanning. Als de geretourneerde PID is -1, is het opstarten van de master niet voldoende voortgezet, dus probeer het opnieuw. Of de gecodeerde regionaam is mogelijk onjuist, dus controleer op dit probleem.

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    
    18:40:43.817 [main] WARN  org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    18:40:44.315 [main] INFO  org.apache.hbase.HBCK2 - hbck sufpport check skipped
    [48]
    
  • Controleer de hoofdlogboeken. De meester had moeten komen. U ziet dat piD=48 is voltooid. Zoek naar een regel zoals in dit voorbeeld om te controleren of de master is gestart:

    master.HMaster: Master has completed initialization 132.515sec
    

    Het kan even duren voordat deze wordt weergegeven.

    De herbouw van hbase:meta de gebruikerstabellen wordt toegevoegd in de status UITGESCHAKELD en de regio's in de modus GESLOTEN. Tabellen opnieuw inschakelen via de shell om alle tabelregio's weer online te brengen. Doe dit één voor één of zie de opdracht '.*' inschakelen om alle tabellen tegelijk in te schakelen.

    De herbouwmeta ontbreekt bewerkingen en heeft mogelijk verdere reparatie en reiniging nodig met behulp van de faciliteit die eerder in dit artikel is beschreven.

Verwijderde referentiebestanden, ontbrekend hbase.version-bestand en beschadigde bestanden

HBCK2 kan controleren op hangende verwijzingen en beschadigde bestanden. U kunt het vragen om slechte bestanden te sideline, die mogelijk nodig zijn om over humps te komen waar regio's niet online of leesbewerkingen mislukken. Zie de opdracht bestandssysteem in de vermelding HBCK2. Geef een of meer tabelnamen door (of gebruik none deze om alle tabellen te controleren). Slechte bestanden worden gerapporteerd. Geef de --fix optie door om reparaties uit te voeren.

Procedure opnieuw opstarten

Als de Master ten slotte ongestoord is en alle pogingen om te herstellen alleen ondobare vergrendelingen of procedures opleveren die niet kunnen worden voltooid, of als de set MasterProcWALs zonder grenzen groeit, is het mogelijk om de masterstatus schoon te wissen. Verplaats de map onder uw /hbase/MasterProcWALs/ HBase-installatie en start het masterproces opnieuw. Het wordt teruggezet als een tabellaire indeling zonder geheugen.

Als op het moment van wissen alle regio's gelukkig zijn toegewezen of offline zijn, moet de master opnieuw opstarten bij het opnieuw opstarten van de master worden opgehaald en doorgaan alsof er niets is gebeurd. Maar als er op dat moment regio's in overgang waren, moet de operator ingrijpen om openstaande toewijzingen of toewijzingen aan hun terminalpunt ongedaan te maken.

Lees de hbase:meta info:state kolommen zoals beschreven om te bepalen wat er moet worden toegewezen of niet toegewezen. Nadat alle geschiedenis is gewist door de MasterProcWALsentiteit te verwijderen, moet geen van de entiteiten worden vergrendeld, zodat u vrij bent om bulksgewijs toe te wijzen of de toewijzing ongedaan te maken.