Udostępnij za pośrednictwem


Migrowanie bazy danych Apache HBase do nowej wersji i konta magazynowego

W tym artykule omówiono sposób aktualizowania klastra Apache HBase w usłudze Azure HDInsight do nowszej wersji przy użyciu innego konta usługi Azure Storage.

Ten artykuł ma zastosowanie tylko wtedy, gdy musisz używać różnych kont magazynu dla klastrów źródłowych i docelowych. Aby uaktualnić wersje z tym samym kontem Storage dla klastrów źródłowych i docelowych, zobacz Migrowanie bazy danych Apache HBase do nowej wersji.

Przestój podczas uaktualniania powinien trwać tylko kilka minut. Ten przestój jest spowodowany przez kroki opróżniania wszystkich danych w pamięci oraz czas konfigurowania i ponownego uruchamiania usług w nowym klastrze. Wyniki będą się różnić w zależności od liczby węzłów, ilości danych i innych zmiennych.

Przegląd zgodności z bazą danych Apache HBase

Przed uaktualnieniem bazy danych Apache HBase upewnij się, że wersje bazy danych HBase w klastrach źródłowych i docelowych są zgodne. Przejrzyj macierz zgodności wersji HBase i uwagi dotyczące wydania w Przewodniku Referencyjnym HBase, aby upewnić się, że aplikacja jest zgodna z nową wersją.

Oto przykładowa macierz zgodności. Y wskazuje zgodność, a N wskazuje potencjalną niezgodność:

Typ zgodności Wersja główna Wersja pomocnicza Aktualizacja
Zgodność przewodu klienta-serwera N Y Y
Kompatybilność między serwerami N Y Y
Zgodność formatu pliku N Y Y
Zgodność interfejsu API klienta N Y Y
Zgodność binarna klienta N N Y
Ograniczona zgodność interfejsu API po stronie serwera
Stabilny N Y Y
Ewoluuje N N Y
Niestabilny N N N
Zgodność zależności N Y Y
Zgodność operacyjna N N Y

Uwagi o wersji bazy danych HBase powinny opisywać wszelkie przełomowe niekompatybilności. Przetestuj aplikację w klastrze z uruchomioną docelową wersją usług HDInsight i HBase.

Aby uzyskać więcej informacji na temat wersji i zgodności usługi HDInsight, zobacz Wersje usługi Azure HDInsight.

Omówienie migracji klastra apache HBase

Aby uaktualnić i przeprowadzić migrację klastra Apache HBase w usłudze Azure HDInsight do nowego konta magazynowania, wykonaj podstawowe kroki podane poniżej. Aby uzyskać szczegółowe instrukcje, zobacz szczegółowe kroki i polecenia.

Przygotuj klaster źródłowy:

  1. Zatrzymaj pozyskiwanie danych.
  2. Opróżnij memstore dane.
  3. Zatrzymaj HBase w Ambari.
  4. W przypadku klastrów z przyspieszonymi zapisami utwórz kopię zapasową katalogu Write Ahead Log (WAL).

Przygotuj klaster docelowy:

  1. Utwórz klaster docelowy.
  2. Zatrzymaj HBase w Ambari.
  3. Czyszczenie danych usługi Zookeeper.
  4. Przełącz użytkownika na bazę danych HBase.

Ukończ migrację:

  1. Wyczyść docelowy system plików, zmigruj dane i usuń polecenie /hbase/hbase.id.
  2. Czyszczenie i migrowanie pliku WAL.
  3. Uruchom wszystkie usługi z klastra docelowego Ambari.
  4. Sprawdź bazę danych HBase.
  5. Usuń klaster źródłowy.

Szczegółowe kroki i polecenia migracji

Wykonaj te szczegółowe kroki i polecenia, aby przeprowadzić migrację klastra Apache HBase przy użyciu nowego konta przechowywania.

Przygotowywanie klastra źródłowego

  1. Zatrzymaj przesyłanie do źródłowego klastra HBase.

  2. Opróżnij źródłowy klaster HBase, który uaktualniasz.

    Baza HBase zapisuje dane przychodzące do magazynu w pamięci o nazwie memstore. Po osiągnięciu określonego rozmiaru memstore, HBase zapisuje ją na dysk w celu długoterminowego przechowywania na koncie magazynowym klastra. Usunięcie klastra źródłowego po uaktualnieniu powoduje również usunięcie wszystkich danych w pliku memstores. Aby zachować dane, należy ręcznie zapisać każdą tabelę memstore na dysku przed uaktualnieniem.

    Można opróżnić dane, uruchamiając skrypt memstore z repozytorium GitHub hbase-utils.

    Możesz również przepłukać memstore dane, uruchamiając następujące polecenie powłoki HBase z wnętrza klastra HDInsight.

    hbase shell
    flush "<table-name>"
    
  3. Zaloguj się do Apache Ambari w klastrze źródłowym z https://<OLDCLUSTERNAME>.azurehdinsight.net, i zatrzymaj usługi HBase.

  4. Po wyświetleniu monitu o potwierdzenie wybierz pole, aby włączyć tryb konserwacji bazy danych HBase.

    Aby uzyskać więcej informacji na temat nawiązywania połączenia z systemem Ambari i używania go, zobacz Manage HDInsight clusters by using the Ambari Web UI (Zarządzanie klastrami usługi HDInsight przy użyciu internetowego interfejsu użytkownika systemu Ambari).

  5. Jeśli źródłowy klaster HBase nie ma funkcji przyspieszonych zapisów , pomiń ten krok. W przypadku klastrów HBase z włączeniem funkcji przyspieszonych zapisów, wykonaj kopię zapasową katalogu WAL w HDFS, uruchamiając następujące polecenia z sesji SSH na dowolnym węźle Zookeeper lub węźle roboczym źródłowego klastra.

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

Przygotowywanie klastra docelowego

  1. W portalu Azure utwórz nowy docelowy klaster usługi HDInsight korzystający z innego konta magazynu niż klaster źródłowy.

  2. Zaloguj się do systemu Apache Ambari w nowym klastrze pod adresem https://<NEWCLUSTERNAME>.azurehdinsight.neti zatrzymaj usługi HBase.

  3. Wyczyść dane usługi Zookeeper w klastrze docelowym, uruchamiając następujące polecenia w dowolnym węźle usługi Zookeeper lub w węźle roboczym:

    hbase zkcli
    rmr /hbase-unsecure
    quit
    
  4. Przełącz użytkownika na bazę danych HBase, uruchamiając polecenie sudo su hbase.

Wyczyść i zmigruj system plików oraz WAL

Uruchom następujące polecenia, w zależności od źródłowej wersji usługi HDI oraz tego, czy klastry źródłowe i docelowe mają przyspieszone zapisy. Klaster docelowy ma zawsze wersję HDI 4.0, ponieważ HDI 3.6 jest objęty podstawowym wsparciem i nie jest zalecany dla nowych klastrów.

Element <container-endpoint-url> dla konta przechowywania to https://<storageaccount>.blob.core.windows.net/<container-name>. Przekaż token SAS dla konta przechowywania na końcu adresu URL.

  • Dla <container-fullpath> typu magazynu WASB jest wasbs://<container-name>@<storageaccount>.blob.core.windows.net
  • Typ magazynu Azure Data Lake Storage Gen2 to <container-fullpath>.

Polecenia kopiuj

Polecenie kopiowania systemu plików HDFS to hdfs dfs <copy properties starting with -D> -cp

Użyj hadoop distcp dla lepszej wydajności podczas kopiowania plików, które nie są zapisane jako stronicowy obiekt blob: hadoop distcp <copy properties starting with -D>

Aby przekazać klucz konta magazynu, użyj:

  • -Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
  • -Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider

Narzędzie AzCopy umożliwia również lepszą wydajność podczas kopiowania plików danych bazy danych HBase.

  1. Uruchom polecenie AzCopy:

    azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
    
  2. Jeśli docelowe konto magazynowe to Azure Blob Storage, wykonaj ten krok po skopiowaniu. Jeśli docelowym kontem magazynu jest Data Lake Storage Gen2, pomiń ten krok.

    Sterownik WASB dla Hadoop używa specjalnych obiektów blobów o rozmiarze 0, które odpowiadają każdemu katalogowi. Narzędzie AzCopy pomija te pliki podczas kopiowania. Niektóre operacje WASB używają tych blobów, dlatego musisz je utworzyć w klastrze docelowym. Aby utworzyć obiekty blob, uruchom następujące polecenie usługi Hadoop z dowolnego węzła w klastrze docelowym:

    sudo -u hbase hadoop fs -chmod -R 0755 /hbase
    

Narzędzie AzCopy można pobrać z narzędzia Get started with AzCopy (Rozpoczynanie pracy z narzędziem AzCopy). Aby uzyskać więcej informacji na temat korzystania z narzędzia AzCopy, zobacz azcopy copy.

Klaster źródłowy to HDI 3.6 lub HDI 4.0 z przyspieszonymi zapisami, a klaster docelowy ma przyspieszone zapisy

  1. Aby wyczyścić system plików i przeprowadzić migrację danych, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Usuń hbase.id , uruchamiając polecenie hdfs dfs -rm /hbase/hbase.id

  3. Aby wyczyścić i zmigrować plik WAL, uruchom następujące polecenia:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
    

Klaster źródłowy to HDI 3.6 bez przyspieszonych zapisów, a klaster docelowy ma przyspieszone zapisy

  1. Aby wyczyścić system plików i przeprowadzić migrację danych, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Usuń hbase.id , uruchamiając polecenie hdfs dfs -rm /hbase/hbase.id

  3. Aby wyczyścić i zmigrować plik WAL, uruchom następujące polecenia:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs hdfs://<destination-cluster>/hbasewal
    

Klaster źródłowy to HDI 3.6 bez przyspieszonych zapisów, a klaster docelowy nie ma przyspieszonych zapisów

  1. Aby wyczyścić system plików i przeprowadzić migrację danych, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Usuń hbase.id , uruchamiając polecenie hdfs dfs -rm /hbase/hbase.id

  3. Aby wyczyścić i zmigrować plik WAL, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals
    

Klaster źródłowy to HDI 4.0 bez przyspieszonych zapisów, a klaster docelowy ma przyspieszone zapisy

  1. Aby wyczyścić system plików i przeprowadzić migrację danych, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Usuń hbase.id , uruchamiając polecenie hdfs dfs -rm /hbase/hbase.id

  3. Aby wyczyścić i zmigrować plik WAL, uruchom następujące polecenia:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/hbasewal
    

Klaster źródłowy to HDI 4.0 bez przyspieszonych zapisów, a klaster docelowy nie ma przyspieszonych zapisów

  1. Aby wyczyścić system plików i przeprowadzić migrację danych, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Usuń hbase.id , uruchamiając polecenie hdfs dfs -rm /hbase/hbase.id

  3. Aby wyczyścić i zmigrować plik WAL, uruchom następujące polecenia:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
    

Kończenie migracji

  1. W klastrze docelowym zapisz zmiany i uruchom ponownie wszystkie wymagane usługi, zgodnie z poleceniem Ambari.

  2. Wskaż aplikację do klastra docelowego.

    Uwaga

    Statyczna nazwa DNS aplikacji zmienia się podczas uaktualniania. Zamiast kodować tę nazwę DNS na stałe, można skonfigurować rekord CNAME w ustawieniach DNS nazwy domeny, które wskazują nazwę klastra. Inną opcją jest użycie pliku konfiguracji dla aplikacji, który można zaktualizować bez ponownego wdrażania.

  3. Rozpocznij przetwarzanie.

  4. Sprawdź spójność bazy danych HBase i proste operacje języka DDL (Data Definition Language) i języka manipulowania danymi (DML).

  5. Jeśli klaster docelowy jest zadowalający, usuń klaster źródłowy.

Następne kroki

Aby dowiedzieć się więcej na temat bazy danych Apache HBase i uaktualniania klastrów usługi HDInsight, zobacz następujące artykuły: