HBase(Phoenix)集群迁移实践
以下步骤的分支是针对有使用phoenix sql
来操作hbase
的
1.给需要迁移的表创建Snapshot
#在hbase shell下
snapshot '表名','快照名'
# 可批量执行
echo "snapshot '表名','快照名';snapshot '表名','快照名';..." | hbase shell
这里写个例子,方便后面说明
echo "snapshot 'tableA','20180125.tableA'" | hbase shell
1.x 创建phonenix元数据的表快照
hbase(main):001:0> list 'SYSTEM.*'
TABLE
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
创建SYSTEM.
前缀的表快照
2.将快照数据从旧集群迁移到新集群
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 快照名 -copy-to hdfs://new-nn/hbase -copy-from hdfs://old-nn/hbase
new-nn
和old-nn
是两个集群上active namenode
的IP,
当然也可以用host的方式来代替IP,但需保证主动方集群(谁调用的这条命令)中所有节点能解析出IP。
如果hdfs的端口不是默认的,则还需加上端口
-copy-to
是目录集群的hbase主目录, -copy-from
是源集群的hbase主目录。
/hbase
这个路径是hbase默认的主目录,如果被修改,则这部分也需同步调整
需要保证新旧集群中的所有节点能够相互连的通,这个命令的本质是一个MR任务
举例
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot 20180125.tableA -copy-to hdfs://new-nn/hbase -copy-from hdfs://old-nn/hbase
3.在新集群上恢复快照数据
在hbase shell下执行
#此时能够查的到旧集群上的快照名
list_snapshots
#如果表不存在,可省略disable和enable步骤
disable '快照的主体表'
restore_snapshot '快照名'
enable '快照的主体表'
举例
disable 'tableA'
restore_snapshot '20180125.tableA'
enable 'tableA'