场景:
由于Hbase版本升级以及集群切换,现需要将Hbase从A集群(源)迁移至B集群(目的)
迁移过程:
将源A集群的Hbase需要迁移的表(注意namespace)通过snapshot方式打成快照,然后再通过ExportSnapshot方式迁移至目的B集群,此时目的集群的HDFS目录下的hbase目录会生成 .hbase_snapshot和archive目录,最后在目的集群恢复快照即可
迁移脚本
A集群(源)执行脚本
#!/bin/bash #将dst_ip设置为目的集群IP dst_ip=1.1.1.1 echo "开始Hbase迁移" echo "start : $(date)" #将源集群中的Hbase和dbb相关的表输出到本地文件 echo "list" | hbase shell | grep '^dbbd_namespace*'>/root/jws/hbase_list.txt #读取列表的数据循环执行快照操作 while read line do #echo "$line" dst_name=`echo "$line" | awk -F ':' '{print $2}'` #echo "$dst_name" echo "snapshot '$line','snapshot_$dst_name'" | hbase shell done < /root/jws/hbase_list.txt echo "list_snapshots" | hbase shell | grep '^snapshot_*'>/root/jws/snapshots_list.txt #使用hbase用户执行命令 while read line do dst_name=`echo "$line" | awk -F ':' '{print $2}'` echo "$dst_name" # 迁移快照 su hbase -c "hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot_$dst_name -copy-to hdfs://$dst_ip/apps/hbase/data/" done < /root/jws/hbase_list.txt echo "执行完成,请在目的集群执行恢复操作" echo "end : $(date)"
B集群(目的)执行脚本:
#!/bin/bash #开始恢复 echo "开始恢复!" echo "start : $(date)" #进入Hbase执行list_snapshots重定向到snapshots_list.txt echo "list_snapshots" | hbase shell | grep '^ snapshot*' > /root/jws/snapshot_list.txt #判断Hbase中是否有dbbd的namespace,没有则创建 if ! echo "list_namespace" | hbase shell | grep '^dbbd_namespace$';then echo "create_namespace 'dbbd_namespace'" | hbase shell echo "创建dbbd_namespace成功" fi #循环读取快照并恢复 while read line do #echo "$line" dst_line=`echo "$line" | awk -F ' ' '{print $1}'` echo "$dst_line" echo "restore_snapshot '$dst_line'" | hbase shell done < /root/jws/snapshot_list.txt echo "执行完成!" echo "end : $(date)"
HBase入门基本:命名空间、建表、增删改查
进入HBase数据库
# hbase shell
注意HBase Shell 中的回格键没用,要用【Ctrl+Backspace】,每个命令之后不需要分号(;)结束。
HBase帮助命令:
hbase> help 'create'
命名空间
列出所有命名空间
hbase> list_namespace
新建命名空间
hbase> create_namespace 'ns1'
删除命名空间
hbase> drop_namespace 'ns1'
该命名空间必须为空,否则会报错。
修改命名空间
hbase> alter_namespace 'ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
表
列出所有表
hbase> list
新建表
hbase> create 'ns1:t1', 'cf1'
新建一个以命名空间ns1的表t1,列族为cf1。
删除表
hbase> disable 'ns1:t1' hbase> drop 'ns1:t1'
修改表名
HBase没有rename命令,可以通过快照功能修改表名,详见下述。
查看表内容
hbase> scan 'ns1:t1' hbase> scan 'ns1:t1', {LIMIT=>5} # 查看前5行数据
插入
hbase> put 'ns1:t1', 'r1', 'cf1:c1', 'value'
快照
查看快照
hbase> list_snapshots
新建快照:
hbase> snapshot 'sourceTable', 'snapshotName'
从快照复制生成一个新表:
hbase> clone_snapshot 'snapshotName', 'gld:student'
命令罗列:
1、进入到hbase shellhbase shell
2、查看当前版本version
3、查看命名空间list_namespace
4、查看命名空间下的表list_namespace_tables 命名空间
5、创建namespace(命名空间)create_namespace 'test'
6、删除namespace(命名空间),删除表空间前,要先把表空间内的表全部删除drop_namespace 'test'
7、查看命名空间下有多少表list_namespace_tables 'test'
8、创建表create 'test:student','baseInfo','schoolInfo'
9、删除表操作,删除表之前先禁用表,否则删除失败disable 'test:student'
drop 'test:student'
10、查询表结构describe 'test:student'
11、插入数据put 'test:student','rowkey1','baseInfo:name','zhangsan'
12、查询表数据get 'test:student','rowkey1','baseInfo'
13、查看状态status
14、帮助命令help '命令'
15、判断表是否存在exists 'test:student'
16、新增列簇alter 'test:student','teacherInfo'
17、删除列簇alter 'test:student','teacherInfo',,{NAME=>'teacherInfo',METHOD=>'delete'}
18、设置列簇记录三个版本alter 'test:student',{NAME=>'baseInfo',VERSIONS=>3}
19、全表扫描查询scan 'test:student'
20、条件过滤查询scan 'test:student',{COLUMN=>'baseInfo'}
21、删除指定列簇下的列delete 'test:student','rowkey1','baseInfo:age''
22、删除指定行 rowkeyexists 'test:student'
标签:list,namespace,echo,集群,student,常用命令,test,Hbase,hbase From: https://www.cnblogs.com/yizhipanghu/p/17381820.html