目前使用阿里云hbase产品,做历史归档的时候,发现阿里于对于hbase的归档,并不是很友好,阿里云的LTS产品,虽说可以归档,但是恢复数据是比较麻烦的,而且我没做成功,故使用其他方法做全量数据归档。
环境准备:
1、centos7.0系统(两台)
2、阿里云hbase标准版一个(2个实例更好)
3、centos系统和阿里云hbase(标准版)网络互通。
4、centos系统安装阿里云HBase Shell并配置可连接hbase。
下面是操作步骤:
1、先使用第一台主机(hbase客户端)连接hbase,使用list命令查看数据库中的表,我们可以看到,此数据库有2个表分别为:sl_ev_position_history sl_ev_trips
[root@fastdfs bin]# ./hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.0.3, rd9d13a538795f474adb964f9305d8ec08d9c987e, Mon Jul 1 18:38:16 CST 2019
Took 0.0071 seconds
hbase(main):001:0> list
TABLE
sl_ev_position_history
sl_ev_trips
2 row(s)
Took 0.6532 seconds
=> ["sl_ev_position_history", "sl_ev_trips"]
hbase(main):002:0>
2、我们扫描(使用scan命令)一下数据中的数据前行,重点是查看#列族#名,下图可以看到列族名为:trips(记住此列族名,导入数据的时候需要创建表和列族)。
image.png
3、退出连接,我们选择Export方式导出数据到本地(选择一个较小的数据库做测试):
./hbase org.apache.hadoop.hbase.mapreduce.Export sl_ev_trips /opt/sl_ev_trips
[root@fastdfs bin]# ./hbase org.apache.hadoop.hbase.mapreduce.Export sl_ev_trips /opt/sl_ev_trips
注意:sl_ev_trips (最后一级目录必须由hbase创建,不能自己创建。)
4、此时我们查看我们制定的目录下的文件,可以看到目录下有我们的数据库备份文件。
[root@fastdfs ~]# ls -ld /opt/sl_ev_trips/*
-rw-r--r-- 1 root root 27184140 Nov 17 18:07 /opt/sl_ev_trips/part-m-00000
-rw-r--r-- 1 root root 0 Nov 17 18:07 /opt/sl_ev_trips/_SUCCESS
5、数据库已备份到本地,我们将文件拷贝到另外一台连接其他hbase的centos服务器。
[root@centos7 ~]# ls -ld /opt/sl_ev_trips/*
-rw-r--r-- 1 root root 27184140 11月 17 14:54 /opt/sl_ev_trips/part-m-00000
-rw-r--r-- 1 root root 0 11月 17 14:56 /opt/sl_ev_trips/_SUCCESS
6、在第二台hbase中新建表和列族(表名随意,不过建议和原数据库表名相同,列族名必须和原数据库相同):
hbase(main):079:0> create 'test3','trips'
0 row(s) in 1.2760 seconds
=> Hbase::Table - test3
hbase(main):080:0>
7、此时我们推出连接,使用Import命令导入数据。
[root@centos7 bin]# ./hbase org.apache.hadoop.hbase.mapreduce.Import test3 /opt/sl_ev_trips/*
2021-11-17 18:26:18,503 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2021-11-17 18:26:18,812 INFO [main] Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
…………………………中间省略输出……………………
File Input Format Counters
Bytes Read=27184140
File Output Format Counters
Bytes Written=0
[root@centos7 bin]#
8、此时我们再次登录hbase,使用scan命令,查看数据,和原有数据库数据相同:
image.png
9、可以查看列名和列族名:
scan 'driver_score' ,{LIMIT=>1}
10、至此,我们hbase数据库导出-导入成功,可以做到本地备份归档。
注意:此方法对于数据量较小的数据库可行,但是对于数据量较大的数据库,需要考虑容量问题。
1、查询hbase表大小,参考链接:https://www.cnblogs.com/wgy1/p/11202173.html
查看hbase表大小。
进入 hbase 所在服务器
hbase shell 进入 hbase 库
list_namespace 列出所有命名空间
describe_namspace 'hbase' 查看指定命名空间
list_namespace_table 'default' 查看指定命名空间下的表
image也可以
list 列出所有表名
查看 hbase指定表大小
网上有句 # hdfs dfs -du -h /apps/hbase/data/data/default/
我在服务器上试了试,
image但是我这里并没有 /apps 文件,于是查找了 hbase安装目录
whereis hbase
image查了 hbase 所在 的三个文件下都没有 /data/default 文件。
还有个命令 **#hdfs dfs -du -h / **查看总占用空间,执行有效果
第一列:目录下总文件大小
第二列:目录下所有文件在集群上的总存储大小,和集群数量有关
第三列:查询目录
image在第一列竟然找到 /hbase 地址了、
再次执行命令 # hdfs dfs -du -h /hbase/data/data/default/
image没反应?
偶然又查到另一个命令
# hadoop fs -du /hbase/data/default -- 亲测可用 哈哈,不过显示的 是 kb
# hadoop fs -du -h /hbase/data/default -- 加上 -h 加单位显示。
image可以看到我的hbase 表 ,当前 htable_historical_track 表和 xny_data_hbase 占用空间较多。
网友评论