Udostępnij za pośrednictwem


Konfigurowanie tworzenia kopii zapasowych i replikacji dla baz danych Apache HBase i Apache Phoenix w usłudze HDInsight

Baza danych Apache HBase obsługuje kilka metod ochrony przed utratą danych:

  • hbase Kopiowanie folderu
  • Eksportuj, a następnie importuj
  • Kopiowanie tabel
  • Migawki
  • Replikacja

Uwaga

Apache Phoenix przechowuje metadane w tabelach HBase, dzięki czemu kopie zapasowe metadanych są tworzone podczas tworzenia kopii zapasowej tabel katalogu systemu HBase.

W poniższych sekcjach opisano scenariusz użycia dla każdego z tych podejść.

Kopiowanie folderu hbase

Dzięki temu podejściu skopiujesz wszystkie dane bazy danych HBase bez możliwości wybrania podzbioru tabel lub rodzin kolumn. Kolejne podejścia zapewniają większą kontrolę.

Baza HBase w usłudze HDInsight używa domyślnego magazynu wybranego podczas tworzenia klastra — obiektów blob usługi Azure Storage lub usługi Azure Data Lake Storage. W obu przypadkach baza HBase przechowuje swoje dane i pliki metadanych w następującej ścieżce:

/hbase

  • W folderze głównym kontenera obiektów blob znajduje się folder konta hbase usługi Azure Storage:

    wasbs://<containername>@<accountname>.blob.core.windows.net/hbase

  • W usłudze Azure Data Lake Storage hbase folder znajduje się pod ścieżką główną określoną podczas aprowizacji klastra. Ta ścieżka główna zazwyczaj zawiera clusters folder z podfolderem o nazwie po klastrze usługi HDInsight:

    /clusters/<clusterName>/hbase

W obu przypadkach hbase folder zawiera wszystkie dane, które baza HBase opróżniła na dysk, ale może nie zawierać danych w pamięci. Zanim będzie można polegać na tym folderze jako dokładnej reprezentacji danych HBase, należy zamknąć klaster.

Po usunięciu klastra możesz pozostawić dane w miejscu lub skopiować dane do nowej lokalizacji:

  • Utwórz nowe wystąpienie usługi HDInsight wskazujące bieżącą lokalizację magazynu. Nowe wystąpienie jest tworzone ze wszystkimi istniejącymi danymi.

  • hbase Skopiuj folder do innego kontenera obiektów blob usługi Azure Storage lub lokalizacji usługi Data Lake Storage, a następnie uruchom nowy klaster przy użyciu tych danych. W przypadku usługi Azure Storage użyj narzędzia AzCopy, a w przypadku usługi Data Lake Storage użyj narzędzia AdlCopy.

Eksportuj, a następnie importuj

W źródłowym klastrze usługi HDInsight użyj narzędzia eksportu (dołączonego do bazy danych HBase), aby wyeksportować dane z tabeli źródłowej do domyślnego dołączonego magazynu. Następnie możesz skopiować wyeksportowany folder do docelowej lokalizacji magazynu i uruchomić narzędzie Importuj w docelowym klastrze usługi HDInsight.

Aby wyeksportować dane tabeli, najpierw SSH do węzła głównego źródłowego klastra usługi HDInsight, a następnie uruchom następujące hbase polecenie:

hbase org.apache.hadoop.hbase.mapreduce.Export "<tableName>" "/<path>/<to>/<export>"

Katalog eksportu nie może jeszcze istnieć. W nazwie tabeli jest uwzględniana wielkość liter.

Aby zaimportować dane tabeli, SSH do węzła głównego docelowego klastra usługi HDInsight, a następnie uruchom następujące hbase polecenie:

hbase org.apache.hadoop.hbase.mapreduce.Import "<tableName>" "/<path>/<to>/<export>"

Tabela musi już istnieć.

Określ pełną ścieżkę eksportu do domyślnego magazynu lub dowolnej z dołączonych opcji magazynu. Na przykład w usłudze Azure Storage:

wasbs://<containername>@<accountname>.blob.core.windows.net/<path>

W usłudze Azure Data Lake Storage Gen2 składnia to:

abfs://<containername>@<accountname>.dfs.core.windows.net/<path>

W usłudze Azure Data Lake Storage Gen1 składnia to:

adl://<accountName>.azuredatalakestore.net:443/<path>

Takie podejście zapewnia stopień szczegółowości na poziomie tabeli. Można również określić zakres dat dla wierszy do uwzględnienia, co pozwala na przyrostowe wykonywanie procesu. Każda data jest wyrażona w milisekundach od epoki Unix.

hbase org.apache.hadoop.hbase.mapreduce.Export "<tableName>" "/<path>/<to>/<export>" <numberOfVersions> <startTimeInMS> <endTimeInMS>

Musisz określić liczbę wersji każdego wiersza do wyeksportowania. Aby uwzględnić wszystkie wersje w zakresie dat, ustaw <numberOfVersions> wartość większą od maksymalnej możliwej wersji wierszy, na przykład 100000.

Kopiowanie tabel

Narzędzie CopyTable kopiuje dane z tabeli źródłowej, wiersz po wierszu, do istniejącej tabeli docelowej z tym samym schematem co źródło. Tabela docelowa może znajdować się w tym samym klastrze lub innym klastrze HBase. W nazwach tabel jest rozróżniana wielkość liter.

Aby użyć metody CopyTable w klastrze, za pomocą protokołu SSH w węźle głównym źródłowego klastra usługi HDInsight, a następnie uruchom następujące hbase polecenie:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=<destTableName> <srcTableName>

Aby użyć tabeli CopyTable do skopiowania do tabeli w innym klastrze, dodaj peer przełącznik z adresem klastra docelowego:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=<destTableName> --peer.adr=<destinationAddress> <srcTableName>

Adres docelowy składa się z następujących trzech części:

<destinationAddress> = <ZooKeeperQuorum>:<Port>:<ZnodeParent>

  • <ZooKeeperQuorum> to rozdzielona przecinkami lista nazw FQDN węzłów usługi Apache ZooKeeper, na przykład:

    <zookeepername1.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername2.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername3.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net><><>

  • <Port> w usłudze HDInsight wartość domyślna to 2181 i <ZnodeParent> ma /hbase-unsecurewartość , więc ukończenie <destinationAddress> to:

    <zookeepername1.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername2.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername3.54o2oqawzlwevlfgay2500xtg.dx.internal.cloudapp.net><<>>:2181:/hbase-unsecure

Aby uzyskać szczegółowe informacje na temat pobierania tych wartości dla klastra usługi HDInsight, zobacz Ręczne zbieranie listy kworum usługi Apache ZooKeeper w tym artykule.

Narzędzie CopyTable obsługuje również parametry służące do określania zakresu czasu wierszy do skopiowania oraz określania podzbioru rodzin kolumn w tabeli do skopiowania. Aby wyświetlić pełną listę parametrów obsługiwanych przez funkcję CopyTable, uruchom polecenie CopyTable bez żadnych parametrów:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable

Funkcja CopyTable skanuje całą zawartość tabeli źródłowej, która zostanie skopiowana do tabeli docelowej. Może to zmniejszyć wydajność klastra HBase podczas wykonywania funkcji CopyTable.

Uwaga

Aby zautomatyzować kopiowanie danych między tabelami, zobacz hdi_copy_table.sh skrypt w repozytorium Azure HBase Utils w witrynie GitHub.

Ręczne zbieranie listy kworum usługi Apache ZooKeeper

Gdy oba klastry usługi HDInsight znajdują się w tej samej sieci wirtualnej, jak opisano wcześniej, wewnętrzne rozpoznawanie nazw hostów jest automatyczne. Aby użyć tabeli CopyTable dla klastrów usługi HDInsight w dwóch oddzielnych sieciach wirtualnych połączonych przez usługę VPN Gateway, należy podać adresy IP hosta węzłów usługi Zookeeper w kworum.

Aby uzyskać nazwy hostów kworum, uruchom następujące polecenie curl:

curl -u admin:<password> -X GET -H "X-Requested-By: ambari" "https://<clusterName>.azurehdinsight.net/api/v1/clusters/<clusterName>/configurations?type=hbase-site&tag=TOPOLOGY_RESOLVED" | grep "hbase.zookeeper.quorum"

Polecenie curl pobiera dokument JSON z informacjami o konfiguracji HBase, a grep polecenie zwraca tylko wpis "hbase.zookeeper.quorum", na przykład:

"hbase.zookeeper.quorum" : "<zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername2>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername3>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net"

Wartość nazw hostów kworum to cały ciąg po prawej stronie dwukropka.

Aby pobrać adresy IP dla tych hostów, użyj następującego polecenia curl dla każdego hosta na poprzedniej liście:

curl -u admin:<password> -X GET -H "X-Requested-By: ambari" "https://<clusterName>.azurehdinsight.net/api/v1/clusters/<clusterName>/hosts/<zookeeperHostFullName>" | grep "ip"

W tym poleceniu <zookeeperHostFullName> curl jest pełną nazwą DNS hosta ZooKeeper, na przykład <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net. Dane wyjściowe polecenia zawierają adres IP określonego hosta, na przykład:

100 "ip" : "10.0.0.9",

Po zebraniu adresów IP dla wszystkich węzłów usługi ZooKeeper w kworum ponownie skompiluj adres docelowy:

<destinationAddress> = <Host_1_IP>,<Host_2_IP>,<Host_3_IP>:<Port>:<ZnodeParent>

W naszym przykładzie:

<destinationAddress> = 10.0.0.9,10.0.0.8,10.0.0.12:2181:/hbase-unsecure

Migawki

Migawki umożliwiają tworzenie kopii zapasowej danych w magazynie danych HBase w czasie. Migawki mają minimalne obciążenie i są wykonywane w ciągu kilku sekund, ponieważ operacja migawki jest operacją metadanych przechwytując nazwy wszystkich plików w magazynie w tym momencie. W momencie migawki nie są kopiowane żadne rzeczywiste dane. Migawki opierają się na niezmiennym charakterze danych przechowywanych w systemie plików HDFS, gdzie wszystkie aktualizacje, usuwanie i wstawianie są reprezentowane jako nowe dane. Możesz przywrócić (sklonować) migawkę w tym samym klastrze lub wyeksportować migawkę do innego klastra.

Aby utworzyć migawkę, za pomocą protokołu SSH w węźle głównym klastra HBase usługi HDInsight i uruchom powłokę hbase :

hbase shell

W powłoce hbase użyj polecenia migawki z nazwami tabeli i tej migawki:

snapshot '<tableName>', '<snapshotName>'

Aby przywrócić migawkę według nazwy w hbase powłoce, najpierw wyłącz tabelę, a następnie przywróć migawkę i ponownie włącz tabelę:

disable '<tableName>'
restore_snapshot '<snapshotName>'
enable '<tableName>'

Aby przywrócić migawkę do nowej tabeli, użyj clone_snapshot:

clone_snapshot '<snapshotName>', '<newTableName>'

Aby wyeksportować migawkę do systemu plików HDFS do użycia przez inny klaster, najpierw utwórz migawkę zgodnie z wcześniejszym opisem, a następnie użyj narzędzia ExportSnapshot. Uruchom to narzędzie z poziomu sesji SSH do węzła głównego, a nie w powłoce hbase :

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <snapshotName> -copy-to <hdfsHBaseLocation>

Może <hdfsHBaseLocation> to być dowolna lokalizacja magazynu dostępna dla klastra źródłowego i powinna wskazywać folder hbase używany przez klaster docelowy. Jeśli na przykład masz pomocnicze konto usługi Azure Storage dołączone do klastra źródłowego, a to konto zapewnia dostęp do kontenera używanego do domyślnego magazynu klastra docelowego, możesz użyć następującego polecenia:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 'Snapshot1' -copy-to 'wasbs://secondcluster@myaccount.blob.core.windows.net/hbase'

Jeśli nie masz pomocniczego konta usługi Azure Storage dołączonego do klastra źródłowego lub jeśli klaster źródłowy jest klastrem lokalnym (lub klastrem innym niż HDI), podczas próby uzyskania dostępu do konta magazynu klastra usługi HDI mogą wystąpić problemy z autoryzacją. Aby rozwiązać ten problem, określ klucz do konta magazynu jako parametr wiersza polecenia, jak pokazano w poniższym przykładzie. Klucz do konta magazynu można uzyskać w witrynie Azure Portal.

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -Dfs.azure.account.key.myaccount.blob.core.windows.net=mykey -snapshot 'Snapshot1' -copy-to 'wasbs://secondcluster@myaccount.blob.core.windows.net/hbase'

Jeśli klaster docelowy jest klastrem usługi ADLS Gen 2, zmień poprzednie polecenie, aby dostosować konfiguracje używane przez usługę ADLS Gen 2:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -Dfs.azure.account.key.<account_name>.dfs.core.windows.net=<key> -Dfs.azure.account.auth.type.<account_name>.dfs.core.windows.net=SharedKey -Dfs.azure.always.use.https.<account_name>.dfs.core.windows.net=false -Dfs.azure.account.keyprovider.<account_name>.dfs.core.windows.net=org.apache.hadoop.fs.azurebfs.services.SimpleKeyProvider -snapshot 'Snapshot1' -copy-to 'abfs://<container>@<account_name>.dfs.core.windows.net/hbase'

Po wyeksportowaniu migawki protokół SSH do węzła głównego klastra docelowego i przywróć migawkę przy użyciu polecenia zgodnie z wcześniejszym opisem clone_snapshot .

Migawki zapewniają pełną kopię zapasową tabeli w czasie snapshot wykonywania polecenia. Migawki nie zapewniają możliwości wykonywania migawek przyrostowych według okien czasowych ani określania podzestawów rodzin kolumn do uwzględnienia w migawce.

Replikacja

Replikacja bazy danych HBase automatycznie wypycha transakcje z klastra źródłowego do klastra docelowego przy użyciu mechanizmu asynchronicznego z minimalnym obciążeniem klastra źródłowego. W usłudze HDInsight można skonfigurować replikację między klastrami, w których:

  • Klastry źródłowe i docelowe znajdują się w tej samej sieci wirtualnej.
  • Klastry źródłowe i docelowe znajdują się w różnych sieciach wirtualnych połączonych przez bramę sieci VPN, ale oba klastry istnieją w tej samej lokalizacji geograficznej.
  • Klaster źródłowy i klastry docelowe znajdują się w różnych sieciach wirtualnych połączonych przez bramę sieci VPN, a każdy klaster istnieje w innej lokalizacji geograficznej.

Ogólne kroki konfigurowania replikacji to:

  1. W klastrze źródłowym utwórz tabele i wypełnij dane.
  2. W klastrze docelowym utwórz puste tabele docelowe ze schematem tabeli źródłowej.
  3. Zarejestruj klaster docelowy jako element równorzędny w klastrze źródłowym.
  4. Włącz replikację w żądanych tabelach źródłowych.
  5. Skopiuj istniejące dane z tabel źródłowych do tabel docelowych.
  6. Replikacja automatycznie kopiuje nowe modyfikacje danych do tabel źródłowych do tabel docelowych.

Aby włączyć replikację w usłudze HDInsight, zastosuj akcję skryptu do uruchomionego źródłowego klastra usługi HDInsight. Aby zapoznać się z przewodnikiem włączania replikacji w klastrze lub eksperymentować z replikacją w przykładowych klastrach utworzonych w sieciach wirtualnych przy użyciu szablonów usługi Azure Resource Manager, zobacz Konfigurowanie replikacji bazy danych Apache HBase. Ten artykuł zawiera również instrukcje dotyczące włączania replikacji metadanych Phoenix.

Następne kroki