在创建一个snapshot之后:snapshot 'test', 'snapshot_test',在/hbase/.hbase-snapshot目录信息如下:
- hbaseuser~> hadoop fs -ls /hbase/.hbase-snapshot/snapshot_test
- Found 4 items
- -rw-r--r-- 1 hbaseuser supergroup 32 2017-12-01 12:13 /hbase/.hbase-snapshot/snapshot_test/.snapshotinfo
- drwxr-xr-x - hbaseuser supergroup 0 2017-12-01 12:13 /hbase/.hbase-snapshot/snapshot_test/.tabledesc
- drwxr-xr-x - hbaseuser supergroup 0 2017-12-01 12:13 /hbase/.hbase-snapshot/snapshot_test/.tmp
- drwxr-xr-x - hbaseuser supergroup 0 2017-12-01 12:13 /hbase/.hbase-snapshot/snapshot_test/d8340c61f5d77345b7fa55e0dfa9b492
在clone_snapshot之后:clone_snapshot 'snapshot_test','new_test',在/hbase/archive/data/default目录,有对原表的link目录,目录名只是在原HFile的文件名基础上加了个links-前缀,这样我们可以通过这个来定位到原表的HFile,如下所示:
- hbaseuser:~> hadoop fs -ls /hbase/archive/data/default/test/d8340c61f5d77345b7fa55e0dfa9b492/i
- Found 1 items
- drwxr-xr-x - hbaseuser supergroup 0 2017-12-01 12:34 /hbase/archive/data/default/test/d8340c61f5d77345b7fa55e0dfa9b492/i/.links-55c5de40f58f4d07
此时,再执行合并操作:major_compact 'new_test',会发现/hbase/archive/data/default/目录已经变成了实际表的数据文件,上面图中/hbase/archive/data/default/test/d8340c61f5d77345b7fa55e0dfa9b492/i/.links-55c5de40f58f4d07这个已经不在了,取而代之的是如下所示文件:
- hbaseuser:~> hadoop fs -ls /hbase/archive/data/default/new_test/7e8636a768cd0c6141a3bb45b4098910/i
- Found 1 items
- -rw-r--r-- 1 hbaseuser supergroup 0 2017-12-01 12:48 /hbase/archive/data/default/new_test/7e8636a768cd0c6141a3bb45b4098910/i/test=d8340c61f5d77345b7fa55e0dfa9b492-55c5de40f58f4d07aed767c5d250191c
在实际的/hbase/data/default/new_test目录也是实际的原表的数据文件,这样完成了表数据的迁移。
3.3.3 snapshot数据迁移
snapshot的应用场景和上面CopyTable描述差不多,我们这里主要考虑的是数据迁移部分。数据迁移主要有以下几个步骤:
A.创建快照:在原集群上,用snapshot命令创建快照,命令如下:
- hbase> snapshot 'src_table', 'snapshot_src_table'
- #查看创建的快照,可用list_snapshots命令
- hbase> list_snapshots
- #如果快照创建有问题,可以先删除,用delete_snapshot命令
- hbase >delete_snapshot 'snapshot_src_table'
创建完快照后在/hbase根目录会产生一个目录:
- /hbase/.hbase-snapshot/snapshot_src_table
- #子目录下有如下几个文件
- /hbase/.hbase-snapshot/snapshot_src_table/.snapshotinfo
- /hbase/.hbase-snapshot/snapshot_src_table/data.manifest
B.数据迁移: 在上面创建好快照后,使用ExportSnapshot命令进行数据迁移,ExportSnapshot也是HDFS层的操作,本质还是利用MR进行迁移,这个过程主要涉及IO操作并消耗网络带宽,在迁移时要指定下map数和带宽,不然容易造成机房其它业务问题,如果是单独的MR集群,可以在MR集群上使用如下命令:
- hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot
- -snapshot snapshot_src_table
- -copy-from hdfs://src-hbase-root-dir/hbase
- -copy-to hdfs://dst-hbase-root-dir/hbase
- -mappers 20
- -bandwidth 20
(编辑:常州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|