不通讯服务器之间opentsdb数据迁移(hbase2.2.6)
不是增量迁移!!!
opentsdb了解
opentsdb是基于hbase的时序数据库,它在hbase上创建了四张表,tsdb,tsdb-uid,tsdb-tree,tsdb-meta。数据迁移过程中最重要的就是tsdb中的数据。
迁移方式Snapshot
迁移opentsdb中的数据其实就是迁移hbase中的表,hbase数据迁移有四种方式,我是通过Snapshot快照方式对数据进行迁移的。
- 在要迁移数据的集群上创建快照:
进入hbase命令:
hbase shell
创建快照,四张表最好都创建:
#命令 <表名>,<快照名>
snapshot 'tsdb','sanpshot_tsdb'
查看快照:
list_snapshots
退出shell,可以在hadoop上查看所有快照路径:
hadoop fs -ls -R / |grep snapshot
#不能直接执行hadoop命令的可以加上hadoop路径
将快照拷贝到本地磁盘:
#命令 <快照路径> <磁盘路径>
hadoop fs -copyToLocal /hbase/.hbase-snapshot/snapshot_tsdb /bk/
- 备份要迁移的数据
查看数据路径
hadoop fs -ls -R / |grep tsdb
#不能直接执行hadoop命令的可以加上hadoop路径
将数据也拷贝到本地磁盘:
#命令 <数据路径> <磁盘路径>
hadoop fs -copyToLocal /hbase/data/default/tsdb /bk/
可以压缩一下用Xftp传输,压缩/解压命令
tar -czvf 压缩文件名.tar.gz /tsdb/
tar -zxvf 压缩文件名.tar.gz
迁移前先停掉opentsdb
迁移之前如果目标hbase上已经有数据要先删除
#禁用表
disable 'tsdb'
#删除表
drop 'tsdb'
drop没成功可以删除hdfs上的数据
#命令 <数据路径>
hadoop fs -rm -r /hbase/data/default/tsdb
以上都没成功可以删除zookeeper上的数据
#进入zookeeper
zkCli.sh
#删除命令 根据zookeeper上的路径
rmr /hbase/table/tsdb
还没成功可以删除hbase:meta 上的记录
#先查看
scan 'hbase:meta', {STARTROW=>'tsdb', LIMIT=>4}
查出来的内容自动换行了,这里放一张图片容易理解
#删除 根据查出来的信息
deleteall 'hbase:meta','tsdb,,1361433390076.2636b5a2b3d3d08f23d2af9582f29bd8.'
解压之后将备份好的快照和数据复制到hdfs
#-put和-copyFromLocal都可以
hadoop fs -put tsdb/ /hbase/data/default
进入hbase shell恢复快照
#两种方式,我用的是restore_snapshot,clone_snapshot会卡死
restore_snapshot 'snapshot_tsdb'
clone_snapshot 'snapshot_tsdb','tsdb'
验证
scan 'tsdb'
重启hbase
按顺序执行
stop-habse.sh
#集群
stop-all.sh
start-all.sh
#启动
start-hbase.sh
#最后启动opentsdb
最后
采用快照方式迁移是因为其他三种方式迁移之后要执行恢复表的操作,hbase1.X版本可以直接用命令恢复表,hbase2.X恢复命令被移除了,要下载对应版本的hbck2才能执行恢复命令,亲测没有成功。
如果你是hbase1.X版本可以用CopyTable,Export and Import尝试迁移,迁移之后执行下面命令修复数据。
hbase hbck -fixMeta 根据region目录中的.regioninfo,生成meta表
hbase hbck -fixAssignments 把meta表中记录的region分配给regionserver
hbase hbck -fixHdfsOrphans 修复.regioninfo文件
hbase hbck -repair 表名