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:meta
elemecie 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 hbck
polecenia 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. Musihbase: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 n1
i dla wszystkich tabel z przestrzeni n2
nazw :
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 chore
element .
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
iColumnFamilyDescriptors
..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ładServerCrashProcedures
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 RegionServer
a.example.org, 29100,1540348649479
:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479
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:meta
elementu . 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 n1
nazw 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 bokhbase: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 w725a0fe6c2c869d3d0a9ed82bfa80fa3
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:meta
info:state
Przeczytaj kolumny zgodnie z opisem, aby określić, co należy przypisać lub nieprzypisane. Po wymazaniu całej historii przez przeniesienie MasterProcWALs
obiektu żadna z jednostek nie powinna być zablokowana, więc możesz przypisywać zbiorczo lub nie przypisywać.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla