Použití nástroje Apache HBase HBCK2

V tomto článku se dozvíte, jak používat nástroj HBase HBCK2. HBCK2 je opravný nástroj pro clustery Apache HBase.

Přehled HBCK2

HBCK2 je v současné době jednoduchý nástroj, který dělá jenom jednu věc najednou. V hbase-2.x je master konečným arbitrem pro všechny stavy, takže obecný princip pro většinu příkazů HBCK2 je, že požádá hlavní server o provedení všech oprav.

Aby bylo možné spouštět příkazy HBCK2, musí být spuštěný hlavní server. HBCK1 provedl analýzu a nahlásil váš cluster jako dobrý nebo špatný, ale HBCK2 je méně domýšlavé. V hbase-2.x operátor určuje, co je potřeba opravit, a pak k opravě použije nástroje, včetně HBCK2.

HBCK2 vs. HBCK1

HBCK2 je následníkem nástroje HBCK, který se dodává s hbase-1.x (označovaný také jako HBCK1). Místo HBCK1 můžete použít HBCK2 k provádění oprav clusterů hbase-2.x. HBCK1 by neměl být spuštěn proti instalaci hbase-2.x, protože by mohl způsobit poškození. Jeho zařízení pro zápis (-fix) bylo odebráno. Může hlásit stav clusteru hbase-2.x, ale jeho hodnocení jsou nepřesná, protože nerozumí internímu fungování hbase-2.x.

HBCK2 nefunguje tak, jak tomu bylo dříve, a to ani v případech, kdy jsou příkazy v obou verzích podobně pojmenované.

Získání HBCK2

Verzi najdete v distribučním adresáři HBase. Další informace najdete na stránce pro stažení HBase.

Hlavní uživatelské rozhraní: Sestava HBCK

Stránka sestavy HBCK přidaná do hlavního serveru ve verzi 2.1.6 v zobrazuje /hbck.jsp výstup ze dvou kontrol spuštěných hlavním serverem v intervalu. Jedním z nich je výstup, který provádí při CatalogJanitor každém spuštění. Pokud se v hbase:metasouboru najdou překrytí nebo díry, zobrazí se CatalogJanitor seznam nalezených položek. Další proces na pozadí chore porovnává hbase:meta obsah systému souborů a . Pokud se najde anomálie, provede si poznámku v oddílu sestavy HBCK.

Pokud chcete spustit CatalogJanitor, spusťte v prostředí hbase příkaz : catalogjanitor_run.

Pokud chcete spustit hbck chore, spusťte v prostředí hbase příkaz : hbck_chore_run.

Oba příkazy nepřibírají žádné vstupy.

Spuštění HBCK2

Příkaz můžete spustit tak, hbck že ho $HBASE_HOME/bin/hbase spustíte prostřednictvím skriptu. Ve výchozím nastavení se při spuštění spustí bin/hbase hbckintegrované nástroje HBCK1. Pokud chcete spustit HBCK2, musíte ukázat na sestavený soubor JAR HBCK2 pomocí možnosti , jako v tomto příkladu -j :

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

Tento příkaz vytiskne nápovědu k adaptéru HBCK2 bez předání možností nebo argumentů.

Příkazy HBCK2

Poznámka

Otestujte tyto příkazy v testovacím clusteru, abyste porozuměli jejich funkcím před jejich spuštěním v produkčním prostředí.

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

Možnosti:

  • -o,--override: Přepíše vlastnictví jiným postupem.
  • -i,--inputFiles: Přebírá jeden nebo více zakódovaných názvů oblastí.

Toto raw přiřazení lze použít i během inicializace hlavního serveru (pokud -skip je zadaný příznak). Obchází koprocesory a předává jeden nebo více zakódovaných názvů oblastí. de00010733901a05f5a2a3a382e27dd4 je příkladem toho, jak vypadá název oblasti kódované uživatelským prostorem. Například:

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

Vrátí identifikátory PID vytvořeného AssignProcedures identifikátoru nebo -1, pokud žádné nejsou. Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje zakódované názvy oblastí, jeden na každý řádek. Například:

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

Možnosti:

  • -o,--override: Přepíše vlastnictví jiným postupem.
  • -i,--inputFiles: Přebírá ty nebo více vstupních souborů s kódovanými názvy.

Toto raw zrušení přiřazení lze použít i během inicializace předlohy (pokud -skip je příznak zadán). Obchází koprocesory a předává jeden nebo více zakódovaných názvů oblastí. de00010733901a05f5a2a3a382e27dd4 je příkladem toho, jak uživatel přepíše název oblasti zakódované mezerou. Například:

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

Vrátí identifikátory PID vytvořeného UnassignProcedures identifikátoru nebo -1, pokud žádné nejsou. Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje zakódované názvy oblastí, jeden na každý řádek. Například:

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

Možnosti:

  • -o,--override: Přepíše se, pokud je procedura spuštěná nebo zablokovaná.
  • -r,--recursive: Obchází nadřazený objekt a jeho podřízené položky. Tato možnost je pomalá a drahá.
  • -w,--lockWait: Počká na milisekundy, než se vzdá. Výchozí=1.
  • -i,--inputFiles: Přebírá jeden nebo více vstupních souborů PID.

Předá jeden nebo více identifikátorů PId procedury, které přeskočí do dokončení procedury. Nadřazený objekt vynechané procedury přeskočí do konce. Entity jsou ponechány v nekonzistentním stavu a vyžadují ruční opravu. K vymazání zámků, které se pořád drží, může být potřeba restartovat hlavní uzel. Obejití selže, pokud má procedura podřízené položky. Přidejte recursive , pokud máte jen nadřazené PID, abyste dokončili nadřazené a podřízené položky. Tato možnost je pomalá a nebezpečná, proto ji používejte selektivně. Ne vždy to funguje.

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

Pokud -i or --inputFiles je zadána hodnota , předejte jeden nebo více názvů vstupních souborů. Každý soubor obsahuje IDENTIFIKÁTORy PID, jeden na každém řádku. Například:

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

Možnost:

  • i,--inputFiles: Přebírá jeden nebo více vstupních souborů názvů nebo názvů tabulek.

Tuto možnost použijte v případě, že v hbase:meta systému HDFS chybí oblasti, ale adresáře stále existují. Tento příkaz je pouze kontrolní metodou. Je navržený pro účely vytváření sestav a neprovádí žádné opravy. Poskytuje přehled o tom, které oblasti (pokud nějaké) by se načetly do hbase:metaa seskupené podle příslušné tabulky nebo oboru názvů.

Pokud chcete efektivně číst oblasti v meta, spusťte addFsRegionsMissingInMeta. Tento příkaz musí hbase:meta být online. Pro každý obor názvů nebo tabulku předanou jako parametr provádí rozdíl mezi dostupnými oblastmi v hbase:meta oproti existujícím oblastem v HDFS. Položky oblastí bez shod se vytisknou seskupené pod názvem související tabulky. V tabulkách bez chybějících oblastí se zobrazí zpráva o tom, že chybí oblasti. Pokud nezadáte obor názvů ani tabulku, ověří se všechny existující oblasti.

Akceptuje kombinaci více oborů názvů a tabulek. Názvy tabulek by měly obsahovat část oboru názvů, a to i pro tabulky ve výchozím oboru názvů. V opačném případě se předpokládá hodnota oboru názvů. Tento příklad aktivuje sestavy chybějících oblastí pro tabulky table_1 a table_2ve výchozím oboru názvů:

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

Tento příklad aktivuje sestavu chybějících oblastí pro tabulku table_1 ve výchozím oboru názvů a pro všechny tabulky z oboru názvů 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

Vrátí seznam chybějících oblastí pro každou tabulku předanou jako parametr nebo pro každou tabulku v oborech názvů zadaných jako parametr. Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <NAMESPACE|NAMESPACE:TABLENAME>jeden soubor na každém řádku. Například:

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

Možnost:

  • -i,--inputFiles: Převezme jeden nebo více vstupních souborů názvů názvů tabulek, které se použijí, když v hbase:meta systému HDFS chybí oblasti, ale adresáře jsou stále přítomné. Musí hbase:meta být online.

Pro každý název tabulky předaný jako parametr provádí rozdíl mezi oblastmi dostupnými v hbase:meta systému a oblastmi na HDFS. Potom pro dirs bez hbase:meta shod načte regioninfo soubor metadat a znovu vytvoří konkrétní oblast v hbase:meta. Oblasti se znovu vytvoří ve stavu UZAVŘENO v hbase:meta tabulce, ale ne v Masters mezipaměti. Ani ty nejsou přiřazené. Pokud chcete tyto oblasti připojit do online režimu, spusťte příkaz HBCK2 assigns , který se po dokončení tohoto příkazu vytiskne.

Pokud používáte verze hbase starší než 2.3.0, je před spuštěním sady assigns výstupu potřeba postupné restartování HMasters. Tento příklad přidá chybějící oblasti pro tabulky tbl_1 ve výchozím oboru názvů, tbl_2 v oboru názvů n1a pro všechny tabulky z oboru názvů 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

Vrátí HBCK2 a příkaz se assigns všemi znovu vkřivkovanými oblastmi. Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <NAMESPACE|NAMESPACE:TABLENAME>jeden soubor na každý řádek. Například:

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

Možnosti:

  • -f, --fix: Opravuje meta odebráním všech nalezených dalších oblastí.
  • -i,--inputFiles: Přebírá jeden nebo více vstupních souborů názvů nebo názvů tabulek.

Hlásí oblasti, které jsou přítomné v hbase:meta systému souborů, ale nemají žádné související adresáře. Musí hbase:meta být online. Pro každý název tabulky předaný jako parametr provádí rozdíl mezi oblastmi dostupnými v hbase:meta a oblastmi v konkrétním systému souborů. Další oblasti by se odstranily z meta, pokud by tato možnost prošla --fix .

Poznámka

Než se rozhodnete tuto možnost použít --fix , je vhodné zkontrolovat, jestli se hlášené další oblasti překrývají s existujícími platnými oblastmi. Pokud ano, je extraRegionsInMeta --fix optimálním řešením. V opačném assigns případě je příkaz jednodušším řešením. Znovu vytvoří rozdíly oblastí v systému souborů, pokud neexistují.

Tento příklad aktivuje sestavy dalších oblastí pro table_1 ve výchozím oboru názvů a pro všechny tabulky z oboru názvů 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

Tento příklad aktivuje další sestavy oblastí pro table_1 ve výchozím oboru názvů a pro všechny tabulky z oboru názvů ns1 s možností opravit:

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

Vrátí seznam dalších oblastí pro každou tabulku předanou jako parametr nebo pro každou tabulku v oborech názvů zadaných jako parametr. Pokud -i or --inputFiles je zadaný, předejte jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <NAMESPACE|NAMESPACE:TABLENAME>jeden soubor na každý řádek. Například:

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

Poznámka

Tato možnost nefunguje dobře s HBase 2.1.6. Nedoporučujeme ho používat v clusteru HBase verze 2.1.6.

Proveďte opravu špatného nebo nekonzistentního stavu na straně serveru v nástroji hbase:meta. Hlavní uživatelské rozhraní má odpovídající novou HBCK Report kartu, která vygeneruje sestavy vygenerované posledním spuštěním nástroje catalogjanitor a novou hbck chore.

Je důležité, aby hbase:meta byl nejprve v pořádku, než provedete další opravy. Opravuje holes a overlapsvytváří (prázdné) adresáře oblastí v HDFS tak, aby odpovídaly oblastem přidaným do hbase:meta.

Tento příkaz není stejný jako starý příkaz hbck1 , který má podobný název. Pracuje se sestavou vygenerovanou poslední catalog_janitor a hbck chore spustí se. Pokud není co opravit, je spuštění smyčkou. V opačném případě, pokud HBCK Report uživatelské rozhraní hlásí problémy, spuštění fixMeta vymaže hbase:meta problémy.

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

generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>

Tento příkaz se pokusí opravit osamocené tabulky generováním chybějícího souboru deskriptoru tabulky. Tento příkaz nemá žádný vliv, pokud složka tabulky chybí nebo pokud .tableinfo je k dispozici. (Nepřepisujeme existující deskriptory tabulky.) Tento příkaz nejprve zkontroluje, jestli TableDescriptor je v hlavním serveru HBase uložen v mezipaměti, a v takovém případě se odpovídajícím způsobem obnoví .tableinfo . Pokud TableDescriptor není uložená v mezipaměti v hlavním souboru, vytvoří se výchozí .tableinfo soubor s následujícími položkami:

  • Název tabulky.
  • Seznam rodin sloupců určený na základě systému souborů.
  • Výchozí vlastnosti pro i TableDescriptorColumnFamilyDescriptors. .tableinfo Pokud byl soubor vygenerován pomocí výchozích parametrů, nezapomeňte později zkontrolovat vlastnosti tabulky nebo řady sloupců. (V případě potřeby je změňte.) Tato metoda v HBase nic nemění. Zapíše pouze nový .tableinfo soubor do systému souborů. Například ServerCrashProcedures u osamocených tabulek může být potřeba opravit chybu po vygenerování chybějících souborů s informacemi o tabulce.
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>...]

Možnosti:

  • -f, --fix: Opravuje všechny zjištěné problémy s replikací.
  • -i,--inputFiles: Vezme jeden nebo více vstupních souborů s názvy tabulek.

Vyhledá neschované replikační fronty a odstraní je, pokud tato možnost prošla --fix . Předá název tabulky, aby se zkontrolovala bariéra replikace, a pokud --fixse vyprázdní.

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

Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <TABLENAME>jeden soubor na každý řádek. Například:

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

Možnost:

  • -i,--inputFiles: Přebírá jeden nebo více vstupních souborů s kódovanými názvy a stavy oblastí.

Možné stavy oblastí:

  • OFFLINE
  • OTEVŘENÍ
  • OPEN
  • CLOSIN
  • UZAVŘENÉ
  • ROZDĚLENÍ
  • ROZDĚLIT
  • FAILED_OPEN
  • FAILED_CLOSE
  • SLOUČENÍ
  • SLOUČENÉ
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Upozornění

Tato riziková možnost je určená pouze jako poslední možnost.

Mezi příklady scénářů patří zrušení přiřazení nebo přiřazení, která se nemůžou posunout dopředu, protože oblast je v nekonzistentním stavu v hbase:meta. Příkaz může například pokračovat pouze v případě, unassigns že je předán oblasti v jednom z následujících stavů: ROZDĚLENÍ, ROZDĚLENÍ, SLOUČENÍ, OTEVŘENÍ nebo UZAVŘENÍ.

Před ručním nastavením stavu oblasti pomocí tohoto příkazu ověřte, že tato oblast není zpracována spuštěnou procedurou, například assign nebo split. Zobrazení spuštěných procedur v prostředí hbase můžete získat pomocí list_procedures příkazu . Tento příklad nastaví oblast de00010733901a05f5a2a3a382e27dd4 na CLOSING:

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

Vrátí 0 se, pokud se změnil stav oblasti a 1 jinak. Pokud -i or --inputFiles je zadaný, předejte jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <ENCODED_REGIONNAME> <STATE>jeden pár na řádek. Například:

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

Možnost:

  • -i,--inputFiles: Vezme jeden nebo více vstupních souborů s názvy a stavy tabulek.

Možné stavy tabulky jsou POVOLENO, ZAKÁZÁNO, ZÁKAZ a POVOLENÍ.

Pokud chcete přečíst aktuální stav tabulky, spusťte v prostředí hbase příkaz:

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

Hodnota x08x00 == POVOLENO, x08x01 == ZAKÁZÁNO atd. Může se také spustit describe <TABLENAME> na příkazovém řádku prostředí. V tomto příkladu je uživatel s názvem tabulky povolený:

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

Vrátí jakýkoli předchozí stav tabulky. Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <TABLENAME> <STATE>jeden pár na řádek. Například:

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

Možnost:

  • -i,--inputFiles: Přebírá jeden nebo více vstupních souborů názvů serverů.

Plán ServerCrashProcedure(SCP) pro seznam RegionServers. Naformátujte název serveru jako <HOSTNAME>,<PORT>,<STARTCODE>. (Viz uživatelské rozhraní a protokoly HBase.)

V tomto příkladu se používá 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

Pokud se nevytvořila žádná procedura, vrátí identifikátory PID vytvořeného ServerCrashProcedures objektu nebo -1. (Informace o tom, proč tomu tak není, najdete v hlavních protokolech.) Podpora příkazů je přidaná v HBase verze 2.0.3, 2.1.2, 2.2.0 nebo novější. Pokud -i or --inputFiles je zadaný, předá jeden nebo více názvů vstupních souborů. Každý soubor obsahuje <SERVERNAME>jeden soubor na každém řádku. Například:

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

Řešení problémů

Tato část vám pomůže s řešením běžných problémů.

Obecné principy

Při provádění opravy se nejprve ujistěte, že hbase:meta je konzistentní, než opravíte jakýkoli jiný typ problému, například odchylku systému souborů. Odchylky v systému souborů nebo problémy s přiřazením by měly být vyřešeny po hbase:meta zadání v pořadí. Pokud hbase:meta dojde k problémům, hlavní server nemůže správně umisťovat umístění, když přijímá osamocené data systému souborů nebo provádí přiřazení oblastí.

Oblast nelze přiřadit, pokud je ve stavu CLOSING (nebo inverzní, nepřiřazeno, pokud je ve stavu OTEVÍRÁNÍ) bez prvního přechodu přes UZAVŘENO. Oblasti se musí vždy přesunout z uzavřených oblastí na OTEVÍRÁNÍ, na OTEVŘENÉ a potom na UZAVŘENÍ a UZAVŘENO.

Když provedete opravu, opravujte tabulky po jedné.

Pokud je tabulka zakázaná, nemůžete přiřadit oblast. V hlavních protokolech vidíte, že hlavní sestavy se přeskočí, protože tabulka je ZAKÁZANÁ. Oblast můžete přiřadit, protože je aktuálně ve stavu OTEVÍRÁNÍ a chcete ji mít ve stavu UZAVŘENO, aby byla v souladu se stavem ZAKÁZÁNO v tabulce. V takovém případě možná budete muset dočasně nastavit stav tabulky na POVOLENO, abyste mohli provést přiřazení. Potom ho znovu nastavíte po příkazu unassign. HBCK2 vám umožňuje tuto změnu provést. Podívejte se na výstup využití HBCK2.

Přiřazení a zrušení přiřazení

Obecně platí, že při přiřazení se předloha zachová, dokud nebude úspěšná. Přiřazení převezme výhradní zámek oblasti. Zámek zabraňuje spuštění souběžného přiřazení nebo zrušení přiřazení. Přiřazení k uzamčené oblasti počká na uvolnění zámku, než bude pokračovat.

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.

Hlavní server nemůže pokračovat ve spuštění, protože neexistuje žádný postup pro přiřazení hbase:meta (nebo hbase:namespace). Pokud ho chcete vložit, použijte nástroj HBCK2:

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

V tomto příkladu je 1588230740 zakódovaný název hbase:meta oblasti. -skip Předejte možnost zastavit HBCK2 v provádění kontroly verze na vzdáleném hlavním serveru. Pokud vzdálený hlavní server není v provozu, kontrola verze zobrazí výzvu a Master is initializing response nebo PleaseHoldException a zahodí pokus o přiřazení. Příkaz -skip se vyhne kontrole verze a odešle naplánované přiřazení.

Totéž se může stát se systémová hbase:namespace tabulka. Vyhledejte zakódovaný název hbase:namespace oblasti a proveďte podobné kroky jako v případě hbase:meta. V tomto druhém případě předloha ve skutečnosti vytiskne užitečnou zprávu, která vypadá jako v tomto příkladu:

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.

Naplánování přiřazení pro hbase:namespace tabulku uvedenou na předchozím řádku protokolu:

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

Předejte zakódovaný název pro oblast oboru názvů. (Zakódovaný název se v jednotlivých nasazeních liší.)

Chybějící oblasti v hbase:metaregion/table restore/rebuild

V některých neobvyklých případech byly oblasti tabulky z tabulky odebrány hbase:meta . Při posouzení v těchto případech bylo zjištěno, že byly vyvolány operátorem. Uživatelé spustili zastaralý nástroj HBCK1 OfflineMetaRepair pro cluster HBCK2. OfflineMetaRepair je známý nástroj pro opravu hbase:meta problémů souvisejících s tabulkami ve verzích HBase 1.x. Původní verze není kompatibilní s HBase 2.x nebo novějšími verzemi a prošla několika úpravami. V extrémních situacích se teď dá spustit přes HBCK2.

Ve většině těchto případů oblasti náhodně chybí hbase:meta , ale hbase může být stále funkční. V takových situacích lze problém vyřešit pomocí hlavního serveru online pomocí addFsRegionsMissingInMeta příkazu v HBCK2. Tento příkaz je méně rušivý pro hbase než úplné hbase:meta opětovné sestavení, které je popsáno později. Dá se použít i k obnovení oblasti tabulky oboru názvů.

Další oblasti v hbase:metaregion/table restore/rebuild

Mohou také nastat situace, kdy oblasti tabulky byly odebrány v systému souborů, ale stále mají v tabulce související položky hbase:meta . K tomuto scénáři může dojít kvůli problémům s rozdělením, chybám ručního provozu (jako je ruční odstranění nebo přesunutí adresáře oblasti) nebo dokonce problémům se ztrátou metadat dat, jako je HBASE-21843.

Tyto problémy je možné vyřešit pomocí hlavního serveru online pomocí extraRegionsInMeta --fix příkazu v HBCK2. Tento příkaz je méně rušivý pro hbase než úplné hbase:meta opětovné sestavení, které je popsáno později. Je také užitečné, pokud k tomu dochází u verzí, které nepodporují fixMeta možnost HBCK2 (všechny verze před 2.0.6, 2.1.6, 2.2.1, 2.3.0 nebo 3.0.0).

Online hbase:meta rebuild recept

Pokud hbase:meta poškození není příliš kritické, hbase ho přesto může převést do režimu online. I v případě, že oblast oboru názvů patří mezi chybějící oblasti, je možné zkontrolovat hbase:meta během inicializačního období, kdy hlavní obor názvů čeká na přiřazení oboru názvů. Chcete-li ověřit tuto situaci, hbase:meta je možné spustit příkaz scan. Pokud časový limit nevypadá nebo se nezobrazí žádné chyby, hbase:meta je online:

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

HBCK2 addFsRegionsMissingInMeta se dá použít, pokud zpráva nezobrazuje žádné chyby. Čte informace o metadatech oblastí, které jsou k dispozici v adresářích oblastí FS, a znovu vytvoří oblasti v nástroji hbase:meta. Protože může běžet s hbase částečně funkčním, pokusí se zakázat online tabulky, které jsou ovlivněné nahlášeným problémem, a načte oblasti do hbase:meta. Může zkontrolovat konkrétní tabulky nebo obory názvů nebo všechny tabulky ze všech oborů názvů. Tento příklad ukazuje přidání chybějících oblastí pro tabulky tbl_1 ve výchozím oboru názvů, tbl_2 v oboru názvů n1a pro všechny tabulky z oboru názvů 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

Vzhledem k tomu, že funguje nezávisle na hlavním serveru, je po úspěšném dokončení nutné provést další kroky, aby se přiřadily přečtené oblasti. Tyto zprávy jsou uvedené takto:

  • addFsRegionsMissingInMeta výstup příkazu assigns se všemi oblastmi, které byly přečtené. Tento příkaz se musí spustit později, proto ho pro usnadnění zkopírujte a uložte.
  • U HBase verzí starších než 2.3.0 addFsRegionsMissingInMeta po úspěšném dokončení a uložení výstupu restartujte všechny spuštěné hlavní servery HBase.

Jakmile se hlavní servery restartují a hbase:meta jsou už online (zkontrolujte, jestli je webové uživatelské rozhraní přístupné), spusťte příkaz assigns z addFsRegionsMissingInMeta výstupu uloženého dříve.

Poznámka

Pokud oblast oboru názvů patří mezi chybějící oblasti, musíte na začátek vráceného příkazu assigns přidat --skip příznak .

Pokud cluster utrpí katastrofickou ztrátou hbase:meta tabulky, je možné provést hrubé opětovné sestavení pomocí následujícího návodu. V osnově cluster zastavíme. Spusťte nástroj HBCK2 OfflineMetaRepair, který čte adresáře a metadata vyhozená do systému souborů a vymění veškeré úsilí při rekonstrukci životaschopné hbase:met tabulky. Restartujte cluster. Vložením přiřazení převeďte tabulku systémového oboru názvů do online režimu. Nakonec znovu přiřaďte tabulky uživatelského prostoru, které chcete povolit. (Znovu sestavené hbase:meta vytvoří tabulku se všemi tabulkami offline a bez přiřazených oblastí.)

Podrobný recept na opětovné sestavení

Poznámka

Tuto možnost použijte jenom jako poslední možnost. Nedoporučujeme to.

  • Zastavte cluster.

  • Spusťte příkaz rebuild hbase:meta z HBCK2. Tento příkaz přesune původní hbase:meta příkaz stranou a nasadí nově sestavený. Tento příklad ukazuje, jak nástroj spustit. Přidá -details příznak, aby nástroj vypisuje informace o oblastech nalezených v 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
    
  • Spusťte cluster. Nespustí se úplně. Zablokovalo se to, protože tabulka oboru názvů není online a v úložišti procedur není žádná procedura přiřazení pro tuto nepředvídané situaci. Tento stav se zobrazuje v hlavním protokolu HBase. Tento příklad ukazuje, co protokoluje:

    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.
    

    K přiřazení oblasti tabulky oboru názvů nemůžete použít prostředí . Pokud použijete prostředí, dojde k chybě s PleaseHoldException chybou, protože hlavní server ještě není v provozu. (Čeká na to, až tabulka oborů názvů přejde do režimu online, než se deklaruje jako "up".) Musíte použít příkaz HBCK2 assigns. K přiřazení potřebujete zakódovaný název oboru názvů. Zobrazuje se v uvozovaném protokolu. To je 725a0fe6c2c869d3d0a9ed82bfa80fa3 v tomto případě. Pokud chcete přeskočit kontrolu hlavní verze, musíte předat -skip příkaz . (Bez něj vyvolání HBCK2 vyvolá PleaseHoldException příkaz , protože master ještě není v provozu.) Tento příklad přidá přiřazení tabulky oboru názvů:

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

    Pokud se vyvolání vrátí s Connection refused, je master up? Pokud se hlavní server nemůže inicializovat, po chvíli se vypne. Restartujte cluster nebo hlavní server a znovu spusťte příkaz assigns.

  • Po úspěšném spuštění přiřazení uvidíte, že se vygeneruje něco podobného jako v následujícím příkladu. Na 48 konci je PID plánu postupu přiřazení. Pokud je -1vrácené PID , spuštění hlavního serveru nepostupuje dostatečně, takže to zkuste znovu. Nebo může být zakódovaný název oblasti nesprávný, proto tento problém zkontrolujte.

    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]
    
  • Zkontrolujte hlavní protokoly. Mistr měl přijít. Zobrazí se úspěšné dokončení PID=48. Vyhledejte řádek podobný tomuto příkladu pro ověření úspěšného spuštění hlavního serveru:

    master.HMaster: Master has completed initialization 132.515sec
    

    Může to chvíli trvat, než se objeví.

    Opětovné sestavení hbase:meta přidá uživatelské tabulky ve stavu ZAKÁZÁNO a oblasti v režimu UZAVŘENO. Opětovné povolení tabulek prostřednictvím prostředí, aby se všechny oblasti tabulky vrátily do online režimu. Proveďte to po jednom nebo se podívejte na příkaz povolit všechny .*, který povolí všechny tabulky najednou.

    Metadata opětovného sestavení chybí úpravy a může být nutné provést následnou opravu a vyčištění pomocí zařízení popsaného dříve v tomto článku.

Vyřazené referenční soubory, chybějící soubor hbase.version a poškozené soubory

HBCK2 může zkontrolovat, jestli nejdou odkazy a poškozené soubory. Můžete ho požádat o postranní okraji chybných souborů, což může být potřeba k tomu, aby se dostal přes hrby, kde oblasti nejsou online nebo čtení selhává. Viz příkaz systému souborů ve výpisu HBCK2. Předejte jeden nebo více názvů tabulek (nebo použijte ke none kontrole všech tabulek). Hlásí se chybné soubory. Předejte --fix možnost provést opravy.

Restartování procedury

V krajním případě platí, že pokud je předloha nepřehledná a všechny pokusy o opravu pouze ukazují, že se nedají zrušit zámky nebo procedury, které se nedají dokončit, nebo pokud se množina MasterProcWALs objektů zvětšuje bez omezení, je možné stav předlohy vyčistit. Přesuňte adresář v /hbase/MasterProcWALs/ rámci instalace HBase bokem a restartujte hlavní proces. Vrátí se jako tabulkový formát bez paměti.

Pokud byly v době vymazání všechny oblasti šťastně přiřazené nebo offline, při restartování hlavního serveru by hlavní server měl pokračovat, jako by se nic nestalo. Pokud však v té době došlo k přechodu oblastí, musí operátor zasáhnout, aby do koncového bodu přinesl nevyřešená přiřazení nebo nepřiřazená přiřazení.

hbase:metainfo:state Přečtěte si popsané sloupce a určete, co je potřeba přiřadit nebo zrušit. Po vymazání veškeré historie přesunutím položky bokem MasterProcWALsby neměla být žádná entita uzamčena, takže můžete přiřazovat nebo přiřazovat položky od sebe.