美文网首页
hbase备份恢复数据——Export/Import

hbase备份恢复数据——Export/Import

作者: 彩色的炮灰 | 来源:发表于2021-11-17 18:31 被阅读0次

    目前使用阿里云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 占用空间较多。

    相关文章

      网友评论

          本文标题:hbase备份恢复数据——Export/Import

          本文链接:https://www.haomeiwen.com/subject/bhtrtrtx.html