hbase數據備份或者容災方案


HBase的數據備份或者容災方案有這幾種:Distcp,CopyTable,Export/Import,Snapshot,Replication,以下分別介紹(以下描述的內容均是基於0.94.20版本)。

 

一、Distcp

   在使用distcp命令copy hdfs文件的方式實現備份時,需要禁用備份表確保copy時該表沒有數據寫入,對於在線服務的hbase集群,該方式不可用,而且在一些文章中可以看到通過distcp文件恢復hbase表時需使用:

bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable命令把從hdfs目錄中恢復表的元數據,然后重啟hbase,但是0.94之后的版本的bin目錄下均沒有找到add_table.rb文件,似乎hbase已經廢棄該功能。

 

二、CopyTable

  執行命令前,需先創建表

 

  支持時間區間、row區間,改變表名稱,改變列簇名稱,指定是否copy刪除數據等功能,例如:

 

 hbase org.apache.hadoop.hbase.mapreduce.CopyTable --starttime=1265875194289 --endtime=1265878794289 --peer.adr= dstClusterZK:2181:/hbase --families=myOldCf:myNewCf,cf2,cf3 TestTable

 

    1、同一個集群不同表名稱

 

      hbase org.apache.hadoop.hbase.mapreduce.CopyTable --new.name=tableCopy  srcTable

 

    2、跨集群copy表

 

      hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=dstClusterZK:2181:/hbase srcTable

 

   該方式,原表、目標表的名稱相同

   全部使用方式如下:

    

   MR的map數量與表的region數相同,與HFile文件個數無關。

 

   CopyTable工具采用scan查詢,寫入新表時采用put和delete API,全是基於hbase的client api進行讀寫,無法使用Import工具的bulk導入。

 

  三、Export/Import

  通過Export導出數據到目標集群的hdfs,再在目標集群執行import導入數據,Export支持指定開始時間和結束時間,因此可以做增量備份,Export工具參數如下:  


    可見,在導出時可以指定version,starttime,endtime等參數,並且可以通過-D指定是否壓縮,指定caching等屬性,比如:

 

hbase org.apache.hadoop.hbase.mapreduce.Export test4 hdfs://t2-namenode:9000/test4_90 1 1415693812520 1415694912520

 

Export導出工具與CopyTable一樣是依賴hbase的scan讀取數據,並且采用的InportFormat與CopyTable一樣是TableInputFormat類,從該類的getSplits()方法可以看出MR的map數與hbase表的region數相同。

 

Import工具參數如下:   


   在import時可以指定使用bulk的方式,bulk是生成hfile格式的文件,直接導入到Region,無需經歷hbase的寫數據過程,從而無需消耗memstore,無需Flush等,更加高效,如果不指定bulk文件路徑(hdfs的路徑)則會采用hbase 的put和delete API進行寫入。

 

To import 0.94 exported files in a 0.96 cluster or onwards, you need to set system property "hbase.import.version" when running the import command as below:

 

$ bin/hbase -Dhbase.import.version=0.94 org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>

使用Import工具前必須先創建表,關於hbase.import.version屬性是0.96的功能。


注: hbase可以使用filter和export和import

結合:hbase org.apache.hadoop.hbase.mapreduce.Driver


  四、Snapshot

  開啟快照功能,在hbase-site.xml文件中添加如下配置項:

       <property>

 

        <name>hbase.snapshot.enabled</name>

 

        <value>true</value>

 

    </property>

 

在hbase shell中使用clone_snapshot, delete_snapshot, list_snapshots, restore_snapshot, snapshot命令可是是想創建快照,查看快照,通過快照恢復表,通過快照創建一個新的表等功能,需要注意的是:如果該表開啟了replication功能實現主從同步則在使用restore_snapshot功能對主表進行恢復時,必須先停止replication功能並且redo the bootstrap,因為replication是基於WAL日志實現的,而snapshot是直接在hdfs層面不是基於hbase的put、delete等API進行的,不會寫WAL日志。

在創建snapshot后,可以通過ExportSnapshot工具把快照導出到另外一個集群,實現數據備份或者數據遷移,ExportSnapshot工具的用法如下:

 例如:

 

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot test4_snapshot_201411111422 -copy-to hdfs://t2-namenode:9000/hbase -mappers 2

 

執行該命令后,在t2-namenode:9000的hdfs中會把test4_snapshot_201411111422文件夾copy到/hbase/.hbase-snapshot文件下,進入t2-namenode這個hbase集群,執行list_snapshots會看到有一個快照:test4_snapshot_201411111422,通過命令clone_snapshot可以把該快照copy成一個新的表,不用提前創建表,新表的region個數等信息完全與快照保持一致。

 

在使用snapshot把一個集群的數據copy到新集群后,應用程序開啟雙寫,然后可以使用Export工具把快照與雙寫之間的數據導入到新集群,從而實現數據遷移,為保障數據不丟失,Export導出時指定的時間范圍可以適當放寬。

 

五、Replication

可以通過replication機制實現hbase集群的主從模式,具體步驟如下:

    1、  zookeeper不能被hbase托管,如果主從hbase集群共用一個zk集群,則zookeeper.znode.parent不能都是默認的hbase,可以配置為hbase-master和hbase-slave

    2、 在主hbase集群的hbase-site.xml中添加配置項:

<property>

    <name>hbase.replication</name>

    <value>true</value>

     </property>

<property>

    <name>replication.source.nb.capacity</name>

    <value>25000</value>

<description>主集群每次向從集群發送的entry最大的個數,默認值25000,可根據集群規模做出適當調整</description>

     </property>

<property>

<name>replication.source.size.capacity</name>

<value>67108864</value>

<description>主集群每次向從集群發送的entry的包的最大值大小,默認為64M</description>

</property>

<property>

<name>replication.source.ratio</name>

<value>1</value>

<description>主集群使用的從集群的RS的數據百分比,默認為0.1,需調整為1,充分利用從集群的RS</description>

</property>

<property>

<name>replication.sleep.before.failover</name>

<value>2000</value>

<description>主集群在RS宕機多長時間后進行failover,默認為2秒,具體的sleep時間是: sleepBeforeFailover + (long) (new Random().nextFloat() * sleepBeforeFailover) </description>

</property>

<property>

<name>replication.executor.workers</name>

<value>1</value>

<description>從事replication的線程數,默認為1,如果寫入量大,可以適當調大</description>

</property>

 

   3、在從hbase集群的hbase-site.xml中添加:

<property>

    <name>hbase.replication</name>

    <value>true</value>

     </property>

 

   4、 進入主集群的shell,執行:

add_peer 'ID' 'CLUSTER_KEY'

The ID must be a short integer. To compose the CLUSTER_KEY, use the following template:

hbase.zookeeper.quorum:hbase.zookeeper.property.clientPort:zookeeper.znode.parent

This will show you the help to setup the replication stream between both clusters. If both clusters use the same Zookeeper cluster, you have to use a different zookeeper.znode.parent since they can't write in the same folder.

   5、  在從集群中創建一個與master集群相同的表

   6、 修改表定義,開啟復制功能

disable 'your_table'

alter 'your_table', {NAME => 'family_name', REPLICATION_SCOPE => '1'}

    enable 'your_table

此處的REPLICATION_SCOPE => '1'中的1,與第3步中設置到“ID”相同

 

 

可以通過工具VerifyReplication對復制的數據一致性進行校驗,需在主集群執行,例如:

hbase org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication --starttime=1265875194289 --stoptime=2265878794289 1 test4

 

用法如下: 

 提示:

 

   1、 hbase的replication,如果是在建立主表和從表的關系前,主表已經有數據則該部分數據不會被同步到從表中,因為replication是依賴WAL日志進行的同步,可以通過如下步驟實現:

 

      a)   通過snapshot把歷史數據導入到從集群;

 

      b)   開啟replication;

 

      c)   通過Export工具把快照和開啟replication之間的數據導入到從表;

 

      d)   通過VerifyReplication工具校驗數據的一致性。

 

   2、  如果客戶端在寫入數據時設置不寫WAL日志,則會導致從集群不會同步數據;

 

   3、  主從同步是異步的,因此數據不一定會立即同步到從表;

 

   4、  創建主、從表后,在向主表寫入數據時,停止從集群,寫完后再開啟從集群,這時如果主集群的WAL日志還在則會同步到從表中;

由於不寫WAL日志的數據不會被同步到從集群,因此對於重要的數據建議再通過snapshot進行定期的備份。



以上介紹的幾種hbase數據遷移方案,有些可以實現不同集群之間的hbase數據表進行數據遷移。但是有些事由mr實現的,所以當網絡性能不是很理想的時候,會影響遷移效果,可能會導致數據的丟失。接下來介紹一種手動的數據遷移方式,雖然繁瑣,但是對於不同集群的hbase數據之間的遷移更穩定

手動遷移方案:

1、從源hbase集群中復制出Hbase數據庫表到本地目錄

hbase fs -get

2、目的Hbase導入

hbase fs -put

3、修復.META.表

hbase hbck  -fixMeta

4、重新分配數據到各RegionServer

hbase hbck -fixAssignments

轉自:http://itindex.net/detail/51698-hbase-%E6%95%B0%E6%8D%AE-%E5%A4%87%E4%BB%BD?utm_source=tuicool&utm_medium=referral



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM