Hbase數據備份案例講解

HBase的數據備份

1.1 基於HBase提供的類對錶進行備份

  • 使用HBase提供的類把HBase中某張表的數據導出到HDFS,之後再導出到測試hbase表中。

  • (1) ==從hbase表導出到HDFS==

    [hadoop@node01 shells]$ hbase org.apache.hadoop.hbase.mapreduce.Export myuser /hbase_data/myuser_bak
    
  • (2) ==文件導入hbase表==

    hbase shell中創建備份目標表

    create 'myuser_bak','f1','f2'
  • 將HDFS上的數據導入到備份目標表中

    hbase org.apache.hadoop.hbase.mapreduce.Driver import myuser_bak /hbase_data/myuser_bak/*
  • 補充說明

    以上都是對數據進行了全量備份,後期也可以實現表的增量數據備份,增量備份跟全量備份操作差不多,只不過要在後面加上時間戳。

    例如:
    HBase數據導出到HDFS

    hbase org.apache.hadoop.hbase.mapreduce.Export test /hbase_data/test_bak_increment 開始時間戳  結束時間戳

1.2 基於snapshot快照對錶進行備份

  • 通過snapshot快照的方式實現HBase數據的遷移和拷貝。這種方式比較常用,效率高,也是最爲推薦的數據遷移方式。

  • HBase的snapshot其實就是一組==metadata==信息的集合(文件列表),通過這些metadata信息的集合,就能將表的數據回滾到snapshot那個時刻的數據。

    • 首先我們要了解一下所謂的HBase的LSM類型的系統結構,我們知道在HBase中,數據是先寫入到Memstore中,當Memstore中的數據達到一定條件,就會flush到HDFS中,形成HFile,後面就不允許原地修改或者刪除了。
    • 如果要更新或者刪除的話,只能追加寫入新文件。既然數據寫入以後就不會在發生原地修改或者刪除,這就是snapshot做文章的地方。做snapshot的時候,只需要給快照表對應的所有文件創建好指針(元數據集合),恢復的時候只需要根據這些指針找到對應的文件進行恢復就Ok。這是原理的最簡單的描述,下圖是描述快照時候的簡單流程:
      在這裏插入圖片描述

1.3 快照實戰

  • 1、創建表的snapshot
snapshot 'tableName', 'snapshotName'
  • 2、查看snapshot

    list_snapshots  

​ 查找以test開頭的snapshot

list_snapshots 'test.*'
  • 3、恢復snapshot

​ ps:這裏需要對錶進行disable操作,先把表置爲不可用狀態,然後在進行進行restore_snapshot的操作

disable 'tableName'
restore_snapshot 'snapshotName'
enable 'tableName'
  • 4、刪除snapshot

    delete_snapshot 'snapshotName'
  • 5、遷移 snapshot

    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
    -snapshot snapshotName  \
    -copy-from hdfs://src-hbase-root-dir/hbase \
    -copy-to hdfs://dst-hbase-root-dir/hbase \
    -mappers 1 \
    -bandwidth 1024
    
    例如:
    hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
    -snapshot test  \
    -copy-from hdfs://node01:8020/hbase \
    -copy-to hdfs://node01:8020/hbase1 \
    -mappers 1 \
    -bandwidth 1024

​ 注意:這種方式用於將快照表遷移到另外一個集羣的時候使用,使用MR進行數據的拷貝,速度很快,使用的時候記得設置好bandwidth參數,以免由於網絡打滿導致的線上業務故障。
在這裏插入圖片描述

  • 6、將snapshot使用bulkload的方式導入

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles \
    hdfs://dst-hbase-root-dir/hbase/archive/datapath/tablename/filename \
    tablename
    
    例如:
    創建一個新表
    create 'newTest','f1','f2'
    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://node1:9000/hbase1/archive/data/default/test/6325fabb429bf45c5dcbbe672225f1fb newTest

dIncrementalHFiles hdfs://node1:9000/hbase1/archive/data/default/test/6325fabb429bf45c5dcbbe672225f1fb newTest



## 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章