Share via


Het hulpprogramma Apache HBase HBCK2 gebruiken

In dit artikel wordt beschreven hoe u het hulpprogramma HBase HBCK2 gebruikt. HBCK2 is het hulpprogramma voor herstel van Apache HBase-clusters.

HBCK2-overzicht

HBCK2 is momenteel een eenvoudig hulpprogramma dat slechts één ding tegelijk doet. In hbase-2.x is de Master de laatste scheidsrechter van alle statussen, dus een algemeen principe voor de meeste HBCK2-opdrachten is dat de master wordt gevraagd om alle reparaties uit te voeren.

Een master moet actief zijn voordat u HBCK2-opdrachten kunt uitvoeren. HBCK1 heeft een analyse uitgevoerd en uw cluster als goed of slecht gerapporteerd, maar HBCK2 is minder aanmatigend. In hbase-2.x bepaalt de operator wat er moet worden opgelost en gebruikt vervolgens gereedschap, waaronder HBCK2, om reparaties uit te voeren.

HBCK2 vs. HBCK1

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

HBCK2 werkt niet zoals HBCK1 vroeger, zelfs niet in gevallen waarin opdrachten een vergelijkbare naam hebben in de twee versies.

HBCK2 verkrijgen

U vindt de release in de distributiemap HBase. Zie de HBase-downloadpagina 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 met een interval door het model worden uitgevoerd. Een is de uitvoer door de CatalogJanitor wanneer deze wordt uitgevoerd. Als er overlappingen of gaten worden gevonden in hbase:meta, wordt in de CatalogJanitor lijst weergegeven wat er is gevonden. Een ander achtergrondproces chore vergelijkt de inhoud van het hbase:meta bestandssysteem en. Als er een anomalie wordt gevonden, maakt deze een notitie in de sectie HBCK-rapport.

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

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

Beide opdrachten hebben geen invoer nodig.

HBCK2 uitvoeren

U kunt de hbck opdracht uitvoeren door deze 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 eigendom door een andere procedure.
  • -i,--inputFiles: Neemt een of meer gecodeerde regionamen.

Deze raw toewijzing kan zelfs tijdens de initialisatie van de master worden gebruikt (als de -skip vlag is opgegeven). Coprocessors worden omzeild en er worden een of meer gecodeerde regionamen doorgegeven. de00010733901a05f5a2a3a382e27dd4 is een voorbeeld van hoe een met gebruikersruimte gecodeerde regionaam eruitziet. Bijvoorbeeld:

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

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

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 eigendom door een andere procedure.
  • -i,--inputFiles: Gebruikt een of meer invoerbestanden met gecodeerde namen.

Deze raw toewijzing kan zelfs tijdens de initialisatie van de master worden gebruikt (als de -skip vlag is opgegeven). Coprocessors worden omzeild en er worden een of meer gecodeerde regionamen doorgegeven. de00010733901a05f5a2a3a382e27dd4 is een voorbeeld van hoe een gebruiker de met ruimte gecodeerde regionaam overschrijft. Bijvoorbeeld:

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

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

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 vastloopt.
  • -r,--recursive: Hiermee worden de bovenliggende en onderliggende items omzeild. Deze optie is traag en duur.
  • -w,--lockWait: Wacht milliseconden voordat u het opgeeft. Standaard=1.
  • -i,--inputFiles: Neemt een of meer invoerbestanden met PID's.

Er worden een of meer procedure-PID's doorgegeven om naar het einde van de procedure te gaan. Het bovenliggende item van de omzeilde procedure wordt overgeslagen naar het einde. Entiteiten hebben een inconsistente status en moeten handmatig worden hersteld. Mogelijk moet de hoofdcomputer opnieuw worden opgestart om vergrendelingen te wissen die nog steeds zijn vastgehouden. Bypass mislukt als de procedure onderliggende elementen bevat. Voeg toe recursive als u alleen een bovenliggende PID hebt 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 is opgegeven, geeft u een of meer namen van invoerbestanden door. Elk bestand bevat PID's, één per regel. Bijvoorbeeld:

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 met naamruimte- of tabelnamen.

Gebruik deze optie wanneer regio's ontbreken in 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 aanwezig) 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 een verschil tussen regio's uitgevoerd die beschikbaar zijn in hbase:meta ten opzichte van de dirs van bestaande regio's op HDFS. Regio's zonder overeenkomsten worden gegroepeerd onder de bijbehorende tabelnaam. In tabellen zonder ontbrekende regio's wordt het bericht 'geen ontbrekende regio's' weergegeven. Als er geen naamruimte of tabel is opgegeven, worden 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 uitgegaan van een naamruimtewaarde. In dit voorbeeld worden ontbrekende regiorapporten geactiveerd voor de tabellen table_1 en table_2, onder 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

Er wordt een lijst met ontbrekende regio's geretourneerd voor elke tabel die wordt doorgegeven als parameter of voor elke tabel in naamruimten die zijn opgegeven als parameter. Als -i or --inputFiles is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. 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 reportMissingRegionsInMeta -i fileName1 fileName2

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

Optie:

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

Voor elke tabelnaam die als parameter wordt doorgegeven, wordt een verschil uitgevoerd tussen regio's die beschikbaar zijn in hbase:meta en regio dirs op HDFS. Vervolgens wordt 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 opdracht HBCK2 assigns uit die wordt afgedrukt wanneer deze opdracht is uitgevoerd.

Als u hbase-releases gebruikt die ouder zijn dan 2.3.0, moet HMasters doorlopend opnieuw worden opgestart voordat de uitvoerset assigns 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 is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. 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 addFsRegionsMissingInMeta -i fileName1 fileName2

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

Opties:

  • -f, --fix: Lost meta op door alle extra regio's te verwijderen die zijn gevonden.
  • -i,--inputFiles: Gebruikt een of meer invoerbestanden met naamruimte- of tabelnamen.

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

Notitie

Voordat u besluit de --fix optie te gebruiken, is het de moeite waard om te controleren of de gerapporteerde extra regio's overlappen met bestaande geldige regio's. Zo ja, dan extraRegionsInMeta --fix is dit de optimale oplossing. Anders is de assigns opdracht de eenvoudigere oplossing. De dirs van de regio's in het bestandssysteem worden opnieuw gemaakt, als deze 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 optie voor herstellen:

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 wordt doorgegeven als een parameter of voor elke tabel in naamruimten die zijn opgegeven als een parameter. Als -i or --inputFiles is opgegeven, geeft u een of meer invoerbestandsnamen 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. We raden het niet aan voor gebruik op een 2.1.6 HBase-cluster.

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

Het is essentieel dat hbase:meta u eerst gezond moet worden gemaakt voordat u andere reparaties uitvoert. Hiermee worden holes en opgelost, overlapswaardoor (lege) regiomappen worden gemaakt in HDFS, zodat deze overeenkomen met regio's die zijn toegevoegd aan hbase:meta.

Deze opdracht is niet hetzelfde als de oude hbck1-opdracht met dezelfde naam. Het werkt tegen de rapporten die door de laatste catalog_janitor zijn gegenereerd en hbck chore wordt uitgevoerd. Als er niets te repareren is, is de uitvoering een lus. Als de HBCK Report gebruikersinterface anders problemen rapporteert, worden problemen opgelost hbase:meta door een uitvoeringfixMeta.

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 als .tableinfo aanwezig is. (Bestaande tabeldescriptors worden niet overschreven.) Met deze opdracht wordt eerst gecontroleerd of TableDescriptor in de cache is opgeslagen in HBase Master, in welk geval de opdracht dienovereenkomstig wordt hersteld .tableinfo . Als TableDescriptor niet in de cache wordt opgeslagen in de hoofdmap, 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 ColumnFamilyDescriptorsals TableDescriptor . Als het .tableinfo bestand is gegenereerd met behulp van standaardparameters, controleert u de eigenschappen van de tabel- of kolomfamilie later. (Wijzig deze indien nodig.) Met deze methode wordt niets gewijzigd in HBase. Het nieuwe .tableinfo bestand wordt alleen naar het bestandssysteem geschreven. Als u bijvoorbeeld ServerCrashProcedures zwevende tabellen wilt behouden, 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 replicatieproblemen op die zijn gevonden.
  • -i,--inputFiles: Gebruikt een of meer invoerbestanden met tabelnamen.

Er wordt gezocht naar niet-verwijderde replicatiewachtrijen en deze worden verwijderd als de --fix optie is doorgegeven. Er wordt een tabelnaam doorgegeven om te controleren op een replicatiebarrière en op te puren 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 is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <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 replication -i fileName1 fileName2

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

Optie:

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

Mogelijke regiostatussen:

  • OFF LINE
  • OPENEN
  • OPENEN
  • CLOSIN
  • GESLOTEN
  • SPLITSEN
  • SPLIT
  • FAILED_OPEN
  • FAILED_CLOSE
  • SAMENVOEGEN
  • SAMENGEVOEGDE
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Waarschuwing

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

Voorbeelden van scenario's zijn het ongedaan maken van toewijzingen of toewijzingen die niet verder kunnen worden verplaatst omdat de regio een inconsistente status heeft in hbase:meta. De opdracht kan bijvoorbeeld unassigns alleen worden uitgevoerd als deze een regio in een van de volgende statussen doorgeeft: SPLITSEN, SPLITSEN, SAMENVOEGEN, OPENEN of SLUITEN.

Voordat u handmatig een regiostatus instelt met deze opdracht, moet u controleren of deze regio niet wordt verwerkt door een actieve procedure, zoals assign of split. U kunt een weergave krijgen van het uitvoeren van procedures in de hbase-shell met behulp van de list_procedures opdracht . 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 is opgegeven, geeft u een of meer invoerbestandsnamen door. Elk bestand bevat <ENCODED_REGIONNAME> <STATE>, één paar per regel. Bijvoorbeeld:

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 shellprompt. In dit voorbeeld wordt de gebruiker van de tabelnaam INGESCHAKELD:

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

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

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: Neemt een of meer invoerbestanden met servernamen.

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

In dit voorbeeld wordt gebruikt RegionServera.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

Het retourneert de PID's van de gemaakte ServerCrashProcedures of -1 als er geen procedure is gemaakt. (Zie Hoofdlogboeken voor meer informatie.) Ondersteuning voor opdrachten is toegevoegd in HBase-versies 2.0.3, 2.1.2, 2.2.0 of nieuwer. Als -i or --inputFiles is opgegeven, worden een of meer namen van invoerbestanden doorgegeven. Elk bestand bevat <SERVERNAME>, één per regel. Bijvoorbeeld:

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 herstelbewerking aanbrengt, moet u ervoor zorgen dat deze hbase:meta eerst consistent is voordat u een ander type probleem oplost, zoals een afwijking van het bestandssysteem. Afwijkingen in het bestandssysteem of problemen met toewijzen moeten worden opgelost nadat de hbase:meta op volgorde is geplaatst. Als hbase:meta er problemen zijn, kan de master geen juiste plaatsingen maken wanneer het zwevende bestandssysteemgegevens overneemt of regiotoewijzingen maakt.

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, en vervolgens naar SLUITEN en GESLOTEN.

Wanneer u een reparatie aanbrengt, herstelt u de tabellen één voor één.

Als een tabel IS UITGESCHAKELD, 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 momenteel de status OPENEN heeft 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 de tabelstatus tijdelijk instellen op INGESCHAKELD, zodat u de toewijzing kunt uitvoeren. Vervolgens stelt u deze opnieuw in na de instructie Ongedaan maken van toewijzing. HBCK2 heeft de mogelijkheid om deze wijziging door te voeren. Zie de HBCK2-gebruiksuitvoer.

Toewijzen en de toewijzing opheffen

Over het algemeen blijft de master bij het toewijzen behouden totdat deze is geslaagd. Een toewijzing neemt een exclusieve vergrendeling van de regio. De vergrendeling voorkomt dat een gelijktijdige toewijzing of ongedaan maken van toewijzing wordt uitgevoerd. Een toewijzing voor een vergrendelde regio wacht totdat de vergrendeling wordt vrijgegeven voordat er voortgang wordt gemaakt.

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 hulpprogramma HBCK2:

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, wordt door de versiecontrole een Master is initializing response of PleaseHoldException gevraagd en wordt de toewijzingspoging afgeblazen. 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 stappen uit die vergelijkbaar zijn met wat we hebben gedaan voor hbase:meta. In dit laatste geval drukt het model in feite een nuttig bericht af dat eruitziet als in dit voorbeeld:

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 door voor de regio van de naamruimte. (De gecodeerde naam verschilt per implementatie.)

Ontbrekende regio's in hbase:metaregio/tabel herstellen/opnieuw opbouwen

In sommige ongebruikelijke gevallen zijn tabelgebieden uit de hbase:meta tabel verwijderd. Triage op deze gevallen heeft aangetoond dat ze door operatoren werden geïnduceerd. Gebruikers hebben het verouderde hulpprogramma HBCK1 OfflineMetaRepair uitgevoerd op een HBCK2-cluster. OfflineMetaRepair is een bekend hulpprogramma voor het oplossen van hbase:meta tabelgerelateerde problemen op 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 van deze gevallen ontbreken hbase:meta regio's willekeurig, maar hbase is mogelijk nog steeds operationeel. In dergelijke situaties kan het probleem worden opgelost met de master online met behulp van de addFsRegionsMissingInMeta opdracht in HBCK2. Deze opdracht is minder storend voor hbase dan een volledige hbase:meta herbouw, die later wordt behandeld. Het kan zelfs worden gebruikt voor het herstellen van het tabelgebied van de naamruimte.

Extra regio's in hbase:metaregio/tabel herstellen/opnieuw opbouwen

Er kunnen zich ook situaties voordoen waarin tabelgebieden in het bestandssysteem zijn verwijderd, maar nog steeds gerelateerde vermeldingen in de hbase:meta tabel hebben. Dit scenario kan optreden vanwege problemen met splitsen, handmatige bewerkingsfouten (zoals het handmatig verwijderen of verplaatsen van de regio-dir) of zelfs problemen met het verlies 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 storend voor hbase dan een volledige hbase:meta herbouw, die later wordt behandeld. Het is ook handig als dit gebeurt bij versies die geen ondersteuning bieden voor de fixMeta hbck2-optie (versies ouder dan 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 het nog steeds online brengen. Zelfs als de regio van de naamruimte tot de ontbrekende regio's behoort, 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 als er geen fouten worden weergegeven, is de hbase:meta online:

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

HBCK2 addFsRegionsMissingInMeta kan worden gebruikt als in het bericht geen fouten worden weergegeven. Er worden metagegevens van regio's gelezen 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 onlinetabellen uit te schakelen die worden beïnvloed door het gemelde probleem en worden gelezen regio'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 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 master werkt, zijn er meer stappen nodig om de gelezen regio's toe te wijzen nadat het is voltooid. Deze berichten worden als volgt weergegeven:

  • addFsRegionsMissingInMeta voert een toewijzingsopdracht uit 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 ouder dan 2.3.0 start u alle addFsRegionsMissingInMeta actieve HBase-masters opnieuw nadat de uitvoering is voltooid en de uitvoer is opgeslagen.

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

Notitie

Als de naamruimte tot de ontbrekende regio's behoort, moet u de --skip vlag toevoegen aan het begin van de geretourneerde toewijzingsopdracht.

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 kort stoppen we het cluster. Voer het hulpprogramma HBCK2 OfflineMetaRepair uit, waarmee mappen en metagegevens die in het bestandssysteem zijn verwijderd, worden gelezen en er alles aan wordt gedaan om een levensvatbare hbase:met tabel te reconstrueren. Start het cluster opnieuw op. Injecteer een toewijzing om de tabel met de systeemnaamruimte online te brengen. Wijs ten slotte gebruikersruimtetabellen toe die u wilt inschakelen. (De herbouwde hbase:meta maakt een tabel met alle tabellen offline en zonder toegewezen regio's.)

Gedetailleerd recept voor herbouwen

Notitie

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

  • Stop het cluster.

  • Voer de opdracht rebuild hbase:meta uit vanuit HBCK2. Met deze opdracht wordt het origineel hbase:meta aan de kant gezet en wordt een nieuw herbouwd exemplaar op zijn plaats gezet. In dit voorbeeld ziet u hoe u het hulpprogramma uitvoert. De vlag wordt toegevoegd -details zodat het hulpprogramma informatie dumpt over de regio's die zijn gevonden in HDFS:

    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 op. Het zal niet volledig opstarten. Deze is vastgelopen omdat de naamruimtetabel niet online is en er geen toewijzingsprocedure in het procedurearchief is voor deze gebeurtenis. In het HBase-hoofdlogboek wordt deze status weergegeven. In dit voorbeeld ziet u wat er wordt bijgeslagen:

    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 het tabelgebied van de naamruimte wilt toewijzen, kunt u de shell niet gebruiken. Als u de shell gebruikt, mislukt deze met PleaseHoldException omdat de master nog niet is ingeschakeld. (Er wordt gewacht tot de naamruimtetabel online komt voordat deze zichzelf 'up' verklaart.) U moet de opdracht HBCK2-toewijzingen gebruiken. Als u wilt toewijzen, hebt u de met de naamruimte gecodeerde naam nodig. Dit wordt weergegeven in het logboek dat wordt geciteerd. Dat is 725a0fe6c2c869d3d0a9ed82bfa80fa3 in dit geval. U moet de -skip opdracht doorgeven om de controle van de hoofdversie over te slaan. (Zonder dit, uw HBCK2-aanroep ontlokt de PleaseHoldException 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 met Connection refused, is de master dan up? De master wordt na een tijdje afgesloten als deze zichzelf niet kan initialiseren. Start het cluster/master opnieuw op en voer de opdracht assigns opnieuw uit.

  • Wanneer de toewijzingen zijn uitgevoerd, ziet u dat deze iets verzendt dat lijkt op het volgende voorbeeld. De 48 aan het einde is de PID van de toewijzingsprocedureplanning. Als de geretourneerde PID is, is -1het opstarten van de master niet voldoende gevorderd, 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.

    Bij het opnieuw samenstellen van hbase:meta worden de gebruikerstabellen met de status UITGESCHAKELD en de regio's in de modus GESLOTEN toegevoegd. Tabellen opnieuw inschakelen via de shell om alle tabelregio's weer online te brengen. Doe dit een voor een of zie de opdracht Alle '.*' inschakelen om alle tabellen tegelijk in te schakelen.

    Er ontbreken bewerkingen in de herbouwmeta en mogelijk moet deze later worden hersteld en opgeschoond 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 sidelineren, wat mogelijk nodig is om over bulten te komen waar regio's niet online zijn of leesbewerkingen mislukken. Zie de opdracht bestandssysteem in de hbck2-lijst. Geef een of meer tabelnamen door (of gebruik none om alle tabellen te controleren). Beschadigde bestanden worden gerapporteerd. Geef de --fix optie om reparaties uit te voeren door.

Procedure opnieuw opstarten

Als laatste redmiddel, als de master radeloos is en alle pogingen tot herstel alleen onwerkbare vergrendelingen of procedures opleveren die niet kunnen worden voltooid, of als de set van MasterProcWALs zonder grenzen groeit, is het mogelijk om de masterstatus op te schonen. Verplaats de /hbase/MasterProcWALs/ map onder uw HBase-installatie en start het masterproces opnieuw. Het komt terug als een tabelindeling zonder geheugen.

Als op het moment van de verwijdering alle regio's gelukkig zijn toegewezen of offline zijn gegaan, moet de master bij het opnieuw opstarten van de master 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 op te heffen naar hun eindpunt.

Lees de hbase:metainfo:state kolommen zoals beschreven om te bepalen wat er moet worden toegewezen of ongedaan moet worden genomen. Nadat alle geschiedenis is gewist door de MasterProcWALste verwijderen, mag geen van de entiteiten worden vergrendeld, dus u kunt bulksgewijs toewijzen of de toewijzing ongedaan maken.