10

我已经通过nutch将我爬取的数据保存在文件系统为hdfs的Hbase中。然后我通过命令将我的数据(一个 hbase 表)从 hdfs 直接复制到某个本地目录

hadoop fs -CopyToLocal /hbase/input ~/Documents/output

之后,我通过以下命令将该数据复制回另一个 hbase(其他系统)

hadoop fs -CopyFromLocal ~/Documents/input /hbase/mydata

它保存在 hdfs 中,当我list在 hbase shell 中使用命令时,它显示为另一个表,即“mydata”,但是当我运行scan命令时,它说没有名为“mydata”的表。

上述程序有什么问题?简单来说:

  1. 我想使用 hadoop 命令将 hbase 表复制到我的本地文件系统
  2. 然后,我想通过hadoop命令直接保存在另一个系统的hdfs中
  3. 最后,我希望表出现在hbase中,并将其数据显示为原始表
4

2 回答 2

24

如果要将表从一个 hbase 集群导出并导入到另一个,请使用以下任一方法:

使用 Hadoop

  • 出口

    $ bin/hadoop jar <path/to/hbase-{version}.jar> export \
         <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]
    

    注意:将 hdfs 中的输出目录从源集群复制到目标集群

  • 进口

    $ bin/hadoop jar <path/to/hbase-{version}.jar> import <tablename> <inputdir>
    

注意:outputdir 和 inputdir 都在 hdfs 中。

使用 Hbase

  • 出口

    $ bin/hbase org.apache.hadoop.hbase.mapreduce.Export \
       <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]
    
  • 将 hdfs 中的输出目录从源集群复制到目标集群

  • 进口

    $ bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
    

    参考:Hbase工具导出导入

于 2014-10-09T09:21:59.867 回答
8

如果您可以使用 Hbase 命令代替备份 hbase 表,则可以使用 Hbase ExportSnapshot Tool,该工具使用 map reduce 作业将 hfile、日志和快照元数据复制到其他文件系统(本地/hdfs/s3)。

  • 拍一张桌子的快照

    $ ./bin/hbase shell hbase> snapshot 'myTable', 'myTableSnapshot-122112'

  • 导出到所需的文件系统

    $ ./bin/hbase class org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to fs://path_to_your_directory

您可以将其从本地文件系统导出回 hdfs:///srv2:8082/hbase 并从 hbase shell 运行 restore 命令以从快照中恢复表。

 $ ./bin/hbase shell
 hbase> disable 'myTable'
 hbase> restore_snapshot 'myTableSnapshot-122112'

参考:Hbase 快照

于 2016-02-01T02:57:41.567 回答