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 CatalogJanitor
wilt uitvoeren, voert u de opdracht uit in de hbase-shell: catalogjanitor_run
.
Als u de hbck chore
wilt 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 inhbase:meta
maar mappen nog steeds aanwezig zijn in HDFS. Moethbase: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 n1
en 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, overlaps
waardoor (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
ColumnFamilyDescriptors
alsTableDescriptor
. 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 bijvoorbeeldServerCrashProcedures
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 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
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 n1
en 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 origineelhbase: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 is725a0fe6c2c869d3d0a9ed82bfa80fa3
in dit geval. U moet de-skip
opdracht doorgeven om de controle van de hoofdversie over te slaan. (Zonder dit, uw HBCK2-aanroep ontlokt dePleaseHoldException
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-1
het 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:meta
info:state
kolommen zoals beschreven om te bepalen wat er moet worden toegewezen of ongedaan moet worden genomen. Nadat alle geschiedenis is gewist door de MasterProcWALs
te verwijderen, mag geen van de entiteiten worden vergrendeld, dus u kunt bulksgewijs toewijzen of de toewijzing ongedaan maken.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor