Udostępnij za pośrednictwem


Korzystanie z narzędzia Apache HBase HBCK2

W tym artykule pokazano, jak używać narzędzia HBase HBCK2. HBCK2 to narzędzie do naprawy klastrów Apache HBase.

Omówienie karty HBCK2

HBCK2 jest obecnie prostym narzędziem, które wykonuje tylko jedną rzecz naraz. W hbase-2.x Master jest ostatnim arbiterem wszystkich stanów, więc ogólną zasadą dla większości poleceń HBCK2 jest to, że prosi Master o dokonanie wszystkich napraw.

Przed uruchomieniem poleceń HBCK2 należy uruchomić wzorzec główny. HBCK1 przeprowadził analizę i zgłosił klaster jako dobry lub zły, ale HBCK2 jest mniej niepewny. W hbase-2.x operator określa, co należy naprawić, a następnie używa narzędzi, w tym HBCK2, do naprawy.

HBCK2 a HBCK1

HBCK2 jest następcą HBCK, narzędzia do naprawy dostarczanego z hbase-1.x (znany również jako HBCK1). Można użyć HBCK2 zamiast HBCK1 do naprawy klastrów hbase-2.x. HbCK1 nie należy uruchamiać w instalacji hbase-2.x, ponieważ może to spowodować uszkodzenie. Jego obiekt zapisu (-fix) został usunięty. Może zgłaszać stan klastra hbase-2.x, ale jego oceny są niedokładne, ponieważ nie rozumie wewnętrznych działań hbase-2.x.

HBCK2 nie działa tak, jak HBCK1 używane, nawet w przypadkach, gdy polecenia są podobnie nazwane w dwóch wersjach.

Uzyskiwanie karty HBCK2

Wydanie można znaleźć w katalogu dystrybucji HBase. Aby uzyskać więcej informacji, zobacz stronę pobierania bazy danych HBase.

Główny interfejs użytkownika: raport HBCK

Strona raportu HBCK dodana do wzorca w wersji 2.1.6 pokazuje /hbck.jsp dane wyjściowe z dwóch inspekcji uruchamianych przez wzorzec w interwale. Jednym z nich jest dane wyjściowe po każdym uruchomieniu CatalogJanitor . Jeśli nałoży się na siebie lub otwory zostaną znalezione w hbase:metaelemecie CatalogJanitor , lista znalezionych elementów. Inny proces w tle chore porównuje hbase:meta zawartość systemu plików i . Jeśli znaleziono anomalię, zanotuj ją w sekcji Raport HBCK.

Aby uruchomić polecenie CatalogJanitor, wykonaj polecenie w powłoce hbase: catalogjanitor_run.

Aby uruchomić polecenie hbck chore, wykonaj polecenie w powłoce hbase: hbck_chore_run.

Oba polecenia nie przyjmują żadnych danych wejściowych.

Uruchamianie karty HBCK2

Możesz uruchomić hbck polecenie, uruchamiając je za pomocą skryptu $HBASE_HOME/bin/hbase . Domyślnie po uruchomieniu bin/hbase hbckpolecenia jest uruchamiane wbudowane narzędzia HBCK1. Aby uruchomić hbCK2, należy wskazać wbudowany plik JAR HBCK2 przy użyciu -j opcji , jak w tym przykładzie:

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

To polecenie wyświetla pomoc HBCK2 bez przekazywania opcji lub argumentów.

Polecenia HBCK2

Uwaga

Przetestuj te polecenia w klastrze testowym, aby poznać funkcje przed uruchomieniem ich w środowisku produkcyjnym.

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

Opcje:

  • -o,--override: zastępuje własność przez inną procedurę.
  • -i,--inputFiles: przyjmuje co najmniej jedną zakodowaną nazwę regionu.

Tego raw przypisania można używać nawet podczas inicjowania wzorca (jeśli określono flagę -skip ). Spódnice koprocesory i przekazuje co najmniej jedną zakodowaną nazwę regionu. de00010733901a05f5a2a3a382e27dd4 to przykładowa nazwa regionu zakodowanego przez użytkownika. Przykład:

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

Zwraca identyfikatory PID utworzonego AssignProcedures lub -1, jeśli nie. Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera zakodowane nazwy regionów, po jednym na wiersz. Przykład:

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

Opcje:

  • -o,--override: zastępuje własność przez inną procedurę.
  • -i,--inputFiles: przyjmuje te lub więcej plików wejściowych zakodowanych nazw.

Tego raw nieprzypisania można użyć nawet podczas inicjowania wzorca (jeśli określono flagę -skip ). Spódnice koprocesory i przekazuje co najmniej jedną zakodowaną nazwę regionu. de00010733901a05f5a2a3a382e27dd4 to przykładowa nazwa regionu zakodowanego przez użytkownika. Przykład:

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

Zwraca identyfikatory PID utworzonego UnassignProcedures lub -1, jeśli nie. Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera zakodowane nazwy regionów, po jednym na wiersz. Przykład:

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

Opcje:

  • -o,--override: zastępuje, jeśli procedura jest uruchomiona lub zablokowana.
  • -r,--recursive: pomija rodzica i jego dzieci. Ta opcja jest wolna i kosztowna.
  • -w,--lockWait: czeka milisekundy przed rezygnacją. Wartość domyślna= 1.
  • -i,--inputFiles: pobiera co najmniej jeden plik wejściowy identyfikatorów PID.

Przekazuje co najmniej jeden identyfikator PID procedury, aby przejść do zakończenia procedury. Element nadrzędny pomijanej procedury pomija się do końca. Jednostki pozostają w stanie niespójnym i wymagają ręcznej naprawy. Może być konieczne ponowne uruchomienie wzorca, aby wyczyścić blokady, które są nadal przechowywane. Obejście nie powiedzie się, jeśli procedura ma elementy podrzędne. Dodaj recursive , jeśli wszystko, co masz, jest identyfikatorem PID nadrzędnym, aby zakończyć elementy nadrzędne i podrzędne. Ta opcja jest wolna i niebezpieczna, dlatego należy jej używać selektywnie. Nie zawsze działa.

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

Jeśli -i or --inputFiles jest określona, przekaż co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera identyfikatory PID, po jednym na wiersz. Przykład:

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

Opcja:

  • i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy nazw przestrzeni nazw lub tabel.

Użyj tej opcji, gdy brakuje regionów, hbase:meta ale gdy katalogi są nadal obecne w systemie plików HDFS. To polecenie jest tylko metodą sprawdzania. Jest ona przeznaczona do celów raportowania i nie wykonuje żadnych poprawek. Zawiera on widok regionów (jeśli istnieją) odczytanych do hbase:meta, pogrupowanych według odpowiedniej tabeli lub przestrzeni nazw.

Aby skutecznie odczytywać regiony w meta, uruchom polecenie addFsRegionsMissingInMeta. To polecenie musi hbase:meta być w trybie online. Dla każdej przestrzeni nazw/tabeli przekazanej jako parametr wykonuje różnice między regionami dostępnymi w hbase:meta odniesieniu do katalogów istniejących regionów w systemie plików HDFS. Różnice regionów bez dopasowań są drukowane pogrupowane pod powiązaną nazwą tabeli. Tabele bez brakujących regionów zawierają komunikat "Brak brakujących regionów". Jeśli nie określono przestrzeni nazw lub tabeli, sprawdza wszystkie istniejące regiony.

Akceptuje kombinację wielu przestrzeni nazw i tabel. Nazwy tabel powinny zawierać część przestrzeni nazw, nawet w przypadku tabel w domyślnej przestrzeni nazw. W przeciwnym razie przyjmuje wartość przestrzeni nazw. W tym przykładzie są wyzwalane brakujące raporty regionów dla tabel table_1 i table_2, w domyślnej przestrzeni nazw:

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

W tym przykładzie jest wyzwalany raport brakujących regionów dla tabeli table_1 w domyślnej przestrzeni nazw oraz dla wszystkich tabel z przestrzeni nazw 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

Zwraca listę brakujących regionów dla każdej tabeli przekazanej jako parametr lub dla każdej tabeli w przestrzeniach nazw określonych jako parametr. Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <NAMESPACE|NAMESPACE:TABLENAME>wartość , jedną na wiersz. Przykład:

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

Opcja:

  • -i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy nazw tabel przestrzeni nazw, które mają być używane, gdy brakuje regionów, hbase:meta ale katalogi są nadal obecne w systemie plików HDFS. Musi hbase:meta być w trybie online.

Dla każdej nazwy tabeli przekazanej jako parametr wykonuje różnice między regionami dostępnymi w hbase:meta systemach plików HDFS i regionach. Następnie dla dirs bez hbase:meta dopasowań odczytuje regioninfo plik metadanych i ponownie tworzy określony region w .hbase:meta Regiony są ponownie tworzone w stanie ZAMKNIĘTY w hbase:meta tabeli, ale nie w pamięci podręcznej Masters . Nie są one też przypisane. Aby uzyskać te regiony w trybie online, uruchom polecenie HBCK2 assigns wydrukowane po zakończeniu tego polecenia.

Jeśli używasz wersji hbase starszych niż 2.3.0, przed wykonaniem zestawu danych wyjściowych assigns jest wymagane ponowne uruchomienie HMasters. W tym przykładzie dodano brakujące regiony dla tabel tbl_1 w domyślnej przestrzeni nazw tbl_2 , w przestrzeni nazw n1i dla wszystkich tabel z przestrzeni n2nazw :

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

Zwraca karty HBCK2 i assigns polecenie ze wszystkimi ponownie zainstalowanymi regionami. Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <NAMESPACE|NAMESPACE:TABLENAME>wartość , jedną na wiersz. Przykład:

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

Opcje:

  • -f, --fix: naprawia meta przez usunięcie wszystkich znalezionych dodatkowych regionów.
  • -i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy nazw przestrzeni nazw lub tabel.

Raportuje regiony obecne, hbase:meta ale bez powiązanych katalogów w systemie plików. Musi hbase:meta być w trybie online. Dla każdej nazwy tabeli przekazanej jako parametr wykonuje różnice między regionami dostępnymi w hbase:meta regionach i dirs regionów w określonym systemie plików. Jeśli ta opcja została przekazana, dodatkowe regiony zostaną usunięte z metadanych --fix .

Uwaga

Przed podjęciem --fix decyzji o użyciu opcji warto sprawdzić, czy zgłoszone dodatkowe regiony nakładają się na istniejące prawidłowe regiony. Jeśli tak, extraRegionsInMeta --fix to jest optymalne rozwiązanie. assigns W przeciwnym razie polecenie jest prostszym rozwiązaniem. Spowoduje to ponowne utworzenie katalogów regionów w systemie plików, jeśli nie istnieją.

W tym przykładzie są wyzwalane dodatkowe raporty dotyczące regionów w table_1 ramach domyślnej przestrzeni nazw oraz dla wszystkich tabel z przestrzeni nazw 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

W tym przykładzie są wyzwalane dodatkowe raporty dotyczące regionów w table_1 domyślnej przestrzeni nazw oraz dla wszystkich tabel z przestrzeni nazw ns1 z opcją naprawy:

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

Zwraca listę dodatkowych regionów dla każdej tabeli przekazanej jako parametr lub dla każdej tabeli w przestrzeniach nazw określonych jako parametr. Jeśli -i or --inputFiles jest określona, przekaż co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <NAMESPACE|NAMESPACE:TABLENAME>wartość , jedną na wiersz. Przykład:

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

Uwaga

Ta opcja nie działa dobrze z bazą danych HBase 2.1.6. Nie zalecamy używania go w klastrze HBase 2.1.6.

Wykonaj poprawkę po stronie serwera o nieprawidłowym lub niespójnym stanie w pliku hbase:meta. Interfejs użytkownika głównego ma pasującą nową HBCK Report kartę, która zrzuty raportów generowanych przez najnowszy przebieg catalogjanitor i nowy hbck choreelement .

Ważne jest, aby hbase:meta najpierw zrobić zdrowe przed dokonaniem innych napraw. Naprawia on holes i overlaps, tworząc katalogi regionów (puste) w systemie plików HDFS w celu dopasowania regionów dodanych do systemu hbase:meta.

To polecenie nie jest takie samo jak stare polecenie hbck1 o podobnej nazwie. Działa w odniesieniu do raportów generowanych przez ostatnie catalog_janitor i hbck chore uruchomione. Jeśli nie ma nic do naprawienia, przebieg jest pętlą. W przeciwnym razie, jeśli interfejs HBCK Report użytkownika zgłasza problemy, przebieg fixMeta czyszczenia hbase:meta problemów.

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

generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>

To polecenie próbuje naprawić tabelę oddzieloną, generując brakujący plik deskryptora tabeli. To polecenie nie ma wpływu, jeśli brakuje folderu tabeli lub jeśli .tableinfo istnieje. (Nie zastępujemy istniejących deskryptorów tabel). To polecenie najpierw sprawdza, czy TableDescriptor jest buforowany w bazie danych HBase Master, w którym przypadku jest odpowiednio odzyskiwane .tableinfo . Jeśli TableDescriptor plik główny nie jest buforowany, tworzy plik domyślny .tableinfo z następującymi elementami:

  • Nazwa tabeli.
  • Lista rodzin kolumn jest określana na podstawie systemu plików.
  • Domyślne właściwości zarówno dla , jak TableDescriptor i ColumnFamilyDescriptors. .tableinfo Jeśli plik został wygenerowany przy użyciu domyślnych parametrów, upewnij się, że właściwości rodziny tabel lub kolumn zostały później zaznaczone. (W razie potrzeby zmień je). Ta metoda nie zmienia niczego w bazie HBase. Zapisuje tylko nowy .tableinfo plik w systemie plików. Na przykład ServerCrashProcedures w przypadku tabel oddzielonych może być konieczne naprawienie błędu po wygenerowaniu brakujących plików informacji o tabeli.
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>...]

Opcje:

  • -f, --fix: rozwiązuje wszelkie znalezione problemy z replikacją.
  • -i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy nazw tabel.

Szuka nieukończonych kolejek replikacji i usuwa je, jeśli została przekazana --fix opcja. Przekazuje nazwę tabeli, aby sprawdzić barierę replikacji i przeczyścić, jeśli --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

Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <TABLENAME>wartość , jedną na wiersz. Przykład:

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

Opcja:

  • -i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy zakodowanych nazw regionów i stanów.

Możliwe stany regionów:

  • OFFLINE
  • OTWORZENIEM
  • OTWARTE
  • CLOSIN
  • ZAMKNIĘTE
  • DZIELENIE
  • SPLIT
  • FAILED_OPEN
  • FAILED_CLOSE
  • SCALANIE
  • SCALONE
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Ostrzeżenie

Ta ryzykowna opcja jest przeznaczona tylko do użytku w ostateczności.

Przykładowe scenariusze obejmują nieprzypisane lub przypisania, których nie można przenieść do przodu, ponieważ region jest w stanie niespójnym w elemecie hbase:meta. Na przykład polecenie może kontynuować tylko wtedy, unassigns gdy zostanie przekazany region w jednym z następujących stanów: SPLITTING, SPLIT, SCALE, OPEN lub CLOSING.

Przed ręcznym ustawieniem stanu regionu za pomocą tego polecenia należy certyfikować, że ten region nie jest obsługiwany przez uruchomioną procedurę, taką jak assign lub split. Aby uzyskać widok uruchamiania procedur w powłoce hbase, użyj list_procedures polecenia . W tym przykładzie region de00010733901a05f5a2a3a382e27dd4 jest ustawiany 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

Zwraca wartość 0 , jeśli stan regionu uległ zmianie i 1 w inny sposób. Jeśli -i or --inputFiles jest określona, przekaż co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <ENCODED_REGIONNAME> <STATE>jedną parę na wiersz. Przykład:

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

Opcja:

  • -i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy nazw tabel i stanów.

Możliwe stany tabeli to WŁĄCZONE, WYŁĄCZONE, WYŁĄCZANIE I WŁĄCZANIE.

Aby odczytać bieżący stan tabeli, uruchom polecenie w powłoce hbase:

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

Wartość x08x00 == ENABLED, x08x01 == DISABLED itp. Można go również uruchomić describe <TABLENAME> w wierszu polecenia powłoki. W tym przykładzie nazwa tabeli jest włączona przez użytkownika:

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

Zwraca wartość niezależnie od poprzedniego stanu tabeli. Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <TABLENAME> <STATE>jedną parę na wiersz. Przykład:

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

Opcja:

  • -i,--inputFiles: przyjmuje co najmniej jeden plik wejściowy nazw serwerów.

Zaplanuj ServerCrashProcedure(SCP) listę .RegionServers Sformatuj nazwę serwera jako <HOSTNAME>,<PORT>,<STARTCODE>. (Zobacz interfejs użytkownika bazy danych HBase/dzienniki).

W tym przykładzie użyto metody 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

Zwraca identyfikatory PID utworzonego lub -1, jeśli nie zostanie utworzona ServerCrashProcedures żadna procedura. (Zobacz Dzienniki wzorca, aby dowiedzieć się, dlaczego tak nie jest). Obsługa poleceń jest dodawana w bazie danych HBase w wersji 2.0.3, 2.1.2, 2.2.0 lub nowszej. Jeśli -i or --inputFiles zostanie określony, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <SERVERNAME>jeden na wiersz. Przykład:

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

Rozwiązywanie problemów

Ta sekcja ułatwia rozwiązywanie typowych problemów.

Zasady ogólne

Podczas naprawy upewnij się, że hbase:meta jest ona spójna najpierw przed rozwiązaniem dowolnego innego typu problemu, takiego jak dewastacja systemu plików. Deviance w systemie plików lub problemy z przypisywaniem należy rozwiązać po hbase:meta wprowadzeniu kolejności. Jeśli hbase:meta występują problemy, wzorzec nie może umieszczać odpowiednich miejsc, gdy przyjmuje oddzielone dane systemu plików lub tworzy przypisania regionów.

Nie można przypisać regionu, jeśli znajduje się on w stanie ZAMYKANIA (lub odwrotnie, nieprzypisane, jeśli jest w stanie OTWARCIA) bez uprzedniego przejścia za pośrednictwem funkcji ZAMKNIĘTE. Regiony muszą zawsze przechodzić z ZAMKNIĘTE, do OTWIERAJĄCE, OTWARTE, a następnie zamykać i zamykać.

Podczas naprawy napraw tabele są naprawiane pojedynczo.

Jeśli tabela jest wyłączona, nie można przypisać regionu. W dziennikach master widać, że raporty master pominięte, ponieważ tabela jest wyłączona. Możesz przypisać region, ponieważ jest on obecnie w stanie OTWARCIA i chcesz, aby był on w stanie ZAMKNIĘTY, aby zgadzał się ze stanem WYŁĄCZONE tabeli. W takiej sytuacji może być konieczne tymczasowe ustawienie stanu tabeli na WARTOŚĆ ENABLED, aby można było przypisać. Następnie ponownie ustawisz ją ponownie po instrukcji unassign. HBCK2 ma obiekt, aby umożliwić tę zmianę. Zobacz dane wyjściowe użycia HBCK2.

Przypisywanie i anulowanie przypisania

Ogólnie rzecz biorąc, przy przypisaniu wzorzec będzie się powtarzać, dopóki nie powiedzie się. Przypisanie przyjmuje wyłączną blokadę w regionie. Blokada uniemożliwia współbieżne przypisanie lub anulowanie przypisania z uruchamiania. Przypisanie względem zablokowanego regionu czeka na zwolnienie blokady przed postępem.

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.

Nie można kontynuować uruchamiania wzorca, ponieważ nie ma procedury przypisywania hbase:meta (lub hbase:namespace). Aby wstrzyknąć jeden, użyj narzędzia HBCK2:

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

W tym przykładzie 1588230740 jest zakodowaną nazwą hbase:meta regionu. -skip Przekaż opcję zatrzymania karty HBCK2 przed sprawdzeniem wersji względem zdalnego wzorca. Jeśli zdalny serwer główny nie jest w trybie roboczym, sprawdzanie wersji wyświetli monit Master is initializing response lub PleaseHoldException i pominie próbę przypisania. Polecenie -skip pozwala uniknąć sprawdzania wersji i ląduje zaplanowane przypisanie.

Taka sama może się zdarzyć w tabeli systemowej hbase:namespace . Poszukaj nazwy zakodowanego hbase:namespace regionu regionu i wykonaj podobne kroki do tego, co zrobiliśmy dla hbase:metaelementu . W tym ostatnim przypadku wzorzec faktycznie wyświetla pomocny komunikat, który wygląda następująco:

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.

Aby zaplanować przypisanie tabeli hbase:namespace zanotowaną w poprzednim wierszu dziennika:

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

Przekaż zakodowaną nazwę regionu przestrzeni nazw. (Nazwa zakodowana różni się w zależności od wdrożenia).

Brakujące regiony w bazie hbase:meta region/przywracanie/przywracanie tabeli/ponowne kompilowanie

Niektóre nietypowe przypadki miały regiony tabeli usunięte z hbase:meta tabeli. Klasyfikacja w tych przypadkach wykazała, że zostały one wywołane operatorem. Użytkownicy uruchomili przestarzałe narzędzie HBCK1 OfflineMetaRepair względem klastra HBCK2. OfflineMetaRepair to dobrze znane narzędzie do rozwiązywania hbase:meta problemów związanych z tabelą w wersjach HBase 1.x. Oryginalna wersja nie jest zgodna z wersją HBase 2.x lub nowszą i została poddana pewnym korektom. W skrajnych sytuacjach można go teraz uruchomić za pośrednictwem HBCK2.

W większości przypadków brakuje regionów w hbase:meta losowych przypadkach, ale baza hbase może nadal działać. W takich sytuacjach problem można rozwiązać z master online za pomocą addFsRegionsMissingInMeta polecenia w HBCK2. To polecenie jest mniej destrukcyjne dla bazy hbase niż pełna hbase:meta ponowna kompilacja, która jest omówiona później. Można go używać nawet do odzyskiwania regionu tabeli przestrzeni nazw.

Dodatkowe regiony w bazie hbase:meta region/przywracanie/przywracanie tabeli/ponowne kompilowanie

Mogą również wystąpić sytuacje, w których regiony tabeli zostały usunięte w systemie plików, ale nadal mają powiązane wpisy w hbase:meta tabeli. Ten scenariusz może wystąpić z powodu problemów z dzieleniem, błędami operacji ręcznej (takimi jak usuwanie lub ręczne przenoszenie dir regionu), a nawet problemy z utratą danych metadanych, takie jak HBASE-21843.

Takie problemy można rozwiązać za pomocą wzorca online za pomocą extraRegionsInMeta --fix polecenia w HBCK2. To polecenie jest mniej destrukcyjne dla bazy hbase niż pełna hbase:meta ponowna kompilacja, która jest omówiona później. Jest to również przydatne w przypadku wersji, które nie obsługują fixMeta opcji HBCK2 (wszystkie wersje wcześniejsze niż 2.0.6, 2.1.6, 2.2.1, 2.3.0 lub 3.0.0).

Online hbase:meta rebuild przepis

Jeśli hbase:meta uszkodzenie nie jest zbyt krytyczne, baza hbase nadal może przenieść ją do trybu online. Nawet jeśli region przestrzeni nazw znajduje się wśród brakujących regionów, możliwe jest skanowanie hbase:meta w okresie inicjowania, w którym master oczekuje na przypisanie przestrzeni nazw. Aby sprawdzić tę sytuację, hbase:meta można wykonać polecenie skanowania. Jeśli nie upłynął limit czasu ani nie pokaże żadnych błędów, element hbase:meta jest w trybie online:

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

HbCK2 addFsRegionsMissingInMeta można użyć, jeśli komunikat nie wyświetla żadnych błędów. Odczytuje on informacje o metadanych regionu dostępne w katalogach regionów usług FS w celu ponownego utworzenia regionów w programie hbase:meta. Ponieważ może działać z bazą hbase częściowo operacyjną, próbuje wyłączyć tabele online, których dotyczy zgłoszony problem, i będzie odczytywać regiony do hbase:meta. Może on sprawdzać określone tabele lub przestrzenie nazw albo wszystkie tabele ze wszystkich przestrzeni nazw. W tym przykładzie pokazano dodawanie brakujących regionów dla tabel tbl_1 w domyślnej przestrzeni nazw, tbl_2 w przestrzeni n1nazw i dla wszystkich tabel z przestrzeni nazw 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

Ponieważ działa on niezależnie od wzorca, po pomyślnym zakończeniu działania więcej kroków jest wymaganych do przypisania odczytanych regionów. Te komunikaty są wyświetlane w następujący sposób:

  • addFsRegionsMissingInMeta zwraca polecenie przypisuje polecenie ze wszystkimi regionami, które zostały odczytane. To polecenie należy wykonać później, dlatego skopiuj i zapisz je dla wygody.
  • W przypadku wersji HBase wcześniejszych niż 2.3.0 po addFsRegionsMissingInMeta pomyślnym zakończeniu i zapisaniu danych wyjściowych uruchom ponownie wszystkie uruchomione wzorce HBase.

Po ponownym uruchomieniu wzorca i hbase:meta jest już w trybie online (sprawdź, czy internetowy interfejs użytkownika jest dostępny), uruchom polecenie przypisywania z addFsRegionsMissingInMeta danych wyjściowych zapisanych wcześniej.

Uwaga

Jeśli region przestrzeni nazw znajduje się wśród brakujących regionów, musisz dodać flagę --skip na początku zwróconego polecenia assigns.

Jeśli klaster cierpi na katastrofalną utratę hbase:meta tabeli, szorstka ponowna kompilacja jest możliwa przy użyciu następującego przepisu. W konspekcie zatrzymamy klaster. Uruchom narzędzie HBCK2 OfflineMetaRepair, które odczytuje katalogi i metadane porzucane do systemu plików i dokłada wszelkich starań, aby odtworzyć opłacalną hbase:met tabelę. Uruchom ponownie klaster. Wstrzykiwanie przypisania w celu przeniesienia tabeli przestrzeni nazw systemu do trybu online. Na koniec przypisz ponownie tabele przestrzeni użytkownika, które chcesz włączyć. (Utworzony ponownie hbase:meta tworzy tabelę ze wszystkimi tabelami w trybie offline i bez przypisanych regionów).

Szczegółowy przepis na ponowne kompilowanie

Uwaga

Użyj tej opcji tylko w ostateczności. Nie zalecamy tego.

  • Zatrzymaj klaster.

  • Uruchom polecenie odbudować hbase:meta z hbCK2. To polecenie przenosi się na bok hbase:meta i umieszcza w miejscu nowo przebudowany. W tym przykładzie pokazano, jak uruchomić narzędzie. Dodaje flagę tak -details , aby informacje o zrzutach narzędzi na temat regionów znalezionych w systemie plików 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
    
  • Uruchom klaster. Nie zostanie on w pełni uruchomiony. Jest ona zablokowana, ponieważ tabela przestrzeni nazw nie jest w trybie online i nie ma procedury przypisywania w magazynie procedur dla tej sytuacji. W dzienniku głównym bazy danych HBase jest wyświetlany ten stan. W tym przykładzie przedstawiono dzienniki:

    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.
    

    Aby przypisać region tabeli przestrzeni nazw, nie można użyć powłoki. Jeśli używasz powłoki, kończy się niepowodzeniem, PleaseHoldException ponieważ wzorzec nie jest jeszcze skonfigurowany. (Czeka na przejście tabeli przestrzeni nazw do trybu online, zanim zadeklaruje się "w górę"). Należy użyć polecenia HBCK2. Do przypisania potrzebna jest nazwa zakodowana w przestrzeni nazw. Jest on wyświetlany w cytowanym dzienniku. To w 725a0fe6c2c869d3d0a9ed82bfa80fa3 tym przypadku. Należy przekazać polecenie , -skip aby pominąć sprawdzanie wersji głównej. (Bez niego twoje wywołanie HBCK2 wywołuje, ponieważ PleaseHoldException Master nie jest jeszcze.) W tym przykładzie dodano przypisanie tabeli przestrzeni nazw:

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

    Jeśli wywołanie wróci z elementem Connection refused, czy wzorzec jest w górę? Wzorzec zamyka się po pewnym czasie, jeśli nie może się zainicjować. Uruchom ponownie klaster/serwer główny i uruchom ponownie polecenie assigns.

  • Po pomyślnym uruchomieniu przypisania zobaczysz, że emituje on coś podobnego do poniższego przykładu. Na 48 końcu znajduje się identyfikator PID harmonogramu procedury przypisywania. Jeśli zwrócony identyfikator PID to -1, uruchomienie wzorca nie postępuje wystarczająco, więc ponów próbę. Lub zakodowana nazwa regionu może być niepoprawna, więc sprawdź, czy ten problem występuje.

    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]
    
  • Sprawdź dzienniki główne. Mistrz powinien się wymyślić. Zobaczysz pomyślne zakończenie piD=48. Wyszukaj wiersz podobny do tego przykładu, aby zweryfikować pomyślne uruchomienie wzorca:

    master.HMaster: Master has completed initialization 132.515sec
    

    Może upłynąć trochę czasu.

    Ponowne kompilowanie powoduje hbase:meta dodanie tabel użytkowników w stanie WYŁĄCZONE i regionów w trybie ZAMKNIĘTY. Ponownie włączyć tabele za pośrednictwem powłoki, aby przywrócić wszystkie regiony tabeli do trybu online. Zrób to pojedynczo lub zobacz polecenie włącz wszystkie ".*", aby włączyć wszystkie tabele jednocześnie.

    Brak edycji metadanych ponownej kompilacji i może wymagać późniejszej naprawy i czyszczenia przy użyciu obiektu opisanego wcześniej w tym artykule.

Porzucone pliki referencyjne, brak pliku hbase.version i uszkodzone pliki

HBCK2 może sprawdzać zawieszające się odwołania i uszkodzone pliki. Możesz poprosić go o nieprawidłowe pliki linii bocznej, co może być konieczne, aby przejąć humps, w których regiony nie będą w trybie online lub operacje odczytu kończą się niepowodzeniem. Zobacz polecenie systemu plików na liście HBCK2. Przekaż co najmniej jedną nazwę tabeli (lub użyj polecenia none , aby sprawdzić wszystkie tabele). Zgłaszane są nieprawidłowe pliki. --fix Przekaż opcję naprawy.

Ponowne uruchomienie procedury

W ostateczności, jeśli Mistrz jest zrozpaczony i wszystkie próby naprawy tylko okazać się niepodważalne zamki lub procedury, które nie mogą zakończyć, lub jeśli zestaw MasterProcWALs jest rośnie bez granic, możliwe jest wyczyszczenie stanu master. Przenieś katalog na /hbase/MasterProcWALs/ bok w ramach instalacji bazy danych HBase i uruchom ponownie proces główny. Wraca jako format tabelaryczny bez pamięci.

Jeśli w momencie wymazywania wszystkie regiony zostały szczęśliwie przypisane lub w trybie offline, po ponownym uruchomieniu serwera głównego serwer główny powinien pobrać i kontynuować tak, jakby nic się nie stało. Jeśli jednak w tym czasie istniały regiony przejściowe, operator musi interweniować, aby przypisać zaległe lub nieprzypisane do punktu końcowego.

hbase:metainfo:state Przeczytaj kolumny zgodnie z opisem, aby określić, co należy przypisać lub nieprzypisane. Po wymazaniu całej historii przez przeniesienie MasterProcWALsobiektu żadna z jednostek nie powinna być zablokowana, więc możesz przypisywać zbiorczo lub nie przypisywać.