Biztonsági mentés és replikáció beállítása az Apache HBase-hez és az Apache Phoenixhez a HDInsighton
Az Apache HBase számos módszert támogat az adatvesztés elleni védelemhez:
hbase
A mappa másolása- Exportálás és importálás
- Táblázatok másolása
- Pillanatképek
- Replikáció
Megjegyzés:
Az Apache Phoenix a metaadatokat HBase-táblákban tárolja, így a metaadatok biztonsági mentése a HBase rendszerkatalógus-tábláinak biztonsági mentésekor történik.
A következő szakaszok az egyes megközelítések használati forgatókönyvét ismertetik.
A hbase mappa másolása
Ezzel a módszerrel az összes HBase-adatot átmásolhatja anélkül, hogy ki tudná választani a táblák vagy oszlopcsaládok egy részhalmazát. Az ezt követő megközelítések nagyobb ellenőrzést biztosítanak.
A HDInsightban található HBase a fürt létrehozásakor kiválasztott alapértelmezett tárolót használja, akár Azure Storage-blobokat, akár Azure Data Lake Storage-t. A HBase mindkét esetben az alábbi elérési úton tárolja az adatokat és a metaadatfájlokat:
/hbase
Egy Azure Storage-fiókban a
hbase
mappa a blobtároló gyökerében található:wasbs://<containername>@<accountname>.blob.core.windows.net/hbase
Az Azure Data Lake Storage-ban a mappa a
hbase
fürt kiépítésekor megadott gyökérútvonal alatt található. Ez a gyökérútvonal általában rendelkezik egyclusters
mappával, amely a HDInsight-fürtről elnevezett almappával rendelkezik:/clusters/<clusterName>/hbase
A mappa mindkét esetben tartalmazza az összes adatot, hbase
amelyet a HBase kiürített a lemezre, de lehet, hogy nem tartalmazza a memóriában lévő adatokat. Mielőtt a HBase-adatok pontos ábrázolásaként hivatkozhat erre a mappára, le kell állítania a fürtöt.
A fürt törlése után hagyhatja helyben az adatokat, vagy átmásolhatja az adatokat egy új helyre:
Hozzon létre egy új HDInsight-példányt, amely az aktuális tárolási helyre mutat. Az új példány az összes meglévő adattal jön létre.
Másolja a
hbase
mappát egy másik Azure Storage-blobtárolóba vagy Data Lake Storage-helyre, majd kezdjen új fürtöt az adatokkal. Az Azure Storage esetében használja az AzCopyt, a Data Lake Storage esetében pedig az AdlCopyt.
Exportálás és importálás
A forrás HDInsight-fürtön az Exportálás segédprogrammal (a HBase-ben) exportálhat adatokat egy forrástáblából az alapértelmezett csatolt tárolóba. Ezután átmásolhatja az exportált mappát a céltárhelyre, és futtathatja az Importálás segédprogramot a cél HDInsight-fürtön.
Táblaadatok exportálásához először az SSH-t a forrás HDInsight-fürt fő csomópontjába, majd futtassa a következő hbase
parancsot:
hbase org.apache.hadoop.hbase.mapreduce.Export "<tableName>" "/<path>/<to>/<export>"
Az exportálási könyvtár nem létezhet. A tábla neve megkülönbözteti a kis- és nagybetűk nevét.
Táblaadatok importálásához az SSH-t a cél HDInsight-fürt fő csomópontjába kell importálnia, majd futtassa a következő hbase
parancsot:
hbase org.apache.hadoop.hbase.mapreduce.Import "<tableName>" "/<path>/<to>/<export>"
A táblának már léteznie kell.
Adja meg az alapértelmezett tároló teljes exportálási útvonalát vagy a csatolt tárolási beállítások bármelyikét. Például az Azure Storage-ban:
wasbs://<containername>@<accountname>.blob.core.windows.net/<path>
Az Azure Data Lake Storage Gen2-ben a szintaxis a következő:
abfs://<containername>@<accountname>.dfs.core.windows.net/<path>
Az Azure Data Lake Storage Gen1-ben a szintaxis a következő:
adl://<accountName>.azuredatalakestore.net:443/<path>
Ez a megközelítés táblázatszintű részletességet kínál. Megadhatja a belefoglalandó sorok dátumtartományát is, amely lehetővé teszi a folyamat növekményes végrehajtását. Minden dátum ezredmásodpercben van a Unix-korszak óta.
hbase org.apache.hadoop.hbase.mapreduce.Export "<tableName>" "/<path>/<to>/<export>" <numberOfVersions> <startTimeInMS> <endTimeInMS>
Meg kell adnia az egyes exportálandó sorok verzióinak számát. Ha az összes verziót bele szeretné foglalni a dátumtartományba, állítsa a <numberOfVersions>
maximális lehetséges sorverziónál nagyobb értékre, például 100000 értékre.
Táblázatok másolása
A CopyTable segédprogram egy forrástáblából, sorról sorra másol adatokat egy olyan meglévő céltáblába, amelynek sémája megegyezik a forráséval. A céltábla lehet ugyanazon a fürtön vagy egy másik HBase-fürtön. A táblanevek megkülönböztetik a kis- és nagybetűket.
A CopyTable fürtben való használatához az SSH-t a forrás HDInsight-fürt fő csomópontjába kell csatlakoztatnia, majd futtassa a hbase
következő parancsot:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=<destTableName> <srcTableName>
Ha a CopyTable használatával egy másik fürt táblájára szeretne másolni, adja hozzá a peer
kapcsolót a célfürt címével:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=<destTableName> --peer.adr=<destinationAddress> <srcTableName>
A célcím a következő három részből áll:
<destinationAddress> = <ZooKeeperQuorum>:<Port>:<ZnodeParent>
<ZooKeeperQuorum>
Az Apache ZooKeeper-csomópontok teljes tartományneveinek vesszővel tagolt listája, például:<zookeepername1.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername2.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername3.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net><><>
<Port>
a HDInsight alapértelmezett értéke 2181, tehát<ZnodeParent>
/hbase-unsecure
a teljes<destinationAddress>
érték a következő:<zookeepername1.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername2.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,zookeepername3.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net><<>>:2181:/hbase-unsecure
A HDInsight-fürt értékeinek lekéréséről ebben a cikkben az Apache ZooKeeper kvórumlistájának manuális gyűjtéséről olvashat.
A CopyTable segédprogram paramétereket is támogat a másolandó sorok időtartományának megadásához, valamint a másolandó tábla oszlopcsaládjainak részhalmazának megadásához. A CopyTable által támogatott paraméterek teljes listájának megtekintéséhez futtassa a CopyTable parancsot paraméterek nélkül:
hbase org.apache.hadoop.hbase.mapreduce.CopyTable
A CopyTable megvizsgálja a forrástábla teljes tartalmát, amelyet átmásol a céltáblába. Ez csökkentheti a HBase-fürt teljesítményét a CopyTable végrehajtása során.
Megjegyzés:
Az adatok táblák közötti másolásának automatizálásához tekintse meg a hdi_copy_table.sh
szkriptet a GitHub Azure HBase Utils-adattárában .
Manuálisan gyűjtse össze az Apache ZooKeeper kvórumlistáját
Ha mindkét HDInsight-fürt ugyanabban a virtuális hálózatban van, ahogyan azt korábban leírtuk, a belső gazdagépnév-feloldás automatikus. Ha a CopyTable for HDInsight-fürtöket vpn-átjáróval összekapcsolt két különálló virtuális hálózatban szeretné használni, meg kell adnia a Zookeeper-csomópontok gazda IP-címét a kvórumban.
A kvórumgazdanevek beszerzéséhez futtassa a következő curl parancsot:
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"
A curl parancs lekéri a HBase konfigurációs adatait tartalmazó JSON-dokumentumot, és a grep
parancs csak a "hbase.zookeeper.quorum" bejegyzést adja vissza, például:
"hbase.zookeeper.quorum" : "<zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername2>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net,<zookeepername3>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net"
A kvórumgazdanevek értéke a kettősponttól jobbra lévő teljes sztring.
A gazdagépek IP-címeinek lekéréséhez használja az alábbi curl parancsot az előző listában szereplő összes gazdagéphez:
curl -u admin:<password> -X GET -H "X-Requested-By: ambari" "https://<clusterName>.azurehdinsight.net/api/v1/clusters/<clusterName>/hosts/<zookeeperHostFullName>" | grep "ip"
Ebben a curl parancsban <zookeeperHostFullName>
egy ZooKeeper-gazdagép teljes DNS-neve szerepel, például a példa <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.net
. A parancs kimenete tartalmazza a megadott gazdagép IP-címét, például:
100 "ip" : "10.0.0.9",
Miután begyűjtötte a kvórum összes ZooKeeper-csomópontjának IP-címét, építse újra a célcímet:
<destinationAddress> = <Host_1_IP>,<Host_2_IP>,<Host_3_IP>:<Port>:<ZnodeParent>
A jelen példában:
<destinationAddress> = 10.0.0.9,10.0.0.8,10.0.0.12:2181:/hbase-unsecure
Pillanatképek
A pillanatképek lehetővé teszik az adatok idő szerinti biztonsági mentését a HBase-adattárban. A pillanatképek minimális többletterheléssel rendelkeznek, és másodperceken belül befejeződnek, mivel a pillanatkép-művelet tulajdonképpen egy metaadat-művelet, amely az adott pillanatban rögzíti a tárban lévő összes fájl nevét. Pillanatképek készítésekor a rendszer nem másol tényleges adatokat. A pillanatképek a HDFS-ben tárolt adatok nem módosítható jellegére támaszkodnak, ahol a frissítések, a törlések és a beszúrások mind új adatként jelennek meg. Visszaállíthat (klónozhat) egy pillanatképet ugyanazon a fürtön, vagy exportálhat egy pillanatképet egy másik fürtbe.
Pillanatkép létrehozásához az SSH lépjen be a HDInsight HBase-fürt fő csomópontjára, és indítsa el a rendszerhéjat hbase
:
hbase shell
A hbase-rendszerhéjon belül használja a pillanatkép parancsot a tábla és a pillanatkép nevével:
snapshot '<tableName>', '<snapshotName>'
Ha név szerint szeretne visszaállítani egy pillanatképet a hbase
rendszerhéjon belül, először tiltsa le a táblát, majd állítsa vissza a pillanatképet, és engedélyezze újra a táblát:
disable '<tableName>'
restore_snapshot '<snapshotName>'
enable '<tableName>'
Pillanatkép új táblába való visszaállításához használja a clone_snapshot:
clone_snapshot '<snapshotName>', '<newTableName>'
Ha egy pillanatképet egy másik fürt számára szeretne exportálni a HDFS-be, először hozza létre a korábban ismertetett pillanatképet, majd használja az ExportSnapshot segédprogramot. Futtassa ezt a segédprogramot az SSH-munkameneten belülről a fő csomópontra, nem pedig a rendszerhéjon hbase
belül:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot <snapshotName> -copy-to <hdfsHBaseLocation>
A <hdfsHBaseLocation>
forrásfürt számára elérhető tárolóhelyek bármelyike lehet, és a célfürt által használt hbase mappára kell mutatnia. Ha például egy másodlagos Azure Storage-fiók van csatlakoztatva a forrásfürthöz, és ez a fiók hozzáférést biztosít a célfürt alapértelmezett tárolója által használt tárolóhoz, ezt a parancsot használhatja:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 'Snapshot1' -copy-to 'wasbs://secondcluster@myaccount.blob.core.windows.net/hbase'
Ha nem rendelkezik másodlagos Azure Storage-fiókkal a forrásfürthöz, vagy ha a forrásfürt helyszíni fürt (vagy nem HDI-fürt), engedélyezési problémák léphetnek fel a HDI-fürt tárfiókjának elérésekor. A probléma megoldásához adja meg a tárfiók kulcsát parancssori paraméterként az alábbi példában látható módon. A tárfiók kulcsát az Azure Portalon szerezheti be.
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'
Ha a célfürt egy ADLS Gen 2-fürt, módosítsa az előző parancsot az ADLS Gen 2 által használt konfigurációk módosításához:
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'
A pillanatkép exportálása után az SSH a célfürt fő csomópontjába kerül, és a korábban ismertetett paranccsal visszaállítja a clone_snapshot
pillanatképet.
A pillanatképek teljes biztonsági másolatot nyújtanak egy tábláról a snapshot
parancs idején. A pillanatképek nem biztosítanak növekményes pillanatképeket az időablakok szerint, és nem adhatók meg a pillanatképbe belefoglalandó oszlopcsaládok részhalmazai sem.
Replikáció
A HBase-replikáció automatikusan leküldi a tranzakciókat egy forrásfürtről egy célfürtre egy aszinkron mechanizmus használatával, amely minimális többletterhelést okoz a forrásfürtön. A HDInsightban olyan fürtök közötti replikációt állíthat be, ahol:
- A forrás- és célfürtök ugyanabban a virtuális hálózatban találhatók.
- A forrás- és célfürtök különböző, VPN-átjáróval csatlakoztatott virtuális hálózatokban találhatók, de mindkét fürt ugyanazon a földrajzi helyen található.
- A forrásfürtök és a célfürtök különböző, VPN-átjáróval csatlakoztatott virtuális hálózatokban találhatók, és mindegyik fürt más földrajzi helyen található.
A replikáció beállításának általános lépései a következők:
- A forrásfürtön hozza létre a táblákat, és töltse fel az adatokat.
- A célfürtön hozzon létre üres céltáblákat a forrástábla sémájával.
- Regisztrálja a célfürtöt társként a forrásfürthöz.
- Engedélyezze a replikációt a kívánt forrástáblákon.
- Másolja a meglévő adatokat a forrástáblákból a céltáblákba.
- A replikáció automatikusan átmásolja az új adatmódosításokat a forrástáblákba a céltáblákba.
A HDInsighton végzett replikáció engedélyezéséhez alkalmazzon szkriptműveletet a futó FORRÁS HDInsight-fürtre. A fürt replikációjának engedélyezéséről, illetve a virtuális hálózatokban azure Resource Manager-sablonok használatával létrehozott mintafürtök replikációjának kipróbálásáról az Apache HBase-replikáció konfigurálása című témakörben olvashat. Ez a cikk a Phoenix-metaadatok replikációjának engedélyezésére vonatkozó utasításokat is tartalmaz.