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



我已经将nutch抓取的数据保存在文件系统为hdfs的Hbase中。然后,我通过命令将我的数据(一个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中,并将其数据显示为原始表

如果您想从一个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工具导出和导入

如果您可以使用Hbase命令来备份Hbase表,则可以使用HbaseExportSnapshot工具,该工具使用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并从hbaseshell运行restore命令以从快照中恢复表。

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

参考:Hbase快照

相关内容

  • 没有找到相关文章