Share via


Konfigurera säkerhetskopiering och replikering för Apache HBase och Apache Phoenix på HDInsight

Apache HBase har stöd för flera metoder för att skydda mot dataförlust:

  • hbase Kopiera mappen
  • Exportera sedan Importera
  • Kopiera tabeller
  • Ögonblicksbilder
  • Replikering

Kommentar

Apache Phoenix lagrar sina metadata i HBase-tabeller, så att metadata säkerhetskopieras när du säkerhetskopierar HBase-systemkatalogtabellerna.

I följande avsnitt beskrivs användningsscenariot för var och en av dessa metoder.

Kopiera mappen hbase

Med den här metoden kopierar du alla HBase-data utan att kunna välja en delmängd av tabeller eller kolumnfamiljer. Efterföljande metoder ger större kontroll.

HBase i HDInsight använder standardlagringen som valts när klustret skapas, antingen Azure Storage-blobar eller Azure Data Lake Storage. I båda fallen lagrar HBase sina data- och metadatafiler under följande sökväg:

/hbase

  • I ett Azure Storage-konto hbase finns mappen i blobcontainerns rot:

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

  • I Azure Data Lake Storage hbase finns mappen under den rotsökväg som du angav när du etablerade ett kluster. Den här rotsökvägen har vanligtvis en clusters mapp med en undermapp med namnet efter DITT HDInsight-kluster:

    /clusters/<clusterName>/hbase

I båda fallen hbase innehåller mappen alla data som HBase har tömt till disk, men den kanske inte innehåller minnesintern data. Innan du kan förlita dig på den här mappen som en korrekt representation av HBase-data måste du stänga av klustret.

När du har tagit bort klustret kan du antingen lämna data på plats eller kopiera data till en ny plats:

  • Skapa en ny HDInsight-instans som pekar på den aktuella lagringsplatsen. Den nya instansen skapas med alla befintliga data.

  • hbase Kopiera mappen till en annan Azure Storage-blobcontainer eller Data Lake Storage-plats och starta sedan ett nytt kluster med dessa data. För Azure Storage använder du AzCopy och för Data Lake Storage använder du AdlCopy.

Exportera sedan Importera

I HDInsight-källklustret använder du exportverktyget (ingår i HBase) för att exportera data från en källtabell till den anslutna standardlagringen. Du kan sedan kopiera den exporterade mappen till mållagringsplatsen och köra verktyget Importera i HDInsight-målklustret.

Om du vill exportera tabelldata, först SSH till huvudnoden i ditt HDInsight-källkluster och kör sedan följande hbase kommando:

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

Exportkatalogen får inte redan finnas. Tabellnamnet är skiftlägeskänsligt.

För att importera tabelldata, SSH till huvudnoden i ditt HDInsight-målkluster och kör sedan följande hbase kommando:

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

Tabellen måste redan finnas.

Ange den fullständiga exportsökvägen till standardlagringen eller till något av de anslutna lagringsalternativen. Till exempel i Azure Storage:

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

I Azure Data Lake Storage Gen2 är syntaxen:

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

I Azure Data Lake Storage Gen1 är syntaxen:

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

Den här metoden erbjuder kornighet på tabellnivå. Du kan också ange ett datumintervall för de rader som ska inkluderas, vilket gör att du kan utföra processen stegvis. Varje datum är i millisekunder sedan Unix-epoken.

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

Du måste ange antalet versioner av varje rad som ska exporteras. Om du vill inkludera alla versioner i datumintervallet anger du <numberOfVersions> ett värde som är större än dina högsta möjliga radversioner, till exempel 100000.

Kopiera tabeller

Verktyget CopyTable kopierar data från en källtabell rad för rad till en befintlig måltabell med samma schema som källan. Måltabellen kan finnas i samma kluster eller ett annat HBase-kluster. Tabellnamnen är skiftlägeskänsliga.

Om du vill använda CopyTable i ett kluster, SSH till huvudnoden i ditt HDInsight-källkluster och kör sedan det här hbase kommandot:

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

Om du vill använda CopyTable för att kopiera till en tabell i ett annat kluster lägger du till växeln peer med målklustrets adress:

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

Måladressen består av följande tre delar:

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

  • <ZooKeeperQuorum> är en kommaavgränsad lista över Apache ZooKeeper-noders FQDN-namn, till exempel:

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

  • <Port> på HDInsight är standard 2181 och <ZnodeParent> är /hbase-unsecure, så det fullständiga <destinationAddress> är:

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

Mer information om hur du hämtar dessa värden för HDInsight-klustret finns i Samla in Apache ZooKeeper-kvorumlistan manuellt i den här artikeln.

Verktyget CopyTable stöder också parametrar för att ange tidsintervallet för rader som ska kopieras och för att ange delmängden av kolumnfamiljer i en tabell som ska kopieras. Om du vill se en fullständig lista över parametrar som stöds av CopyTable kör du CopyTable utan några parametrar:

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

CopyTable söker igenom hela källtabellinnehållet som ska kopieras till måltabellen. Detta kan minska prestanda för HBase-klustret medan CopyTable körs.

Kommentar

Information om hur du automatiserar kopieringen av data mellan tabeller finns i skriptet hdi_copy_table.shpå Azure HBase Utils-lagringsplatsen på GitHub.

Samla in Apache ZooKeeper-kvorumlistan manuellt

När båda HDInsight-klustren finns i samma virtuella nätverk, enligt beskrivningen tidigare, sker automatisk intern matchning av värdnamn. Om du vill använda CopyTable för HDInsight-kluster i två separata virtuella nätverk som är anslutna via en VPN Gateway måste du ange värd-IP-adresserna för Zookeeper-noderna i kvorumet.

Kör följande curl-kommando för att hämta kvorumvärdnamnen:

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"

Curl-kommandot hämtar ett JSON-dokument med HBase-konfigurationsinformation och grep kommandot returnerar endast posten "hbase.zookeeper.quorum", till exempel:

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

Värdet kvorumvärdnamn är hela strängen till höger om kolonet.

Om du vill hämta IP-adresserna för dessa värdar använder du följande curl-kommando för varje värd i föregående lista:

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

I det här curl-kommandot <zookeeperHostFullName> är det fullständiga DNS-namnet på en ZooKeeper-värd, till exempel <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net. Utdata från kommandot innehåller IP-adressen för den angivna värden, till exempel:

100 "ip" : "10.0.0.9",

När du har samlat in IP-adresserna för alla ZooKeeper-noder i kvorumet återskapar du måladressen:

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

I vårt exempel:

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

Ögonblicksbilder

Med ögonblicksbilder kan du göra en säkerhetskopia av data i HBase-datalagringen. Ögonblicksbilder har minimala omkostnader och slutförs inom några sekunder, eftersom en åtgärd för ögonblicksbilder i praktiken är en metadataåtgärd som samlar in namnen på alla filer i lagringen i det ögonblicket. Vid tidpunkten för en ögonblicksbild kopieras inga faktiska data. Ögonblicksbilder förlitar sig på den oföränderliga karaktären hos data som lagras i HDFS, där uppdateringar, borttagningar och infogningar alla representeras som nya data. Du kan återställa (klona) en ögonblicksbild i samma kluster eller exportera en ögonblicksbild till ett annat kluster.

För att skapa en ögonblicksbild, SSH in till huvudnoden i HDInsight HBase-klustret och starta hbase gränssnittet:

hbase shell

I hbase-gränssnittet använder du kommandot snapshot med namnen på tabellen och den här ögonblicksbilden:

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

Om du vill återställa en ögonblicksbild efter namn i hbase gränssnittet inaktiverar du först tabellen och återställer sedan ögonblicksbilden och återaktiverar tabellen:

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

Om du vill återställa en ögonblicksbild till en ny tabell använder du clone_snapshot:

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

Om du vill exportera en ögonblicksbild till HDFS för användning av ett annat kluster skapar du först ögonblicksbilden enligt beskrivningen tidigare och använder sedan verktyget ExportSnapshot. Kör det här verktyget inifrån SSH-sessionen till huvudnoden hbase , inte i gränssnittet:

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

<hdfsHBaseLocation> Kan vara någon av de lagringsplatser som är tillgängliga för källklustret och bör peka på den hbase-mapp som används av målklustret. Om du till exempel har ett sekundärt Azure Storage-konto kopplat till källklustret och kontot ger åtkomst till containern som används av standardlagringen för målklustret kan du använda det här kommandot:

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

Om du inte har ett sekundärt Azure Storage-konto kopplat till källklustret eller om källklustret är ett lokalt kluster (eller ett icke-HDI-kluster) kan det uppstå auktoriseringsproblem när du försöker komma åt lagringskontot för ditt HDI-kluster. Lös problemet genom att ange nyckeln till ditt lagringskonto som en kommandoradsparameter som visas i följande exempel. Du kan hämta nyckeln till ditt lagringskonto i Azure-portalen.

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'

Om ditt målkluster är ett ADLS Gen 2-kluster ändrar du föregående kommando för att justera för de konfigurationer som används av 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'

När ögonblicksbilden har exporterats går SSH till huvudnoden i målklustret och återställer ögonblicksbilden med hjälp av kommandot enligt beskrivningen clone_snapshot tidigare.

Ögonblicksbilder ger en fullständig säkerhetskopia av en tabell vid tidpunkten för snapshot kommandot. Ögonblicksbilder ger inte möjlighet att utföra inkrementella ögonblicksbilder efter tidsfönster eller att ange delmängder av kolumner som ska ingå i ögonblicksbilden.

Replikering

HBase-replikering skickar automatiskt transaktioner från ett källkluster till ett målkluster med hjälp av en asynkron mekanism med minimala omkostnader i källklustret. I HDInsight kan du konfigurera replikering mellan kluster där:

  • Käll- och målkluster finns i samma virtuella nätverk.
  • Käll- och målkluster finns i olika virtuella nätverk som är anslutna via en VPN-gateway, men båda klustren finns på samma geografiska plats.
  • Källklustret och målkluster finns i olika virtuella nätverk som är anslutna via en VPN-gateway och varje kluster finns på en annan geografisk plats.

De allmänna stegen för att konfigurera replikering är:

  1. Skapa tabellerna i källklustret och fyll i data.
  2. I målklustret skapar du tomma måltabeller med källtabellens schema.
  3. Registrera målklustret som en peer-fil till källklustret.
  4. Aktivera replikering i önskade källtabeller.
  5. Kopiera befintliga data från källtabellerna till måltabellerna.
  6. Replikeringen kopierar automatiskt nya dataändringar till källtabellerna till måltabellerna.

Om du vill aktivera replikering i HDInsight använder du en skriptåtgärd på ditt HDInsight-källkluster som körs. En genomgång av hur du aktiverar replikering i klustret eller experimenterar med replikering på exempelkluster som skapats i virtuella nätverk med Hjälp av Azure Resource Manager-mallar finns i Konfigurera Apache HBase-replikering. Den artikeln innehåller även instruktioner för att aktivera replikering av Phoenix-metadata.

Nästa steg