Hadoop和Hbase数据集群间拷贝
Hadoop集群数据拷贝
分为两种:一种为集群版本相同,使用hdfs协议
一种为集群版本不同,使用http协议,其中源集群为低版本,目标集群为高版本。
注:由于distcp需要执行Mapreduce任务,所以需要开启Yarn
版本相同集群拷贝命令为(在目标集群执行):
hadoop distcp hdfs://old_nn:8020/source hdfs://new_nn:8020/dest
版本不同的集群拷贝命令为(在目标集群也就是高版本集群执行):
hadoop distcp hftp://nnIp:50070/source hdfs://new_nn:8020/dest
Hbase数据拷贝
单纯Hbase数据拷贝
首先需要使用上面描述的Hadoop集群数据拷贝的命令,完成拷贝后再执行元数据修复。
如:
不同集群版本:
hadoop distcp hftp://old_nn:50070/hbase/data/default/s1 hdfs://new_nn:8020/hbase/data/default/s1
相同集群版本:
hadoop distcp hdfs://old_nn:8020/hbase/data/default/t1 hdfs://new_nn:8020/hbase/data/default/t1
完成表数据的拷贝后,在**目标集群**执行如下命令:
hbase hbck -fixAssignments -fixMeta
Hbase(Phoenix)数据拷贝
1. 给表创建snapshot
单个表创建snapshot,在hbase shell下执行:
snapshot '表名','快照名'
批量创建snapshot,在shell中执行:
echo "snapshot '表名1','快照名1';snapshot '表名2','快照名2';..." | hbase shell
2. 创建phonenix元数据的表快照
其中phoenix元数据的表有如下:
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
那么创建元数据的表快照命令如下,在shell中执行:
echo "snapshot 'SYSTEM.CATALOG','SYSTEM.CATALOG';snapshot ' SYSTEM.FUNCTION',' SYSTEM.FUNCTION';'SYSTEM.MUTEX ','SYSTEM.MUTEX ';'SYSTEM.SEQUENCE','SYSTEM.SEQUENCE';'SYSTEM.STATS','SYSTEM.STATS'" | hbase shell
执行完成后,可以在hbase shell中执行 list_snapshots查看创建的快照
3. 将快照数据从旧集群迁移到新集群
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 快照名 -copy-to hdfs://new-nn//hbase/data/default/ -copy-from hdfs://old-nn/hbase/data/default/
其中new-nn和old-nn是两个集群上active namenode的IP地址,当然也可以是主机名。但为了确保万无一失,尽量采用Ip地址
4. 在新集群上恢复快照数据
在hbase shell下执行如下命令:
#如果表已存在,需执行下面三步骤
disable '表名'
restore_snapshot '快照名'
enable '表名'
#如果表不存在,只执行下面一步
restore_snapshot '快照名'
5. 恢复phonix的快照数据后,就可以在phonix中查到hbase表的数据