Share via


HDInsight üzerinde Apache HBase ve Apache Phoenix için yedekleme ve çoğaltmayı ayarlama

Apache HBase, veri kaybına karşı koruma için çeşitli yaklaşımları destekler:

  • hbase Klasörü kopyalama
  • Dışarı aktar ve içeri aktar
  • Tabloları kopyalama
  • Anlık Görüntüler
  • Çoğaltma

Dekont

Apache Phoenix meta verilerini HBase tablolarında depolar, böylece HBase sistem kataloğu tablolarını yedeklerken meta veriler yedeklenmiş olur.

Aşağıdaki bölümlerde bu yaklaşımların her biri için kullanım senaryosu açıklanmaktadır.

hbase klasörünü kopyalama

Bu yaklaşımla, tabloların veya sütun ailelerinin bir alt kümesini seçemeden tüm HBase verilerini kopyalarsınız. Sonraki yaklaşımlar daha fazla denetim sağlar.

HDInsight'ta HBase, azure Depolama blobları veya Azure Data Lake Depolama kümeyi oluştururken seçilen varsayılan depolamayı kullanır. Her iki durumda da HBase, verilerini ve meta veri dosyalarını aşağıdaki yol altında depolar:

/hbase

  • Bir Azure Depolama hesabında hbase klasörü blob kapsayıcısının kökünde bulunur:

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

  • Azure Data Lake Depolama'da klasör, hbase kümeyi sağlarken belirttiğiniz kök yolun altında yer alır. Bu kök yol genellikle HDInsight kümenizin adını taşıyan bir alt klasörü olan bir clusters klasöre sahiptir:

    /clusters/<clusterName>/hbase

Her iki durumda da, hbase klasör HBase'in diske boşaltmış olduğu tüm verileri içerir, ancak bellek içi verileri içermeyebilir. HBase verilerinin doğru bir gösterimi olarak bu klasöre güvenebilmeniz için önce kümeyi kapatmanız gerekir.

Kümeyi sildikten sonra verileri yerinde bırakabilir veya yeni bir konuma kopyalayabilirsiniz:

  • Geçerli depolama konumunu gösteren yeni bir HDInsight örneği oluşturun. Yeni örnek tüm mevcut verilerle oluşturulur.

  • hbase Klasörü farklı bir Azure Depolama blob kapsayıcısına veya Data Lake Depolama konumuna kopyalayın ve ardından bu verilerle yeni bir küme başlatın. Azure Depolama için AzCopy ve Data Lake Depolama adlCopy kullanın.

Dışarı aktar ve içeri aktar

Kaynak HDInsight kümesinde Dışarı Aktarma yardımcı programını (HBase ile birlikte) kullanarak bir kaynak tablodan varsayılan ekli depolama alanına veri dışarı aktarın. Ardından dışarı aktarılan klasörü hedef depolama konumuna kopyalayabilir ve hedef HDInsight kümesinde İçeri Aktarma yardımcı programını çalıştırabilirsiniz.

Tablo verilerini dışarı aktarmak için önce SSH'yi kaynak HDInsight kümenizin baş düğümüne aktarın ve ardından aşağıdaki hbase komutu çalıştırın:

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

Dışarı aktarma dizini zaten mevcut olmamalıdır. Tablo adı büyük/küçük harfe duyarlıdır.

Tablo verilerini içeri aktarmak için SSH'yi hedef HDInsight kümenizin baş düğümüne aktarın ve aşağıdaki hbase komutu çalıştırın:

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

Tablo zaten var olmalıdır.

Varsayılan depolama alanına veya ekli depolama seçeneklerinden herhangi birine tam dışarı aktarma yolunu belirtin. Örneğin, Azure Depolama:

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

Azure Data Lake Storage 2. Nesil söz dizimi şöyledir:

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

Azure Data Lake Storage 1. Nesil söz dizimi şöyledir:

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

Bu yaklaşım tablo düzeyinde ayrıntı düzeyi sunar. Ayrıca, eklenecek satırlar için bir tarih aralığı belirterek işlemi artımlı olarak gerçekleştirmenizi sağlayabilirsiniz. Unix dönemi bu yana her tarih milisaniye cinsindendir.

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

Dışarı aktarılacak her satırın sürüm sayısını belirtmeniz gerekir. Tüm sürümleri tarih aralığına eklemek için, mümkün olan en yüksek satır sürümlerinizden daha büyük bir değere (örneğin, 100000) ayarlayın <numberOfVersions> .

Tabloları kopyalama

CopyTable yardımcı programı, verileri satır satır bir kaynak tablodan kaynakla aynı şemaya sahip var olan bir hedef tabloya kopyalar. Hedef tablo aynı kümede veya farklı bir HBase kümesinde olabilir. Tablo adları büyük/küçük harfe duyarlıdır.

CopyTable'ı bir küme içinde kullanmak için kaynak HDInsight kümenizin baş düğümüne SSH gönderin ve şu hbase komutu çalıştırın:

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

CopyTable'ı kullanarak farklı bir kümedeki bir tabloya kopyalamak için anahtarı hedef kümenin adresine ekleyin peer :

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

Hedef adres aşağıdaki üç bölümden oluşur:

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

  • <ZooKeeperQuorum> , Apache ZooKeeper düğümlerinin FQDN adlarının virgülle ayrılmış bir listesidir, örneğin:

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

  • <Port> HDInsight'ta varsayılan olarak 2181 ve <ZnodeParent> şeklindedir /hbase-unsecure, bu nedenle tam <destinationAddress> değer şu şekilde olur:

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

HDInsight kümeniz için bu değerleri alma hakkında ayrıntılı bilgi için bu makaledeki Apache ZooKeeper Çekirdek Listesini El ile Toplama bölümüne bakın.

CopyTable yardımcı programı, kopyalanacak satırların zaman aralığını ve kopyalanacak tablodaki sütun ailelerinin alt kümesini belirtmek için parametreleri de destekler. CopyTable tarafından desteklenen parametrelerin tam listesini görmek için, Herhangi bir parametre olmadan CopyTable'ı çalıştırın:

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

CopyTable, hedef tabloya kopyalanacak kaynak tablo içeriğinin tamamını tarar. Bu, CopyTable yürütülürken HBase kümenizin performansını düşürebilir.

Dekont

Tablolar arasında veri kopyalamayı otomatikleştirmek için GitHub'daki Azure HBase Utils deposundaki betike bakınhdi_copy_table.sh.

Apache ZooKeeper çekirdek listesini el ile toplama

Her iki HDInsight kümesi de daha önce açıklandığı gibi aynı sanal ağda olduğunda, iç ana bilgisayar adı çözümlemesi otomatiktir. BIR VPN Gateway tarafından bağlanan iki ayrı sanal ağda HDInsight kümeleri için CopyTable kullanmak için çekirdekteki Zookeeper düğümlerinin ana bilgisayar IP adreslerini sağlamanız gerekir.

Çekirdek ana bilgisayar adlarını almak için aşağıdaki curl komutunu çalıştırın:

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 komutu HBase yapılandırma bilgilerine sahip bir JSON belgesi alır ve grep komut yalnızca "hbase.zookeeper.quorum" girdisini döndürür, örneğin:

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

Çekirdek ana bilgisayar adları değeri, iki nokta üst üste sağındaki dizenin tamamıdır.

Bu konakların IP adreslerini almak için, önceki listedeki her konak için aşağıdaki curl komutunu kullanın:

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

Bu curl komutunda, <zookeeperHostFullName> örneği <zookeepername1>.54o2oqawzlwevlfxgay2500xtg.dx.internal.cloudapp.netgibi bir ZooKeeper ana bilgisayarının tam DNS adıdır. Komutun çıkışı, belirtilen konağın IP adresini içerir, örneğin:

100 "ip" : "10.0.0.9",

Çekirdekteki tüm ZooKeeper düğümleri için IP adreslerini topladıktan sonra hedef adresi yeniden oluşturun:

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

Örneğimizde:

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

Anlık Görüntüler

Anlık görüntüler, HBase veri deponuzdaki verilerin belirli bir noktaya yedeğini almanıza olanak tanır. Anlık görüntüler minimum yüke sahiptir ve saniyeler içinde tamamlanır çünkü anlık görüntü işlemi, depolamadaki tüm dosyaların adlarını o anda yakalayan bir meta veri işlemidir. Anlık görüntü sırasında hiçbir gerçek veri kopyalanır. Anlık görüntüler HDFS'de depolanan ve güncelleştirmelerin, silmelerin ve eklemelerin tümünün yeni veri olarak temsil edildiği sabit doğasına dayanır. Bir anlık görüntüyü aynı kümeye geri yükleyebilir (kopyalayabilir) veya bir anlık görüntüyü başka bir kümeye aktarabilirsiniz.

Anlık görüntü oluşturmak için HDInsight HBase kümenizin baş düğümünde SSH yapın ve kabuğu başlatın hbase :

hbase shell

hbase kabuğunda, anlık görüntü komutunu tablonun ve bu anlık görüntünün adlarıyla birlikte kullanın:

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

Bir anlık görüntüyü kabuk içinde hbase ada göre geri yüklemek için önce tabloyu devre dışı bırakın, ardından anlık görüntüyü geri yükleyin ve tabloyu yeniden etkinleştirin:

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

Anlık görüntüyü yeni bir tabloya geri yüklemek için clone_snapshot kullanın:

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

Bir anlık görüntüyü başka bir küme tarafından kullanılmak üzere HDFS'ye aktarmak için önce daha önce açıklandığı gibi anlık görüntüyü oluşturun ve ardından ExportSnapshot yardımcı programını kullanın. Bu yardımcı programı kabuk içinde değil, SSH oturumu içinden baş düğüme hbase çalıştırın:

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

<hdfsHBaseLocation>, kaynak kümenizin erişebildiği herhangi bir depolama konumu olabilir ve hedef kümeniz tarafından kullanılan hbase klasörüne işaret etmelidir. Örneğin, kaynak kümenize bağlı ikincil bir Azure Depolama hesabınız varsa ve bu hesap hedef kümenin varsayılan depolama alanı tarafından kullanılan kapsayıcıya erişim sağlıyorsa şu komutu kullanabilirsiniz:

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

Kaynak kümenize bağlı ikincil bir Azure Depolama hesabınız yoksa veya kaynak kümeniz bir şirket içi kümeyse (veya HDI olmayan bir kümeyse), HDI kümenizin depolama hesabına erişmeye çalıştığınızda yetkilendirme sorunlarıyla karşılaşabilirsiniz. Bu sorunu çözmek için aşağıdaki örnekte gösterildiği gibi depolama hesabınızın anahtarını komut satırı parametresi olarak belirtin. Anahtarı Azure portalından depolama hesabınıza alabilirsiniz.

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'

Hedef kümeniz bir ADLS 2. Nesil kümesiyse, ADLS 2. Nesil tarafından kullanılan yapılandırmaları ayarlamak için önceki komutu değiştirin:

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'

Anlık görüntü dışarı aktarıldıktan sonra SSH hedef kümenin baş düğümüne aktarılır ve daha önce açıklandığı gibi komutunu kullanarak clone_snapshot anlık görüntüyü geri yükler.

Anlık görüntüler, komut sırasında bir tablonun tam yedeklemesini snapshot sağlar. Anlık görüntüler, zaman pencerelerine göre artımlı anlık görüntüler gerçekleştirme olanağı sağlamaz veya anlık görüntüye eklenecek sütun ailelerinin alt kümelerini belirtmez.

Çoğaltma

HBase çoğaltması , kaynak kümede en düşük yüke sahip zaman uyumsuz bir mekanizma kullanarak işlemleri otomatik olarak bir kaynak kümeden hedef kümeye gönderir. HDInsight'ta, aşağıdaki durumlarda kümeler arasında çoğaltma ayarlayabilirsiniz:

  • Kaynak ve hedef kümeler aynı sanal ağdadır.
  • Kaynak ve hedef kümeleri bir VPN ağ geçidi tarafından bağlanan farklı sanal ağlarda bulunur, ancak her iki küme de aynı coğrafi konumda bulunur.
  • Kaynak küme ve hedef kümeleri bir VPN ağ geçidi tarafından bağlanan farklı sanal ağlarda bulunur ve her küme farklı bir coğrafi konumda bulunur.

Çoğaltmayı ayarlamaya yönelik genel adımlar şunlardır:

  1. Kaynak kümede tabloları oluşturun ve verileri doldurun.
  2. Hedef kümede, kaynak tablonun şemasıyla boş hedef tablolar oluşturun.
  3. Hedef kümeyi kaynak kümeye eş olarak kaydedin.
  4. İstenen kaynak tablolarda çoğaltmayı etkinleştirin.
  5. Var olan verileri kaynak tablolardan hedef tablolara kopyalayın.
  6. Çoğaltma, yeni veri değişikliklerini otomatik olarak kaynak tablolara hedef tablolara kopyalar.

HDInsight'ta çoğaltmayı etkinleştirmek için, çalışan kaynak HDInsight kümenize bir Betik Eylemi uygulayın. Kümenizde çoğaltmayı etkinleştirme veya Azure Resource Manager şablonları kullanılarak sanal ağlarda oluşturulan örnek kümelerde çoğaltma denemeleri için bkz . Apache HBase çoğaltmasını yapılandırma. Bu makale, Phoenix meta verilerinin çoğaltılmasını etkinleştirme yönergelerini de içerir.

Sonraki adımlar