4.HBASE数据迁移方案:
4.1 Import/Export
4.2 distcp
4.3 CopyTable
4.4 snapshot
快照方式迁移(以USER_info:user_log_info为例)
1.先在源集群建立该表的快照
hbase(main):003:0> snapshot "USER_INFO:user_log_info","user_log_info_snapshot"
2.在源集群执行:
sudo -u hdfs hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot user_log_info_snapshot -copy-to hdfs://slave.01.bigdata.prod.wgq:8020/hbase -overwrite
-overwrite是假如目标集群有该快照,则覆盖掉;
3.修改文件权限:
sudo -u hdfs hdfs dfs -chown -R hbase:hbase /hbase/.hbase-snapshot
sudo -u hdfs hdfs dfs -chown -R hbase:hdfs /hbase/archive
sudo -u hdfs hdfs dfs -chmod -R 777 /hbase/archive
4.在目标集群:
创建对应表,表要一致
create 'USER_INFO:user_log_info', {NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
首先要disable掉该表
disable "USER_INFO:user_log_info"
其次恢复快照:
restore_snapshot 'user_log_info_snapshot'
没报错enable该表:
enable "USER_INFO:user_log_info"
验证表可用性和两个集群表数据量是否一致:
count 。。。。。。。
总结:
需要注意的是每种方案的可行性问题:
1.是否要disable表,影响到业务的在线;
2.跨集群,集群间是否可通信;
3.每种方案的效率问题,稳定性问题,经常碰到一种方案(copyTable)执行到一半,报exception而挂断;
4.每种方案是在源集群执行,还是在目标集群执行,对源/目标集群的资源影响;