集群之间数据迁移在大数据场景中是常有的事,快照迁移方式逐步占据了大部分江山,先抛出两个问题,snapshot快照到底是什么?使用快照迁移的好处是什么?
迁移数据常见场景:
1、 集群规模对等 (n(A)==n(B))、挂盘个数对等、挂盘个数不对等
2、 集群规模不对等 (n(A)> n(B)或n(A) < n(B),挂盘个数对等、挂盘个数不对等。
两个集群的的集群规模和挂盘个数均对等的情况下,直接集群A上scp复制数据到集群B是最快的,但这只是部分组件(ElasticSearch)支持,其它组件(HBase、Hive)的迁移就很麻烦了。
Hive迁移需要HDFS数据和metastore元数据,HDFS可以通过distcp命令在两个集群复制数据,但涉及到目录权限问题,元数据可以通过sql语句导出整个库,再恢复即可。但HBase直接复制目录是不行的,因为新集群的名字、主机名、regionserverID等信息不对应,常用的方式是快照迁移。
在很多地方可以看到快照的影子:虚拟机系统快照,HDFS增量快照、HBase表快照、ES索引快照等,总之快照执行速度之快,应用之广。其原理是怎样的呢?
经过查阅资料,了解到快照是通过引用快照指针表,指向数据块,并不是数据块的复制。
为了简单理解我们从基本的COW(copy on write),和ROW(Redirect on write)入手了解:
COW(copy on write)步骤简述:

1、 创建快照,会创建一个快照指针表和一个快照卷。快照指针表指向源数据地址,此时快照卷为空。
2、更改数据时:待更改的数据复制到快照卷,并修改指向该数据的快照指针地址。然后再更新源数据。此时涉及改动数据的复制,其它数据并不会复制。(可见其缺点是更改数据时降低系统写性能)
3、 插入数据时:快照不做任何更改,因为快照是该动作之前某一个时刻做的。
ROW(Redirect on write)步骤简述:
1、 创建快照,会创建一个快照指针表和一个快照卷。复制原始指针表,快照指针表和原始指针表内容相同。快照卷为空。
2、 更新插入数据时:直接把数据写入快照卷,原始数据指针重定向到快照卷,快照指针保持不变。
3、 再次创建快照时:重复上述步骤,此时快照2会有快照1的信息。(可见恢复快照成本很高)。
以上就是基本的快照原理。
快照在HBASE和ES数据迁移上的应用。
场景:集群A –》 集群B
一、HBase快照迁移步骤:
a、集群A操作生成快照:
1、 使用超级用户执行hbase shell
2、对某个表进行snapshot操作:
snapshot ‘table_name’,’snapshot_name’
3、 查看snapshot:
list_snapshots
4、 迁移数据到集群B:
hbaseorg.apache.hadoop.hbase.snapshot.ExportSnapshot –snapshot ‘snapshot_name’ –copy-from hdfs://cluster_A:8020/hbase_path/
-copy-tohdfs://cluster_B:8020/hbase_path/ --mappers 10
其中hbase_path是hbase存储快照的父目录,--mappers参数是启用map的数量。
集群B操作恢复快照:
1、 使用超级用户执行hbase shell ;
2、 恢复快照:restore_snapshot ‘snapshot_name’ ;
3、 核对恢复表的总数:count ‘table_name’
二、ES 快照迁移步骤:
ES迁移快照需要使用第三方存储服务,常用的有hdfs和nfs。下文以hdfs为例,假设当前ES已经配置好了repository-hdfs插件方式,以及kibana工具。
集群A操作:
1、 在hdfs创建仓库目录/es,并改变目录属组,hdfs dfs –chown –R elasticsearch:elasticsearch /es
2、 Kerberos环境创建快照到hdfs:
curl -XPUT –negotiate –u: ‘http://ES_IP:9200/_snapshot/back_snapshot’ –H ‘Content-Type:application/json’–d ‘{“type”:”hdfs”,”settings”:{“uri”:”hdfs://activeNamenode:8020”,”path”:”/es”,”security.principal”:”superuser_principal”}}’
3、 复制到集群B的hdfs目录:
hadoop distcp –update hdfs://cluster_A:8020/es hdfs://cluster_B:8020/es
集群B操作:
1、 更改hdfs上的快照目录权限、属组和集群A保持一致。
2、 Kibana注册存储库,关联读取hdfs上的快照目录。点击验证存储库验证关联状态
3、 界面选择指定索引快照恢复即可
结论:快照技术是在某一时间点对数据备份的一种技术手段。使用快照可以减少对原始数据全量备份的性能消耗。




