HBase 跨集群迁移数据-Snapshot 实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Luomingkui1109/article/details/85128337

   HBase数据迁移方案有很多种,但今天我们来通过Snapshot方式来实现HBase的数据迁移(即将A集群HBase的数据迁移到B集群),废话不多说,直接进去主题吧:

    参考文献:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html

                     https://www.cnblogs.com/cenyuhai/p/3309033.html

    HBase Snapshots允许你对一个表进行快照(即可用副本),它不会对Region Servers产生很大的影响,它进行复制和 恢复操作的时候不包括数据拷贝。导出快照到另外的集群也不会对Region Servers产生影响。 下面告诉你如何使用Snapshots功能

1.开启快照支持功能,在0.95+之后的版本都是默认开启的,在0.94.6+是默认关闭  

<property>

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

    <value>true</value>

</property>

2.创建快照:

(1)在原集群上,用snapshot命令创建快照,命令如下:hbase> snapshot 'g2monitor:g2monitor_range_event',’g2monitor_range_event'

        g2monitor:g2monitor_range_event是原HBase表的名字,g2monitor_range_event是创建快照的名字。

(2)查看创建的快照,可用list_snapshots命令:hbase> list_snapshots

(3)如果快照创建有问题,可以先删除,用delete_snapshot命令:hbase >delete_snapshot 'g2monitor_range_event'

(4)创建完快照后在/hbase根目录会产生一个目录:

[user_w@emr-header-1 ~]$ hadoop fs -ls hdfs://172.16.120.199:9000/hbase/.hbase-snapshot/

#子目录下有如下几个文件

Found 2 items

drwxr-x--x   - hbase hadoop          0 2018-11-29 10:54 hdfs://172.16.120.199:9000/hbase/.hbase-snapshot/.tmp

drwxr-x--x   - hbase hadoop          0 2018-11-29 10:54 hdfs://172.16.120.199:9000/hbase/.hbase-snapshot/g2monitor_range_event

3.数据迁移

     在上面创建好快照后,使用ExportSnapshot命令进行数据迁移,ExportSnapshot也是HDFS层的操作,本质还是利用MR进行迁移,这个过程主要涉及IO操作并消耗网络带宽,在迁移时要指定下map数和带宽,不然容易造成机房其它业务问题,如果是单独的MR集群,可以在MR集群上使用如下命令:

hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \

-snapshot g2monitor_range_event -copy-from hdfs://172.16.120.199:9000/hbase \

-copy-to hdfs://172.16.120.213:8020/hbase   -overwrite -mappers 16 -bandwidth  1024\

4.从快照复制生成一个新表

hbase> clone_snapshot 'g2monitor_range_event','g2monitor:g2monitor_range_event'

5.用快照恢复数据,它需要先禁用表,再进行恢复

hbase> disable 'g2monitor:g2monitor_range_event'

hbase> restore_snapshot ‘g2monitor_range_event'

hbase> enable 'g2monitor:g2monitor_range_event'  

6.检查HBase数据是否迁移成功

hbase> scan 'g2monitor:g2monitor_range_event’

7.现在HBase表迁移成功,但由于需要查询,所以我们新建hive表关联到HBase表,以方便数据查询

use ${hiveconf:db};

CREATE EXTERNAL TABLE stg_g2monitor_range_event

(event_id STRING,

gpsno STRING,

vehicle_no STRING,

org_code STRING,

from_org_code STRING,

point_id STRING,

point_name STRING,

enter_time STRING,

depart_time STRING,

seconds INTEGER)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES

("hbase.columns.mapping" = ":key,f:gpsno,f:vehicle_no,f:org_code,f:from_org_code,f:point_id,f:point_name,f:enter_time,f:depart_time,f:seconds")

TBLPROPERTIES ("hbase.table.name" = "g2monitor:g2monitor_range_event", "hbase.mapred.output.outputtable" = "g2monitor:g2monitor_range_event");

8.数据校验:

hive> select * from stg_g2monitor_range_event limit 1;

OK

1001672592571895808    90023076    川A1TE16    200HO813    200HOF    F3334A3E09355230114C52D2AB4E3D1E    成都鑫盛瑞吉物流有限公司_华丰食品城    2018-05-30 11:51:59.0    2018-05-30 11:53:19.0    80

Time taken: 0.181 seconds, Fetched: 1 row(s)

9.补充

    在HBase数据迁移过程中还有可能使用到的命令:

hadoop fs -ls hdfs://172.16.120.213:8020/hbase/.hbase-snapshot



hadoop fs -rm -r -skipTrash /hbase/.hbase-snapshot



hadoop fs -ls hdfs://172.16.120.199:9000/hbase/.hbase-snapshot/g2monitor_range_event/



hadoop fs -ls hdfs://172.16.120.213:8020/hbase

猜你喜欢

转载自blog.csdn.net/Luomingkui1109/article/details/85128337