如何通过hdfs导入/导出hbase数据(hadoop命令)

时间:2014-09-18 09:35:54

标签: hadoop hbase local-files

我已将Hutch中的已爬网数据保存在Hbase中,其文件系统为hdfs。然后我通过命令

将我的数据(一个hbase表)从hdfs直接复制到一些本地目录
hadoop fs -CopyToLocal /hbase/input ~/Documents/output

之后,我按照命令

将该数据复制回另一个hbase(其他系统)
hadoop fs -CopyFromLocal ~/Documents/input /hbase/mydata

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

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

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

2 个答案:

答案 0 :(得分:21)

如果要从一个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 tool to export and import

答案 1 :(得分:4)

如果您可以使用Hbase命令来备份hbase表,则可以使用Hbase ExportSnapshot Tool,它使用map reduce作业将hfiles,日志和快照元数据复制到其他文件系统(local / 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 Snapshots