Obecna (4.2) wersja CDH — w 100% otwarta dystrybucja Apache Hadoop firmy Cloudera i powiązanych projektów (w tym Apache HBase) — wprowadziła nową funkcję HBase, niedawno wylądowaną w bagażniku, która umożliwia administratorowi zrobienie migawki określonego tabela.
Przed CDH 4.2 jedynym sposobem tworzenia kopii zapasowej lub klonowania tabeli było użycie funkcji Kopiuj/Eksportuj tabelę lub po wyłączeniu tabeli skopiowanie wszystkich plików hw HDFS. Kopiuj/eksportuj tabelę to zestaw narzędzi, które używają MapReduce do skanowania i kopiowania tabeli, ale ma to bezpośredni wpływ na wydajność serwera regionu. Wyłączenie tabeli zatrzymuje wszystkie odczyty i zapisy, co prawie zawsze będzie niedopuszczalne.
Natomiast migawki HBase umożliwiają administratorowi klonowanie tabeli bez kopii danych i przy minimalnym wpływie na serwery regionu. Eksportowanie migawki do innego klastra nie wpływa bezpośrednio na żaden z serwerów regionu; export to tylko distcp z dodatkową logiką.
Oto kilka przypadków użycia migawek HBase:
- Odzyskiwanie po błędach użytkownika/aplikacji
- Przywróć/przywróć ze znanego bezpiecznego stanu.
- Wyświetl poprzednie migawki i selektywnie włącz różnice w produkcję.
- Zapisz migawkę tuż przed główną aktualizacją lub zmianą aplikacji.
- Audyt i/lub raportowanie widoków danych w określonym czasie
- Przechwytuj dane miesięczne w celu zapewnienia zgodności.
- Wygeneruj raporty na koniec dnia/miesiąca/kwartała.
- Testowanie aplikacji
- Testuj zmiany schematu lub aplikacji na danych podobnych do tych w środowisku produkcyjnym na podstawie migawki, a następnie wyrzuć je. Na przykład:zrób migawkę, utwórz nową tabelę z zawartości migawki (schemat plus dane) i manipuluj nową tabelą, zmieniając schemat, dodając i usuwając wiersze itd. (Oryginalna tabela, migawka i nowa tabela pozostają od siebie niezależne).
- Zwolnienie z pracy
- Zrób zrzut, wyeksportuj go do innego klastra i uruchom zadania MapReduce. Ponieważ migawka eksportu działa na poziomie HDFS, nie spowalniasz głównego klastra HBase tak bardzo, jak robi to CopyTable.
Co to jest migawka?
Migawka to zestaw informacji o metadanych, który umożliwia administratorowi powrót do poprzedniego stanu tabeli. Migawka nie jest kopią tabeli; to tylko lista nazw plików i nie kopiuje danych. Pełne przywracanie migawki oznacza, że wracasz do poprzedniego „schematu tabeli” i przywracasz poprzednie dane, tracąc wszelkie zmiany wprowadzone od czasu wykonania migawki.
Operacje
- Zrób zrzut: ta operacja próbuje zrobić zrzut określonej tabeli. Operacja może się nie powieść, jeśli regiony poruszają się podczas równoważenia, dzielenia lub łączenia.
- Klonuj zrzut: ta operacja tworzy nową tabelę przy użyciu tego samego schematu i tych samych danych obecnych w określonym zrzucie. Wynikiem tej operacji jest nowa, w pełni funkcjonalna tabela, którą można modyfikować bez wpływu na oryginalną tabelę lub migawkę.
- Przywróć zrzut: ta operacja przywraca schemat tabeli i dane do stanu zrzutu. (Uwaga:ta operacja odrzuca wszelkie zmiany wprowadzone od czasu wykonania zrzutu).
- Usuń zrzut: ta operacja usuwa zrzut z systemu, zwalniając nieudostępnione miejsce na dysku, bez wpływu na klony i inne zrzuty.
- Eksportuj zrzut: ta operacja kopiuje dane zrzutu i metadane do innego klastra. Operacja obejmuje tylko HDFS, więc nie ma komunikacji z serwerami głównymi lub regionalnymi, a zatem klaster HBase może być wyłączony.
Migawka bez kopii, przywracanie, klonowanie
Główną różnicą między migawką a kopią tabeli/eksportu jest to, że operacje migawkowe zapisują tylko metadane. W grę nie wchodzą żadne masowe kopie danych.
Jedną z głównych zasad projektowania HBase jest to, że raz napisany plik nigdy nie będzie modyfikowany. Posiadanie niezmiennych plików oznacza, że migawka śledzi tylko pliki używane w momencie operacji migawki, a podczas kompaktowania obowiązkiem migawki jest poinformowanie systemu, że plik nie powinien być usuwany, ale powinien zostać zarchiwizowany.
Ta sama zasada dotyczy operacji klonowania lub przywracania. Ponieważ pliki są niezmienne, tworzona jest nowa tabela zawierająca tylko „łącza” do plików, do których odwołuje się migawka.
Eksportuj migawkę to jedyna operacja, która wymaga kopii danych, ponieważ drugi klaster nie ma plików danych.
Eksportuj migawkę a kopiuj/eksportuj tabelę
Oprócz lepszych gwarancji spójności, które może zapewnić migawka w porównaniu z zadaniem kopiowania/eksportowania, główną różnicą między eksportowaniem migawki a kopiowaniem/eksportowaniem tabeli jest to, że ExportSnapshot działa na poziomie HDFS. Oznacza to, że serwery Master i Region Server nie biorą udziału w tej operacji. W konsekwencji nie są tworzone niepotrzebne pamięci podręczne dla danych i nie ma wyzwalania dodatkowych przerw GC ze względu na liczbę obiektów utworzonych podczas procesu skanowania. Wpływ na wydajność klastra HBase wynika z dodatkowego obciążenia sieci i dysków, którego doświadczają DataNodes.
HBase Shell:operacje migawkowe
Potwierdź, że obsługa migawek jest włączona, sprawdzając, czy hbase.snapshot.enabled
właściwość w hbase-site.xml jest ustawiona na true. Aby zrobić zrzut określonej tabeli, użyj snapshot
Komenda. (Żadne kopie plików nie są wykonywane)
hbase> snapshot ‘tableName’, ‘snapshotName’
Aby wyświetlić listę wszystkich migawek, użyj list_snapshot
Komenda. wyświetli nazwę migawki, tabelę źródłową oraz datę i godzinę utworzenia.
hbase> list_snapshots SNAPSHOT TABLE + CREATION TIME TestSnapshot TestTable (Mon Feb 25 21:13:49 +0000 2013)
Aby usunąć zrzut, użyj delete_snapshot
Komenda. Usunięcie zrzutu nie ma wpływu na sklonowane tabele ani inne kolejne zrobione zrzuty.
hbase> delete_snapshot 'snapshotName'
Aby utworzyć nową tabelę z określonego zrzutu (klon), użyj clone_snapshot
Komenda. Żadne kopie danych nie są wykonywane, więc nie musisz używać dwa razy więcej miejsca na te same dane.
hbase> clone_snapshot 'snapshotName', 'newTableName'
Aby zastąpić bieżący schemat/dane tabeli określoną zawartością zrzutu, użyj restore_snapshot
polecenie.
hbase> restore_snapshot 'snapshotName'
Aby wyeksportować istniejący zrzut do innego klastra, użyj ExportSnapshot
narzędzie. Eksport nie wpływa na obciążenie RegionServers, działa na poziomie HDFS i musisz określić lokalizację HDFS (hbase.rootdir drugiego klastra).
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot SnapshotName -copy-to hdfs:///srv2:8082/hbase
Aktualne ograniczenia
Migawki opierają się na pewnych założeniach, a obecnie istnieje kilka narzędzi, które nie są w pełni zintegrowane z nową funkcją:
- Scalanie regionów, do których odwołują się migawki, powoduje utratę danych w migawce i sklonowanych tabelach.
- Przywracanie tabeli z włączoną replikacją dla przywróconej tabeli kończy się brakiem synchronizacji obu klastrów. Tabela nie jest przywracana w replice.
Wniosek
Obecnie funkcja migawek obejmuje wszystkie podstawowe wymagane funkcje, ale wciąż pozostaje wiele do zrobienia, w tym metryki, integracja interfejsu internetowego, optymalizacja wykorzystania dysku i wiele innych.
Aby dowiedzieć się więcej o konfigurowaniu HBase i korzystaniu z migawek, przejrzyj dokumentację.
Matteo Bertozzi jest inżynierem oprogramowania w zespole ds. Platformy i ekspertem ds. HBase.