zoukankan      html  css  js  c++  java
  • HBase表的备份

    HBase表备份其实就是先将Table导出,再导入两个过程。

    导出过程

    //hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名 数据文件位置
    //数据文件位置:可以是本地文件目录,也可以是hdfs路径
    //当其为前者时,必须加上前缀file://
    //当其为后者时,可以直接指定 "/root/test/users",也可以写路径 "hdfs://hadoop01:9000/root/test/users"
    //另外,该接口类还提供了一些其它的方法。例如表与表之间的数据拷贝,导入tsv文件(一种数据间以制表符分割的文件)等
    //如果"/root/test/users/" 目录已存在则会报错。【
    表名不用添加引号】

    [root@ncst conf]# hbase org.apache.hadoop.hbase.mapreduce.Driver export users file:///root/test/users

    注意:这是一个没有reduce的MR过程,从产生的结果文件"/root/test/users/part-m-00000" 可以看出。

    导入过程
    //hbase org.apache.hadoop.hbase.mapreduce.Driver import 表名 数据文件位置
    //数据文件位置:可为本地文件目录,也可以为hdfs的路径。
    //当其为前者时,必须加上前缀file://
    //当其为后者时,可以直接指定 "/root/test/users",也可以写路径 "hdfs://hadoop01:9000/root/test/users"

    //新的表必须存在,否则报错
    //如果导出的数据很多,导入的时候千万不要把所有的part-m-0000*文件都放到一个目录下开始导入,肯定会失败的!
    //应该将part-m-0000*文件一个个开始导入

    [root@ncst conf]# hbase org.apache.hadoop.hbase.mapreduce.Driver import bak file:///root/test/users

    hbase集群间数据迁移方法总结

    一、需要在hbase集群停掉的情况下迁移
    步骤:
    (1)执行hadoop distcp -f filelist "hdfs://new cluster ip:9000/hbasetest"
    (2)在new cluster执行./hbase org.jruby.main add_table.rb /hbase/table20111222,将拷贝来的表加入到.meat.中(会出现region的数目不一致的问题,这个需要重启hase才能解决)
    说明:(1)filelist为hdfs上的列表文件,内容如下:
    /hbase/table20111222
    /hbase/table20120131
    (2)如果两个集群的hadoop版本不一致,需要在new cluster上执行hadoop distcp,否则会出现读写异常;
    二、在集群运行的时候进行数据迁移
    1、replication:这个是动态的备份(可以理解为实时备份)
    步骤:(1)在old cluster将需要迁移的表属性进行修改:
    disable 'your_table'
    alter 'your_table', {name => 'family_name', replication_scope => '1'}
    enable 'your_table'
    (2)打开new cluster集群的replication,修改hbase-site.xml
    <property>
    <name>hbase.replication</name>
    <value>true</value>
    </property>
    (3)添加peer,在new cluster的hbase shell中执行:add_peer '1','old cluster ip:2181:/hbase',启动replication,执行start_replication
    说明:需要两个集群的hadoop版本一致,否则出现读写错误

    2、copytable:可以在本集群中拷贝一张表,也可以将表拷贝到其他的集群中。

    $ bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] tablename 
    //Demo例子
    $ bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable
    --starttime=1265875194289 --endtime=1265878794289
    --peer.adr=server1,server2,server3:2181:/hbase TestTable 

    命令:./hbase org.apache.hadoop.hbase.mapreduce.copytable --peer.adr=new cluster ip:2181:/hbase zy_test
    说明:拷贝完成,不需要重启机器,在new cluster中就可以看到该表;
    3、export and import
    步骤:(1)在old cluster上执行:./hbase org.apache.hadoop.hbase.mapreduce.export test hdfs://new cluster ip:9000/zhuangyang/test
    (2)在new cluster上执行:./hbase org.apache.hadoop.hbase.mapreduce.import test hdfs://new cluster ip:9000/zhuangyang/test
    说明:(1)一定要写全路径,不能写相对路劲;
    (2)在import前,需要将表事先在new cluster中创建好.

    以上都是在old cluster和new cluster网络相通的情况下实现数据迁移的办法。
    如果两个集群网络不通,只能先将old cluster中的数据都下载到本地或者其他的地方,然后在人工的转移到new cluster上了 

    导入tsv文件到hbase
    1、将文件放到hdfs

    hadoop fs -put ./hly.tsv /user/amy/input/

    2、使用如下命令导入tsv

    直接导入方式:

    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,info:age,info:sex T_Name /user/amy/input/

    bulk load方式:

    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.bulk.output=/user/hadoop/data  -Dimporttsv.separator=',' -Dimporttsv.columns=HBASE_ROW_KEY,info:age,info:sex T_Name /user/amy/input/
    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/hadoop/data/T_Name T_Name 
  • 相关阅读:
    「from CommonAnts」寻找 LCM
    P3380 二逼平衡树 [树状数组套可持久化主席树]
    [模板]二次剩余(无讲解)
    [校内训练19_09_10]sort
    [校内训练19_09_06]排序
    [校内训练19_09_06]直径
    [校内训练19_09_05]ca
    [校内训练19_09_02]不同的缩写
    [校内训练19_09_03]c Huge Counting
    [校内训练19_09_02]C
  • 原文地址:https://www.cnblogs.com/skyl/p/4801509.html
Copyright © 2011-2022 走看看