Använda Apache HBase HBCK2-verktyget

Den här artikeln visar hur du använder HBase HBCK2-verktyget. HBCK2 är reparationsverktyget för Apache HBase-kluster.

Översikt över HBCK2

HBCK2 är för närvarande ett enkelt verktyg som bara gör en sak i taget. I hbase-2.x är mastern den slutliga skiljedomaren av alla tillstånd, så en allmän princip för de flesta HBCK2-kommandon är att den ber Mästaren att göra alla reparationer.

En huvudserver måste vara igång innan du kan köra HBCK2-kommandon. HBCK1 utförde analys och rapporterade klustret som bra eller dåligt, men HBCK2 är mindre förmätet. I hbase-2.x bestämmer operatorn vad som behöver åtgärdas och använder sedan verktyg, inklusive HBCK2, för att reparera.

HBCK2 jämfört med HBCK1

HBCK2 är efterföljare till HBCK, reparationsverktyget som levererades med hbase-1.x (även kallat HBCK1). Du kan använda HBCK2 i stället för HBCK1 för att reparera hbase-2.x-kluster. HBCK1 ska inte köras mot en hbase-2.x-installation eftersom det kan skada. Dess skrivfunktion (-fix) har tagits bort. Den kan rapportera om tillståndet för ett hbase-2.x-kluster, men dess utvärderingar är felaktiga eftersom det inte förstår det interna arbetet för en hbase-2.x.

HBCK2 fungerar inte som HBCK1 brukade, inte ens i de fall där kommandona namnges på samma sätt i de två versionerna.

Hämta HBCK2

Du hittar versionen under HBase-distributionskatalogen. Mer information finns på sidan HBase-nedladdningar.

Huvudgränssnitt: HBCK-rapporten

En HBCK-rapportsida som lagts till i mastern i 2.1.6 vid /hbck.jsp visar utdata från två inspektioner som körs av mastern med ett intervall. En är utdata från CatalogJanitor när den körs. Om överlappningar eller hål hittas i hbase:metalistar listan CatalogJanitor vad den har hittat. En annan bakgrundsprocess chore jämför filsysteminnehållet hbase:meta och . Om en avvikelse hittas gör den en anteckning i avsnittet HBCK-rapport.

CatalogJanitorKör kommandot i hbase-gränssnittet: catalogjanitor_run.

hbck choreKör kommandot i hbase-gränssnittet: hbck_chore_run.

Båda kommandona tar inga indata.

Kör HBCK2

Du kan köra hbck kommandot genom att starta det via skriptet $HBASE_HOME/bin/hbase . När du kör bin/hbase hbckkörs som standard det inbyggda HBCK1-verktyget. Om du vill köra HBCK2 måste du peka på en inbyggd HBCK2-jar med hjälp -j av alternativet, som i det här exemplet:

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

Det här kommandot skriver ut HBCK2-hjälpen utan att skicka alternativ eller argument.

HBCK2-kommandon

Anteckning

Testa dessa kommandon i ett testkluster för att förstå funktionerna innan du kör dem i en produktionsmiljö.

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

Alternativ:

  • -o,--override: Åsidosätter ägarskap genom en annan procedur.
  • -i,--inputFiles: Tar ett eller flera kodade regionnamn.

Den här raw tilldelningen -skip kan användas även under huvudinitieringen (om flaggan har angetts). Den kringgår coprocessorer och skickar ett eller flera kodade regionnamn. de00010733901a05f5a2a3a382e27dd4 är ett exempel på hur ett namn på en kodad region med användarutrymme ser ut. Exempel:

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

Den returnerar PID:erna för de skapade AssignProcedures eller -1 om de inte finns. Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller kodade regionnamn, ett per rad. Exempel:

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>...

Alternativ:

  • -o,--override: Åsidosätter ägarskap genom en annan procedur.
  • -i,--inputFiles: Tar en eller flera indatafiler med kodade namn.

Den här raw avtilldelningen kan användas även under huvudinitieringen (om -skip flaggan har angetts). Den kringgår coprocessorer och skickar ett eller flera kodade regionnamn. de00010733901a05f5a2a3a382e27dd4 är ett exempel på hur ett namn på en användare åsidosätter blankstegskodad region ser ut. Exempel:

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

Den returnerar PID:erna för de skapade UnassignProcedures eller -1 om de inte finns. Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller kodade regionnamn, ett per rad. Exempel:

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>...

Alternativ:

  • -o,--override: Åsidosätter om proceduren körs eller fastnar.
  • -r,--recursive: Kringgår den överordnade och dess underordnade. Det här alternativet är långsamt och dyrt.
  • -w,--lockWait: Väntar millisekunder innan du ger upp. Standard=1.
  • -i,--inputFiles: Tar en eller flera indatafiler med PID:er.

Den skickar en eller flera procedur-PID:er för att gå vidare till proceduravslutningen. Överordnad för den förbikopplade proceduren hoppar till slutet. Entiteter lämnas i ett inkonsekvent tillstånd och kräver manuell reparation. Det kan behövas en huvudomstart för att rensa lås som fortfarande finns kvar. Kringgå misslyckas om proceduren har underordnade. Lägg till recursive om allt du har är en överordnad PID för att slutföra överordnade och underordnade. Det här alternativet är långsamt och farligt, så använd det selektivt. Det fungerar inte alltid.

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

Om -i or --inputFiles anges skickar du ett eller flera indatafilnamn. Varje fil innehåller PID:ar, en per rad. Exempel:

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>...

Alternativet:

  • i,--inputFiles: Tar en eller flera indatafiler med namnområdes- eller tabellnamn.

Använd det här alternativet när regioner saknas hbase:meta i men när kataloger fortfarande finns i HDFS. Det här kommandot är bara en kontrollmetod. Den är utformad för rapportering och utför inga korrigeringar. Den innehåller en vy över vilka regioner (om några) som skulle läsas till hbase:meta, grupperade efter respektive tabell eller namnområde.

Kör för att effektivt läsa regioner i meta addFsRegionsMissingInMeta. Det här kommandot måste hbase:meta vara online. För varje namnområde/tabell som skickas som en parameter utför den en diff mellan regioner som är tillgängliga i hbase:meta mot befintliga regioners dirs på HDFS. Regiondirs utan matchningar skrivs ut grupperade under dess relaterade tabellnamn. Tabeller utan regioner som saknas visar meddelandet "inga regioner saknas". Om inget namnområde eller någon tabell har angetts verifieras alla befintliga regioner.

Den accepterar en kombination av flera namnområden och tabeller. Tabellnamn bör innehålla namnområdesdelen, även för tabeller i standardnamnområdet. Annars förutsätts ett namnområdesvärde. Det här exemplet utlöser saknade regionsrapporter för tabellerna table_1 och table_2, under ett standardnamnområde:

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

Det här exemplet utlöser en rapport om saknade regioner för tabellen table_1 under ett standardnamnområde och för alla tabeller från namnområdet 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

Den returnerar en lista över saknade regioner för varje tabell som skickas som en parameter, eller för varje tabell på namnområden som anges som en parameter. Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller <NAMESPACE|NAMESPACE:TABLENAME>, en per rad. Exempel:

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>...

Alternativet:

  • -i,--inputFiles: Tar en eller flera indatafiler med namnområdestabellnamn som ska användas när regioner saknas hbase:meta men kataloger fortfarande finns i HDFS. Måste hbase:meta vara online.

För varje tabellnamn som skickas som en parameter utför det en skillnad mellan regioner som är tillgängliga i hbase:meta och regiondirs på HDFS. För dirs utan hbase:meta matchningar läser den regioninfo sedan metadatafilen och återskapar en specifik region i hbase:meta. Regioner återskapas i tillståndet CLOSED i tabellen hbase:meta , men inte i cacheminnet Masters . De är inte heller tilldelade. För att få dessa regioner online kör du HBCK2-kommandot assigns som skrivs ut när den här kommandokörningen är klar.

Om du använder hbase-versioner som är äldre än 2.3.0 krävs en rullande omstart av HMasters innan du kör uppsättningen assigns med utdata. Det här exemplet lägger till saknade regioner för tabeller tbl_1 i standardnamnområdet, tbl_2 i namnområdet n1och för alla tabeller från namnområdet 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

Den returnerar HBCK2 och ett assigns kommando med alla omkopplade regioner. Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller <NAMESPACE|NAMESPACE:TABLENAME>, en per rad. Exempel:

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>...

Alternativ:

  • -f, --fix: Åtgärdar meta genom att ta bort alla extra regioner som hittas.
  • -i,--inputFiles: Tar en eller flera indatafiler med namnområdes- eller tabellnamn.

Den rapporterar regioner som finns på hbase:meta men utan relaterade kataloger i filsystemet. Måste hbase:meta vara online. För varje tabellnamn som skickas som en parameter utför det en skillnad mellan de regioner som är tillgängliga i hbase:meta och regiondirs på det specifika filsystemet. Extra regioner skulle tas bort från Meta om det godkändes av --fix alternativet.

Anteckning

Innan du bestämmer dig för att använda --fix alternativet är det värt att kontrollera om rapporterade extra regioner överlappar befintliga giltiga regioner. I så fall extraRegionsInMeta --fix är den optimala lösningen. Annars assigns är kommandot den enklare lösningen. Den återskapar regionernas dirs i filsystemet, om de inte finns.

Det här exemplet utlöser extra regionsrapporter för table_1 under standardnamnområdet och för alla tabeller från namnområdet 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

Det här exemplet utlöser extra regionsrapporter för table_1 under standardnamnområdet och för alla tabeller från namnområdet ns1 med korrigeringsalternativet:

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

Den returnerar en lista över extra regioner för varje tabell som skickas som en parameter, eller för varje tabell i namnområden som anges som en parameter. Om -i or --inputFiles anges skickar du ett eller flera indatafilnamn. Varje fil innehåller <NAMESPACE|NAMESPACE:TABLENAME>, en per rad. Exempel:

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

Anteckning

Det här alternativet fungerar inte bra med HBase 2.1.6. Vi rekommenderar inte att det används i ett 2.1.6 HBase-kluster.

Utför en korrigering på serversidan av felaktigt eller inkonsekvent tillstånd i hbase:meta. Huvudgränssnittet har en matchande ny HBCK Report flik som dumpar rapporter som genererats av den senaste körningen av catalogjanitor och en ny hbck chore.

Det är viktigt att hbase:meta först göras felfri innan du gör några andra reparationer. Den åtgärdar holes och overlapsskapar (tomma) regionkataloger i HDFS för att matcha regioner som läggs till hbase:metai .

Det här kommandot är inte samma som det gamla hbck1-kommandot som heter på samma sätt. Det fungerar mot de rapporter som genererades av de senaste catalog_janitor och hbck chore körningarna. Om det inte finns något att åtgärda är körningen en loop. Om användargränssnittet HBCK Report rapporterar problem rensar annars en körning av fixMeta problem 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>

Det här kommandot försöker åtgärda en överbliven tabell genom att generera en tabellbeskrivningsfil som saknas. Det här kommandot har ingen effekt om tabellmappen saknas eller om .tableinfo den finns. (Vi åsidosätter inte befintliga tabellbeskrivningar.) Det här kommandot kontrollerar först om TableDescriptor cachelagras i HBase Master, i vilket fall det återställs .tableinfo därefter. Om TableDescriptor inte cachelagras i huvudservern skapas en standardfil .tableinfo med följande objekt:

  • Tabellnamnet.
  • Kolumnfamiljelistan bestäms baserat på filsystemet.
  • Standardegenskaperna för både TableDescriptor och ColumnFamilyDescriptors. .tableinfo Om filen genererades med hjälp av standardparametrar kontrollerar du egenskaperna för tabell- eller kolumnfamiljen senare. (Ändra dem om det behövs.) Den här metoden ändrar ingenting i HBase. Den skriver bara den nya .tableinfo filen till filsystemet. För överblivna tabeller kan du till exempel ServerCrashProcedures behöva åtgärda felet när du har genererat de saknade tabellinformationsfilerna.
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>...]

Alternativ:

  • -f, --fix: Åtgärdar eventuella replikeringsproblem som hittas.
  • -i,--inputFiles: Tar en eller flera indatafiler med tabellnamn.

Den söker efter odefinierade replikeringsköer och tar bort dem om det godkändes av --fix alternativet. Det skickar ett tabellnamn för att söka efter en replikeringsbarriär och rensa om --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

Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller <TABLENAME>, en per rad. Exempel:

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>...]

Alternativet:

  • -i,--inputFiles: Tar en eller flera indatafiler med kodade regionnamn och tillstånd.

Möjliga regiontillstånd:

  • OFFLINE
  • ÖPPNA
  • ÖPPEN
  • CLOSIN
  • STÄNGT
  • DELA
  • SPLIT
  • FAILED_OPEN
  • FAILED_CLOSE
  • SAMMANSLAGNING
  • SAMMANSLAGNA
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Varning

Det här riskfyllda alternativet är endast avsett att användas som en sista utväg.

Exempelscenarier omfattar otilldelningar eller tilldelningar som inte kan gå framåt eftersom regionen är i ett inkonsekvent tillstånd i hbase:meta. Kommandot kan till exempel unassigns bara fortsätta om det har passerat en region i något av följande tillstånd: SPLIT, SPLIT, MERGING, OPEN eller CLOSING.

Innan du anger ett regiontillstånd manuellt med det här kommandot ska du certifiera att den här regionen inte hanteras av en procedur som körs, till exempel assign eller split. Du kan få en vy över procedurer som körs i hbase-gränssnittet med hjälp list_procedures av kommandot . I det här exemplet anges regionen de00010733901a05f5a2a3a382e27dd4 till CLOSING:

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

Den returnerar 0 om regiontillståndet har ändrats och 1 annars. Om -i or --inputFiles anges skickar du ett eller flera indatafilnamn. Varje fil innehåller <ENCODED_REGIONNAME> <STATE>, ett par per rad. Exempel:

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>...]

Alternativet:

  • -i,--inputFiles: Tar en eller flera indatafiler med tabellnamn och tillstånd.

Möjliga tabelltillstånd är AKTIVERADE, INAKTIVERADE, INAKTIVERADE och AKTIVERANDE.

Om du vill läsa det aktuella tabelltillståndet i hbase-gränssnittet kör du:

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

Värdet x08x00 == ENABLED, x08x01 == DISABLED osv. Den kan också köras describe <TABLENAME> i kommandotolken. Det här exemplet gör tabellnamnet användaraktiverat:

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

Den returnerar det tidigare tabelltillståndet. Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller <TABLENAME> <STATE>, ett par per rad. Exempel:

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>...

Alternativet:

  • -i,--inputFiles: Tar en eller flera indatafiler med servernamn.

Schemalägg ServerCrashProcedure(SCP) för en lista över RegionServers. Formatera servernamnet som <HOSTNAME>,<PORT>,<STARTCODE>. (Se HBase-användargränssnitt/loggar.)

I det här exemplet används 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

Den returnerar PID:erna för den skapade ServerCrashProcedures eller -1 om ingen procedur skapas. (Se Huvudloggar för varför det inte gör det.) Kommandostöd läggs till i HBase-versionerna 2.0.3, 2.1.2, 2.2.0 eller senare. Om -i or --inputFiles anges skickas ett eller flera indatafilnamn. Varje fil innehåller <SERVERNAME>, en per rad. Exempel:

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

Åtgärda problem

Det här avsnittet hjälper dig att felsöka vanliga problem.

Allmänna principer

När du gör en reparation kontrollerar du att den hbase:meta är konsekvent först innan du åtgärdar någon annan problemtyp, till exempel avvikande filsystem. Avvikelsen i filsystemet eller problem med tilldelningen bör åtgärdas när den hbase:meta har ställts i ordning. Om hbase:meta det finns problem kan huvudservern inte göra rätt placeringar när den inför överblivna filsystemdata eller gör regiontilldelningar.

Det går inte att tilldela en region om den är i tillståndet CLOSING (eller den omvända, otilldelade om den är i öppningstillståndet) utan att först övergå via STÄNGD. Regioner måste alltid flyttas från STÄNGD, TILL ÖPPNING, TILL ÖPPNA och sedan till STÄNGNING och STÄNGD.

När du gör en reparation åtgärdar du tabellerna en i taget.

Om en tabell är INAKTIVERAD kan du inte tilldela en region. I huvudloggarna ser du att huvudrapporterna hoppades över eftersom tabellen är INAKTIVERAd. Du kan tilldela en region eftersom den för närvarande är i öppningstillståndet och du vill ha den i tillståndet STÄNGD så att den överensstämmer med tabellens inaktiverade tillstånd. I det här fallet kan du tillfälligt behöva ange tabellstatusen till AKTIVERAD så att du kan tilldela. Sedan ställer du in den igen efter avsignera-instruktionen. HBCK2 har möjlighet att göra den här ändringen. Se HBCK2-användningsutdata.

Tilldela och ta bort tilldelning

När huvudservern tilldelas behålls den vanligtvis tills den lyckas. En tilldelning tar ett exklusivt lås på regionen. Låset förhindrar att en samtidig tilldelning eller avtilldelning körs. En tilldelning mot en låst region väntar tills låset släpps innan förloppet går.

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.

Huvudservern kan inte fortsätta att starta eftersom det inte finns någon procedur att tilldela hbase:meta (eller hbase:namespace). Använd HBCK2-verktyget för att mata in en:

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

I det här exemplet är 1588230740 regionens kodade namn hbase:meta . -skip Skicka alternativet för att stoppa HBCK2 från att göra en versionskontroll mot fjärrhanteraren. Om den fjärranslutna huvudservern inte är igång uppmanar versionskontrollen ett Master is initializing response eller PleaseHoldException och släpper tilldelningsförsöket. Kommandot -skip undviker versionskontrollen och landar den schemalagda tilldelningen.

Samma sak kan hända med systemtabellen hbase:namespace . Leta efter regionens kodade regionnamn hbase:namespace och vidta liknande åtgärder som vi gjorde för hbase:meta. I det senare fallet skriver originalet faktiskt ut ett användbart meddelande som ser ut som det här exemplet:

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.

Så här schemalägger du en tilldelning för tabellen hbase:namespace som anges på föregående loggrad:

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

Skicka det kodade namnet för namnområdesregionen. (Det kodade namnet skiljer sig åt per distribution.)

Regioner som saknas i hbase:metaregion/tabellåterställning/återskapande

Vissa ovanliga fall hade tabellregioner borttagna hbase:meta från tabellen. Triage på dessa fall visade att de var operatorn inducerad. Användarna körde det föråldrade HBCK1 OfflineMetaRepair-verktyget mot ett HBCK2-kluster. OfflineMetaRepair är ett välkänt verktyg för att åtgärda hbase:meta tabellrelaterade problem i HBase 1.x-versioner. Den ursprungliga versionen är inte kompatibel med HBase 2.x eller senare versioner, och den har genomgått vissa justeringar. I extrema situationer kan den nu köras via HBCK2.

I de flesta av dessa fall saknas hbase:meta regioner slumpmässigt, men hbase kan fortfarande vara i drift. I sådana situationer kan problemet åtgärdas med mastern online med hjälp addFsRegionsMissingInMeta av kommandot i HBCK2. Det här kommandot är mindre störande för hbase än en fullständig hbase:meta ombyggnad, som beskrivs senare. Den kan även användas för att återställa namnområdestabellregionen.

Extra regioner i hbase:metaregion/tabellåterställning/återskapande

Det kan också finnas situationer där tabellregioner har tagits bort i filsystemet men fortfarande har relaterade poster i hbase:meta tabellen. Det här scenariot kan inträffa på grund av problem med delning, manuella åtgärdsfel (som att ta bort eller flytta regiondir manuellt) eller till och med problem med dataförlust av metainformation, till exempel HBASE-21843.

Sådana problem kan åtgärdas med mastern online med hjälp extraRegionsInMeta --fix av kommandot i HBCK2. Det här kommandot är mindre störande för hbase än en fullständig hbase:meta ombyggnad, som beskrivs senare. Det är också användbart när detta inträffar i versioner som inte stöder fixMeta HBCK2-alternativet (alla versioner före 2.0.6, 2.1.6, 2.2.1, 2.3.0 eller 3.0.0).

Online hbase:meta rebuild recept

Om hbase:meta korruptionen inte är för kritisk kan hbase fortfarande ta den online. Även om namnområdesregionen finns bland de regioner som saknas går det att skanna hbase:meta under initieringsperioden, där huvudservern väntar på att namnområdet ska tilldelas. För att verifiera den här situationen kan ett hbase:meta genomsökningskommando köras. Om det inte överskrider tidsgränsen eller visar några fel är online hbase:meta :

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

HBCK2 addFsRegionsMissingInMeta kan användas om meddelandet inte visar några fel. Den läser information om regionmetadata som är tillgänglig i FS-regionens kataloger för att återskapa regioner i hbase:meta. Eftersom den kan köras med hbase delvis i drift försöker den inaktivera onlinetabeller som påverkas av det rapporterade problemet och som ska läsa regioner till hbase:meta. Den kan söka efter specifika tabeller eller namnområden eller alla tabeller från alla namnområden. Det här exemplet visar hur du lägger till saknade regioner för tabeller tbl_1 i standardnamnområdet, tbl_2 i namnområdet n1och för alla tabeller från namnområdet 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

Eftersom den fungerar oberoende av huvudservern krävs fler steg för att de lästa regionerna ska tilldelas när det har slutförts. Dessa meddelanden visas på följande sätt:

  • addFsRegionsMissingInMeta matar ut ett tilldela-kommando med alla regioner som har lästs. Det här kommandot måste köras senare, så kopiera och spara det för enkelhetens skull.
  • När HBase-versionerna före 2.3.0 addFsRegionsMissingInMeta har slutförts och utdata har sparats startar du om alla HBase Masters som körs.

När master har startats om och hbase:meta redan är online (kontrollera om webbgränssnittet är tillgängligt) kör du kommandot assigns från addFsRegionsMissingInMeta utdata som sparades tidigare.

Anteckning

Om namnområdesregionen finns bland de regioner som saknas måste du lägga --skip till flaggan i början av kommandot assigns som returneras.

Om ett kluster drabbas av en katastrofal förlust av hbase:meta tabellen är en grov återskapande möjlig med hjälp av följande recept. I dispositionen stoppar vi klustret. Kör verktyget HBCK2 OfflineMetaRepair, som läser kataloger och metadata som släppts i filsystemet och gör det bästa för att återskapa en livskraftig hbase:met tabell. Starta om klustret. Mata in en tilldelning för att koppla systemnamnområdestabellen online. Slutligen omtilldela de användarutrymmestabeller som du vill aktivera. (Den återskapade hbase:meta skapar en tabell med alla tabeller offline och inga tilldelade regioner.)

Detaljerade återskapa recept

Anteckning

Använd endast det här alternativet som en sista utväg. Vi rekommenderar det inte.

  • Stoppa klustret.

  • Kör kommandot rebuild hbase:meta från HBCK2. Det här kommandot flyttar originalet hbase:meta åt sidan och placerar en ny återskapad. Det här exemplet visar hur du kör verktyget. Den lägger till -details flaggan så att verktyget dumpar information om de regioner som finns i 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
    
  • Starta klustret. Den startar inte helt. Den har fastnat eftersom namnområdestabellen inte är online och det inte finns någon tilldelningsprocedur i procedurarkivet för den här beredskapen. HBase-huvudloggen visar det här tillståndet. Det här exemplet visar vad det loggar:

    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.
    

    Om du vill tilldela namnområdestabellregionen kan du inte använda gränssnittet. Om du använder gränssnittet misslyckas det med PleaseHoldException eftersom huvudservern ännu inte är igång. (Den väntar på att namnområdestabellen ska vara online innan den deklarerar sig själv som "up".) Du måste använda kommandot HBCK2 assigns. För att tilldela behöver du det namnområdeskodade namnet. Den visas i den citerade loggen. Det är 725a0fe6c2c869d3d0a9ed82bfa80fa3 i det här fallet. Du måste skicka -skip kommandot för att hoppa över kontrollen av huvudversion. (Utan det löser PleaseHoldException ditt HBCK2-anrop eftersom mastern inte är igång ännu.) Det här exemplet lägger till en tilldelning av namnområdestabellen:

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

    Om anropet kommer tillbaka med Connection refused, är mastern igång? Huvudservern stängs av efter ett tag om den inte kan initiera sig själv. Starta om klustret/huvudservern och kör kommandot assigns igen.

  • När tilldelningarna har körts ser du att den genererar något som liknar följande exempel. I 48 slutet är PID för schemat för tilldelningsproceduren. Om PID:t som returneras är -1har huvudstarten inte utvecklats tillräckligt, så försök igen. Eller så kan det kodade regionnamnet vara felaktigt, så leta efter det här problemet.

    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]
    
  • Kontrollera huvudloggarna. Mästaren borde ha kommit upp. Du ser att PID=48 har slutförts. Leta efter en rad som det här exemplet för att verifiera en lyckad huvudstart:

    master.HMaster: Master has completed initialization 132.515sec
    

    Det kan ta en stund att visas.

    Återskapande av hbase:meta lägger till användartabellerna i inaktiverat tillstånd och regionerna i stängt läge. Återaktivera tabeller via gränssnittet så att alla tabellregioner är online igen. Gör det en i taget eller se kommandot aktivera alla ".*" för att aktivera alla tabeller samtidigt.

    Återskapa meta saknas ändringar och kan behöva efterföljande reparation och rengöring med hjälp av den anläggning som beskrivs tidigare i den här artikeln.

Borttagna referensfiler, filen hbase.version saknas och skadade filer

HBCK2 kan söka efter hängande referenser och skadade filer. Du kan be den att åsidosätta dåliga filer, som kan behövas för att komma över humps där regioner inte online eller läsningar misslyckas. Se filsystemkommandot i HBCK2-listan. Skicka ett eller flera tabellnamn (eller använd none för att kontrollera alla tabeller). Felaktiga filer rapporteras. Skicka alternativet --fix för att göra reparationer.

Starta om proceduren

Som en sista utväg, om Mästaren är upprörd och alla försök till reparation bara dyker upp ångrabara lås eller procedurer som inte kan slutföras, eller om uppsättningen av MasterProcWALs växer utan gränser, är det möjligt att rensa mastertillståndet. Flytta åt sidan /hbase/MasterProcWALs/ katalogen under HBase-installationen och starta om huvudprocessen. Det kommer tillbaka som ett tabellformat utan minne.

Om alla regioner vid tidpunkten för raderingen var lyckligt tilldelade eller offlinekopplade, vid masteromstart, bör mastern plocka upp och fortsätta som om ingenting hände. Men om det fanns regioner i övergång vid den tidpunkten måste operatören ingripa för att få utestående tilldelningar eller otilldelningar till sin terminalpunkt.

Läs kolumnerna enligt beskrivningen hbase:metainfo:state för att avgöra vad som behöver tilldelas eller inte tilldelas. När all historik har raderats genom att flytta åt sidan MasterProcWALsska ingen av entiteterna låsas, så du kan masstilldela eller ta bort tilldelningen.