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:meta
worden 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 CatalogJanitor
opdracht wilt uitvoeren, voert u de opdracht uit in de hbase-shell: catalogjanitor_run
.
Als u de hbck chore
opdracht 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_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
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 ontbrekenhbase:meta
, maar mappen nog steeds aanwezig zijn in HDFS. Moethbase: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 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
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
alsColumnFamilyDescriptors
. 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 bijvoorbeeldServerCrashProcedures
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:meta
hebben 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 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 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 origineelhbase: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 is725a0fe6c2c869d3d0a9ed82bfa80fa3
in dit geval. U moet de-skip
opdracht doorgeven om de controle van de hoofdversie over te slaan. (Zonder dit is uw HBCK2-aanroep dePleaseHoldException
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 MasterProcWALs
entiteit te verwijderen, moet geen van de entiteiten worden vergrendeld, zodat u vrij bent om bulksgewijs toe te wijzen of de toewijzing ongedaan te maken.