Delen via


Back-up en replicatie instellen voor Apache HBase en Apache Phoenix in HDInsight

Apache HBase biedt ondersteuning voor verschillende methoden voor het beveiligen van gegevensverlies:

  • hbase De map kopiëren
  • Exporteren en vervolgens importeren
  • Tabellen kopiëren
  • Momentopnamen
  • Replicatie

Notitie

Apache Phoenix slaat de metagegevens op in HBase-tabellen, zodat er een back-up van metagegevens wordt gemaakt wanneer u een back-up maakt van de HBase-systeemcatalogustabellen.

In de volgende secties wordt het gebruiksscenario voor elk van deze benaderingen beschreven.

De hbase-map kopiëren

Met deze methode kopieert u alle HBase-gegevens, zonder dat u een subset van tabellen of kolomfamilies kunt selecteren. Volgende benaderingen bieden meer controle.

HBase in HDInsight maakt gebruik van de standaardopslag die is geselecteerd bij het maken van het cluster, ofwel Azure Storage-blobs of Azure Data Lake Storage. In beide gevallen slaat HBase de gegevens- en metagegevensbestanden op onder het volgende pad:

/hbase

  • In een Azure Storage-account bevindt de hbase map zich in de hoofdmap van de blobcontainer:

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

  • In Azure Data Lake Storage bevindt de hbase map zich onder het hoofdpad dat u hebt opgegeven bij het inrichten van een cluster. Dit hoofdpad heeft doorgaans een clusters map, met een submap met de naam van uw HDInsight-cluster:

    /clusters/<clusterName>/hbase

In beide gevallen bevat de hbase map alle gegevens die HBase op schijf heeft leeggemaakt, maar bevat deze mogelijk niet de in-memory gegevens. Voordat u op deze map kunt vertrouwen als een nauwkeurige weergave van de HBase-gegevens, moet u het cluster afsluiten.

Nadat u het cluster hebt verwijderd, kunt u de gegevens op hun plaats laten of de gegevens naar een nieuwe locatie kopiëren:

  • Maak een nieuw HDInsight-exemplaar dat verwijst naar de huidige opslaglocatie. Het nieuwe exemplaar wordt gemaakt met alle bestaande gegevens.

  • Kopieer de hbase map naar een andere Azure Storage-blobcontainer of Data Lake Storage-locatie en start vervolgens een nieuw cluster met die gegevens. Voor Azure Storage gebruikt u AzCopy en voor Data Lake Storage AdlCopy.

Exporteren en vervolgens importeren

Gebruik in het HDInsight-broncluster het hulpprogramma Exporteren (opgenomen in HBase) om gegevens uit een brontabel te exporteren naar de standaard gekoppelde opslag. Vervolgens kunt u de geëxporteerde map naar de doelopslaglocatie kopiëren en het hulpprogramma Importeren uitvoeren op het HDInsight-doelcluster.

Als u tabelgegevens wilt exporteren, moet u eerst SSH naar het hoofdknooppunt van uw HDInsight-broncluster gaan en vervolgens de volgende hbase opdracht uitvoeren:

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

De exportmap mag nog niet bestaan. De tabelnaam is hoofdlettergevoelig.

Als u tabelgegevens wilt importeren, voert u SSH uit in het hoofdknooppunt van uw doel-HDInsight-cluster en voert u de volgende hbase opdracht uit:

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

De tabel moet al bestaan.

Geef het volledige exportpad op naar de standaardopslag of naar een van de gekoppelde opslagopties. Bijvoorbeeld in Azure Storage:

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

In Azure Data Lake Storage Gen2 is de syntaxis:

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

In Azure Data Lake Storage Gen1 is de syntaxis:

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

Deze benadering biedt granulariteit op tabelniveau. U kunt ook een datumbereik opgeven voor de rijen die moeten worden opgenomen, zodat u het proces stapsgewijs kunt uitvoeren. Elke datum is in milliseconden sinds het Unix-epoch.

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

U moet het aantal versies van elke rij opgeven dat moet worden geëxporteerd. Als u alle versies in het datumbereik wilt opnemen, stelt u <numberOfVersions> een waarde in die groter is dan de maximaal mogelijke rijversies, zoals 100000.

Tabellen kopiëren

Het hulpprogramma CopyTable kopieert gegevens uit een brontabel, rij per rij, naar een bestaande doeltabel met hetzelfde schema als de bron. De doeltabel kan zich in hetzelfde cluster of een ander HBase-cluster bevinden. De tabelnamen zijn hoofdlettergevoelig.

Als u CopyTable in een cluster wilt gebruiken, gaat u via SSH naar het hoofdknooppunt van uw HDInsight-broncluster en voert u deze hbase opdracht uit:

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

Als u CopyTable wilt gebruiken om naar een tabel in een ander cluster te kopiëren, voegt u de peer switch toe met het adres van het doelcluster:

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

Het doeladres bestaat uit de volgende drie onderdelen:

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

  • <ZooKeeperQuorum> is een door komma's gescheiden lijst met FQDN-namen van Apache ZooKeeper-knooppunten, bijvoorbeeld:

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

  • <Port> in HDInsight wordt standaard ingesteld op 2181, en <ZnodeParent> is /hbase-unsecure, dus het volgende <destinationAddress> is:

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

Zie De Apache ZooKeeper Quorum List handmatig verzamelen in dit artikel voor meer informatie over het ophalen van deze waarden voor uw HDInsight-cluster.

Het hulpprogramma CopyTable ondersteunt ook parameters voor het opgeven van het tijdsbereik van te kopiëren rijen en het opgeven van de subset van kolomfamilies in een tabel die u wilt kopiëren. Als u de volledige lijst met parameters wilt zien die worden ondersteund door CopyTable, voert u CopyTable uit zonder parameters:

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

CopyTable scant de volledige inhoud van de brontabel die naar de doeltabel wordt gekopieerd. Dit kan de prestaties van uw HBase-cluster verminderen terwijl CopyTable wordt uitgevoerd.

Notitie

Als u het kopiëren van gegevens tussen tabellen wilt automatiseren, raadpleegt u het hdi_copy_table.sh script in de Azure HBase Utils-opslagplaats op GitHub.

De Apache ZooKeeper-quorumlijst handmatig verzamelen

Wanneer beide HDInsight-clusters zich in hetzelfde virtuele netwerk bevinden, zoals eerder beschreven, wordt interne hostnaamomzetting automatisch uitgevoerd. Als u CopyTable wilt gebruiken voor HDInsight-clusters in twee afzonderlijke virtuele netwerken die zijn verbonden met een VPN Gateway, moet u de host-IP-adressen van de Zookeeper-knooppunten in het quorum opgeven.

Voer de volgende curl-opdracht uit om de quorumhostnamen te verkrijgen:

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"

De curl-opdracht haalt een JSON-document op met HBase-configuratiegegevens en de grep opdracht retourneert alleen de vermelding hbase.zookeeper.quorum, bijvoorbeeld:

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

De waarde van de quorumhostnaam is de volledige tekenreeks rechts van de dubbele punt.

Als u de IP-adressen voor deze hosts wilt ophalen, gebruikt u de volgende curl-opdracht voor elke host in de vorige lijst:

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

In deze curl-opdracht <zookeeperHostFullName> is de volledige DNS-naam van een ZooKeeper-host, zoals het voorbeeld <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net. De uitvoer van de opdracht bevat het IP-adres voor de opgegeven host, bijvoorbeeld:

100 "ip" : "10.0.0.9",

Nadat u de IP-adressen voor alle ZooKeeper-knooppunten in uw quorum hebt verzameld, bouwt u het doeladres opnieuw op:

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

In ons voorbeeld:

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

Momentopnamen

Met momentopnamen kunt u een back-up naar een bepaald tijdstip maken van gegevens in uw HBase-gegevensarchief. Momentopnamen hebben minimale overhead en zijn binnen enkele seconden voltooid, omdat een momentopnamebewerking effectief een metagegevensbewerking is die de namen van alle bestanden in de opslag op dat moment vastlegt. Op het moment van een momentopname worden er geen werkelijke gegevens gekopieerd. Momentopnamen zijn afhankelijk van de onveranderbare aard van de gegevens die zijn opgeslagen in HDFS, waarbij updates, verwijderingen en invoegingen allemaal worden weergegeven als nieuwe gegevens. U kunt een momentopname herstellen (klonen) op hetzelfde cluster of een momentopname exporteren naar een ander cluster.

Als u een momentopname wilt maken, gaat u via SSH naar het hoofdknooppunt van uw HDInsight HBase-cluster en start u de hbase shell:

hbase shell

Gebruik in de hbase-shell de opdracht momentopname met de namen van de tabel en van deze momentopname:

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

Als u een momentopname op naam in de hbase shell wilt herstellen, schakelt u eerst de tabel uit en herstelt u de momentopname en schakelt u de tabel opnieuw in:

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

Als u een momentopname wilt herstellen naar een nieuwe tabel, gebruikt u clone_snapshot:

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

Als u een momentopname wilt exporteren naar HDFS voor gebruik door een ander cluster, maakt u eerst de momentopname zoals eerder beschreven en gebruikt u vervolgens het hulpprogramma ExportSnapshot. Voer dit hulpprogramma uit vanuit de SSH-sessie naar het hoofdknooppunt, niet in de hbase shell:

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

Dit <hdfsHBaseLocation> kan een van de opslaglocaties zijn die toegankelijk zijn voor uw broncluster en moet verwijzen naar de hbase-map die wordt gebruikt door uw doelcluster. Als er bijvoorbeeld een secundair Azure Storage-account is gekoppeld aan uw broncluster en dat account toegang biedt tot de container die wordt gebruikt door de standaardopslag van het doelcluster, kunt u deze opdracht gebruiken:

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

Als u geen secundair Azure Storage-account hebt dat is gekoppeld aan uw broncluster of als uw broncluster een on-premises cluster (of niet-HDI-cluster) is, kan er autorisatieproblemen optreden wanneer u toegang probeert te krijgen tot het opslagaccount van uw HDI-cluster. U kunt dit oplossen door de sleutel voor uw opslagaccount op te geven als een opdrachtregelparameter, zoals wordt weergegeven in het volgende voorbeeld. U kunt de sleutel voor uw opslagaccount ophalen in 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'

Als uw doelcluster een ADLS Gen 2-cluster is, wijzigt u de voorgaande opdracht om de configuraties aan te passen die worden gebruikt door 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'

Nadat de momentopname is geëxporteerd, wordt SSH naar het hoofdknooppunt van het doelcluster gebracht en wordt de momentopname hersteld met behulp van de clone_snapshot opdracht zoals eerder beschreven.

Momentopnamen bieden een volledige back-up van een tabel op het moment van de snapshot opdracht. Momentopnamen bieden niet de mogelijkheid om incrementele momentopnamen uit te voeren op tijdvensters, noch om subsets van kolommenfamilies op te geven die in de momentopname moeten worden opgenomen.

Replicatie

HBase-replicatie pusht automatisch transacties van een broncluster naar een doelcluster, met behulp van een asynchroon mechanisme met minimale overhead op het broncluster. In HDInsight kunt u replicatie tussen clusters instellen waarbij:

  • De bron- en doelclusters bevinden zich in hetzelfde virtuele netwerk.
  • De bron- en doelclusters bevinden zich in verschillende virtuele netwerken die zijn verbonden met een VPN-gateway, maar beide clusters bevinden zich op dezelfde geografische locatie.
  • De bronclusters en doelclusters bevinden zich in verschillende virtuele netwerken die zijn verbonden door een VPN-gateway en elk cluster bevindt zich op een andere geografische locatie.

De algemene stappen voor het instellen van replicatie zijn:

  1. Maak de tabellen op het broncluster en vul gegevens in.
  2. Maak in het doelcluster lege doeltabellen met het schema van de brontabel.
  3. Registreer het doelcluster als peer naar het broncluster.
  4. Schakel replicatie in voor de gewenste brontabellen.
  5. Kopieer bestaande gegevens uit de brontabellen naar de doeltabellen.
  6. Met replicatie worden automatisch nieuwe gegevenswijzigingen naar de brontabellen gekopieerd naar de doeltabellen.

Als u replicatie in HDInsight wilt inschakelen, past u een scriptactie toe op uw actieve HDInsight-broncluster. Zie Apache HBase-replicatie configureren voor een overzicht van het inschakelen van replicatie in uw cluster of om te experimenteren met replicatie op voorbeeldclusters die zijn gemaakt in virtuele netwerken met behulp van Azure Resource Manager-sjablonen. Dit artikel bevat ook instructies voor het inschakelen van replicatie van Phoenix-metagegevens.

Volgende stappen