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 USŁUGI HBCK2
HBCK2 to obecnie proste narzędzie, 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 niedorzeczny. 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ędziem do naprawy dostarczanym z hbase-1.x (znanym również jako HBCK1). Można użyć HBCK2 zamiast HBCK1 do napraw w klastrach hbase-2.x. HbCK1 nie należy uruchamiać przed instalacją 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 funkcji 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 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 wyświetla /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 znajdują się w hbase:meta
pliku , CatalogJanitor
wyświetla listę 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 usługi HBCK2
Polecenie można uruchomić hbck
, uruchamiając je za pomocą skryptu $HBASE_HOME/bin/hbase
. Domyślnie po uruchomieniu bin/hbase hbck
polecenia jest uruchamiane wbudowane narzędzie HBCK1. Aby uruchomić kartę HBCK2, należy wskazać wbudowany plik JAR HBCK2 przy użyciu opcji , jak w tym przykładzie -j
:
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 zrozumieć funkcjonalność 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ódnica coprocesorów i przekazuje co najmniej jedną zakodowaną nazwę regionu. de00010733901a05f5a2a3a382e27dd4
to przykładowa nazwa regionu zakodowanego przez użytkownika. Na 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 on identyfikatory PID utworzonego AssignProcedures
lub -1, jeśli nie. Jeśli -i or --inputFiles
zostanie określona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera zakodowane nazwy regionów, po jednym na wiersz. Na 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 pliki wejściowe zakodowanych nazw lub więcej.
Tego raw
nieprzypisania można używać nawet podczas inicjowania wzorca (jeśli określono flagę -skip
). Spódnica coprocesorów i przekazuje co najmniej jedną zakodowaną nazwę regionu. de00010733901a05f5a2a3a382e27dd4
to przykład tego, jak wygląda nazwa zakodowanego regionu zakodowanego przez użytkownika. Na 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 on identyfikatory PID utworzonego UnassignProcedures
lub -1, jeśli nie. Jeśli -i or --inputFiles
zostanie określona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera zakodowane nazwy regionów, po jednym na wiersz. Na 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 element nadrzędny i jego elementy podrzędne. Ta opcja jest niska i kosztowna.-w,--lockWait
: Czeka milisekundy przed rezygnacją. Default=1.-i,--inputFiles
: pobiera jeden lub więcej plików wejściowych 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 kończy się niepowodzeniem, jeśli procedura zawiera elementy podrzędne. Dodaj recursive
, jeśli wszystko, co masz, jest nadrzędnym identyfikatorem PID, aby zakończyć element nadrzędny i elementy podrzędne. Ta opcja jest niska 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. Na 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 jeden lub więcej plików wejściowych 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 istniejących regionów w systemach HDFS. Diry regionów bez dopasowań są drukowane pogrupowane pod powiązaną nazwą tabeli. Tabele bez brakujących regionów zawierają komunikat "brakujących regionów". Jeśli nie określono żadnej 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ślona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <NAMESPACE|NAMESPACE:TABLENAME>
jeden na wiersz. Na 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 regionami. Następnie w przypadku dirs bez hbase:meta
dopasowań odczytuje regioninfo
plik metadanych i ponownie tworzy określony region w programie 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 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
Zwraca wartość HBCK2 i assigns
polecenie ze wszystkimi ponownie zainstalowanymi regionami. Jeśli -i or --inputFiles
zostanie określona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <NAMESPACE|NAMESPACE:TABLENAME>
jeden na wiersz. Na 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 dodatkowych regionów.-i,--inputFiles
: przyjmuje jeden lub więcej plików wejściowych 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 różnicami regionów w określonym systemie plików. Jeśli ta opcja zostanie 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 dirs regionów w systemie plików, jeśli nie istnieją.
W tym przykładzie są wyzwalane dodatkowe raporty regionów dla table_1
obszaru nazw domyślnego 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>
jeden na wiersz. Na 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 w wersji 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 zgodną 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 było w dobrej kondycji przed dokonaniem innych napraw. Naprawia ona katalogi regionów holes
i overlaps
, tworząc katalogi regionów (puste) w systemie plików HDFS w celu dopasowania regionów dodanych do hbase:meta
elementu .
To polecenie nie jest takie samo jak stare polecenie hbck1 , które jest podobnie nazwane. Działa w odniesieniu do raportów wygenerowanych 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 użytkownika HBCK Report
zgłasza problemy, przebieg fixMeta
wyjaśnień 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
jest obecny. (Nie zastępujemy istniejących deskryptorów tabeli). To polecenie najpierw sprawdza, czy TableDescriptor
jest buforowany w bazie danych HBase Master, w takim 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 została określona na podstawie systemu plików.
- Właściwości domyślne 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. (Zmień je w razie potrzeby). 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 usunięcie 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.
Wyszukuje nieukończone kolejki 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ślona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <TABLENAME>
jeden na wiersz. Na 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
- OTWARCIE
- OTWÓRZ
- CLOSIN
- ZAMKNIĘTE
- DZIELENIE
- ROZSZCZEPIAĆ
- FAILED_OPEN
- FAILED_CLOSE
- SCALANIE
- SCALONE
- SPLITTING_NEW
- MERGING_NEW
- ABNORMALLY_CLOSED
Ostrzeżenie
Ta ryzykowna opcja jest przeznaczona do użytku tylko w ostateczności.
Przykładowe scenariusze obejmują nieprzypisane lub przypisania, które nie mogą przejść 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
. Widok uruchomionych procedur można uzyskać w powłoce list_procedures
hbase przy użyciu polecenia . W tym przykładzie region de00010733901a05f5a2a3a382e27dd4
jest ustawiany na WARTOŚĆ 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. Na 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ŁĄCZAJĄCE i WŁĄCZONE.
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 on dowolny stan poprzedniej tabeli. Jeśli -i or --inputFiles
zostanie określona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <TABLENAME> <STATE>
jedną parę na wiersz. Na 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
: pobiera 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/dzienniki bazy danych HBase).
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 on identyfikatory PID utworzonego ServerCrashProcedures
lub -1, jeśli nie zostanie utworzona żadna procedura. (Zobacz Dzienniki główne, 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ślona, przekazuje co najmniej jedną nazwę pliku wejściowego. Każdy plik zawiera <SERVERNAME>
jeden na wiersz. Na 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 to spójne najpierw przed rozwiązaniem dowolnego innego typu problemu, takiego jak odchylenie systemu plików. Odchylenie w systemie plików lub problemy z przypisywaniem należy rozwiązać po hbase:meta
wprowadzeniu w kolejności. Jeśli hbase:meta
występują problemy, wzorzec nie może dokonać odpowiednich umieszczania, gdy przyjmuje oddzielone dane systemu plików lub wykonuje przypisania regionów.
Nie można przypisać regionu, jeśli znajduje się w stanie ZAMYKANIE (lub odwrotnie, nieprzypisane, jeśli w stanie OTWIERANIA) bez wcześniejszego przejścia za pośrednictwem funkcji CLOSED. Regiony muszą zawsze przechodzić z ZAMKNIĘTE, do OTWIERANE, a następnie ZAMYKAĆ i ZAMYKAĆ.
Podczas naprawy należy naprawić tabele pojedynczo.
Jeśli tabela jest wyłączona, nie można przypisać regionu. W dziennikach wzorca widać, że raporty główne pominięte, ponieważ tabela jest wyłączona. Możesz przypisać region, ponieważ jest on obecnie w stanie OTWIERANIE 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ŚĆ WŁĄCZONE, aby można było wykonać przypisanie. Następnie ponownie ustawisz go 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 zakończy się pomyślnie. Przypisanie przyjmuje wyłączną blokadę w regionie. Blokada uniemożliwia równoczesne przypisanie lub anulowanie przypisania z działania. Przypisanie względem zablokowanego regionu czeka na zwolnienie blokady przed dokonaniem postępu.
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.
Serwer główny nie może kontynuować uruchamiania, ponieważ nie ma procedury przypisywania hbase:meta
(lub hbase:namespace
). Aby go wstrzyknąć, 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 w celu sprawdzenia 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 zakodowanej hbase:namespace
nazwy regionu i wykonaj podobne kroki, co zrobiliśmy dla elementu hbase:meta
. 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 dla hbase:namespace
tabeli 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. (Zakodowana nazwa różni się w zależności od wdrożenia).
Brak regionów w hbase:meta region/przywracanie/ponowne kompilowanie tabeli
Niektóre nietypowe przypadki miały usunięte regiony tabeli 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 tabelami w wersjach HBase 1.x. Oryginalna wersja nie jest zgodna z wersją HBase 2.x lub nowszą i przeszła pewne korekty. W skrajnych sytuacjach można go teraz uruchamiać za pośrednictwem HBCK2.
W większości przypadków regiony w końcu brakuje w hbase:meta
losowych miejscach, 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 danych 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 hbase:meta region/przywracanie/ponowne kompilowanie tabeli
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 podziałem, błędami operacji ręcznych (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ć z master online za pomocą extraRegionsInMeta --fix
polecenia w HBCK2. To polecenie jest mniej destrukcyjne dla bazy danych 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, hbase nadal może przenieść go 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 wzorzec czeka 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 regionów dostępnych w katalogach regionów usług FS w celu ponownego utworzenia regionów w programie hbase:meta
. Ponieważ może działać z bazą danych 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 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
Ponieważ działa niezależnie od wzorca, po pomyślnym zakończeniu należy przypisać więcej kroków do przypisanych odczytanych regionów. Te komunikaty są wyświetlane w następujący sposób:
addFsRegionsMissingInMeta
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
przejściu do trybu online (sprawdź, czy internetowy interfejs użytkownika jest dostępny), uruchom polecenie assigns 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 poniesie katastrofalną utratę hbase:meta
tabeli, możliwa jest szorstka ponowna kompilacja przy użyciu następującego przepisu. W konspekcie zatrzymamy klaster. Uruchom narzędzie HBCK2 OfflineMetaRepair, które odczytuje katalogi i metadane porzucone w systemie plików i sprawia, że najlepiej jest rekonstruować realną hbase:met
tabelę. Uruchom ponownie klaster. Wstrzykiwanie przypisania w celu przełącznia tabeli przestrzeni nazw systemu do trybu online. Na koniec przypisz ponownie tabele przestrzeni użytkownika, które chcesz włączyć. (Przebudowany tworzy hbase:meta
tabelę ze wszystkimi tabelami w trybie offline i bez przypisanych regionów).
Szczegółowy przepis na ponowną kompilację
Uwaga
Użyj tej opcji tylko w ostateczności. Nie zalecamy tego.
Zatrzymaj klaster.
Uruchom polecenie ponownego kompiluj
hbase:meta
z usługi HBCK2. To polecenie przenosi oryginałhbase:meta
na bok i umieszcza nowo przebudowany. W tym przykładzie pokazano, jak uruchomić narzędzie. Dodaje flagę-details
tak, 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 uruchomi się w pełni. Jest zablokowany, ponieważ tabela przestrzeni nazw nie jest w trybie online i nie ma procedury przypisywania w magazynie procedur dla tej awarii. W dzienniku głównym bazy danych HBase jest wyświetlany ten stan. W tym przykładzie pokazano, co rejestruje:
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ę to niepowodzeniem,
PleaseHoldException
ponieważ wzorzec nie jest jeszcze w górę. (Czeka na przejście tabeli przestrzeni nazw do trybu online, zanim zadeklaruje się "w górę"). Musisz użyć polecenia HBCK2 assigns. Do przypisania potrzebna jest zakodowana nazwa przestrzeni nazw. Jest on wyświetlany w cytowanym dzienniku. To725a0fe6c2c869d3d0a9ed82bfa80fa3
w tym przypadku. Należy przekazać-skip
polecenie , aby pominąć sprawdzanie wersji master. (Bez niego wywołanie HBCK2 wywołujePleaseHoldException
, ponieważ 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 zainicjować się. Uruchom ponownie klaster/serwer główny i uruchom ponownie polecenie assigns.Po pomyślnym uruchomieniu przypisywania zobaczysz, że emituje on coś podobnego do poniższego przykładu. Na
48
końcu jest 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 nie 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 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.
Ponowna kompilacja powoduje
hbase:meta
dodanie tabel użytkowników w stanie DISABLED i regionów w trybie ZAMKNIĘTY. Ponownie można włączyć tabele za pośrednictwem powłoki, aby przywrócić wszystkie regiony tabeli do trybu online. Zrób to pojedynczo lub wyświetl polecenie włącz wszystkie ".*", aby włączyć wszystkie tabele jednocześnie.Brak 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 sprawdzić zawieszające się odwołania i uszkodzone pliki. Możesz poprosić go o nieprawidłowe pliki, co może być konieczne, aby przejąć garby, 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 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 głównego. 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 wszystkich regionów zostały szczęśliwie przypisane lub w trybie offline, po ponownym uruchomieniu wzorca wzorzec 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ć w celu przeniesienia zaległych przypisów lub nieprzypisanych 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 odejście MasterProcWALs
od obiektu , żadna z jednostek nie powinna być zablokowana, więc możesz zbiorczo przypisać lub cofnąć przypisanie.