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

如何通过hdfs(hadoop命令)导入/导出hbase数据,hadoop,hbase,local-files,Hadoop,Hbase,Local Files,我用nutch在Hbase中保存了我的爬网数据,Hbase的文件系统是hdfs。然后,我通过命令将我的数据(一个hbase表)从hdfs直接复制到某个本地目录 hadoop fs -CopyToLocal /hbase/input ~/Documents/output 之后,我通过以下命令将该数据复制回另一个hbase(其他系统) hadoop fs -CopyFromLocal ~/Documents/input /hbase/mydata 它保存在hdfs中,当我在hbase shell

我用nutch在Hbase中保存了我的爬网数据,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”名称的表

上述程序有什么问题? 简言之:

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

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

    使用Hadoop

    • 出口

      $ bin/hadoop jar <path/to/hbase-{version}.jar> export \
           <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]
      
      $ bin/hbase org.apache.hadoop.hbase.mapreduce.Export \
         <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]
      
      $bin/hadoop jar导出\
      [ [ []]
      
      注意:将hdfs中的输出目录从源集群复制到目标集群

    • 进口

      $ bin/hadoop jar <path/to/hbase-{version}.jar> import <tablename> <inputdir>
      
      $ bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
      
      $bin/hadoop jar导入
      
    注意:outputdir和inputdir都在hdfs中

    使用Hbase

    • 出口

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

    • 进口

      $ bin/hadoop jar <path/to/hbase-{version}.jar> import <tablename> <inputdir>
      
      $ bin/hbase org.apache.hadoop.hbase.mapreduce.Import <tablename> <inputdir>
      
      $bin/hbase org.apache.hadoop.hbase.mapreduce.Import
      
      参考:


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

    • 拍摄表的快照

      $./bin/hbase外壳
      hbase>快照“myTable”、“myTableSnapshot-122112”

    • 导出到所需的文件系统

      $./bin/hbase class org.apache.hadoop.hbase.snapshot.ExportSnapshot-snapshot MySnapshot-copy to fs://path\u to\u your\u目录

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

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

    参考资料:

    我想您没有仔细阅读我的问题。我说“我想使用hadoop命令将hbase表复制到本地文件系统”,您告知的信息,将hbase表复制到本地文件系统是什么意思?您始终可以对hdfs中与表相关的文件使用hadoop的copyToLocal命令,但这样做没有用。如果您计划将表复制到另一个群集,则必须使用上述任何方法。即使以上述方式,您也可以我要将导出的文件复制到本地文件系统并将其复制到另一个群集。我要将我的爬网数据备份到外部驱动器(usb硬盘)因此,如果机器出现故障,我可以重建我的集群。或者将来如果我必须采用新版本的og hadoop等,那么我需要它,然后你可以导出并备份它。如果你只是复制与表相关的文件,你就不能用它重建集群。@Nanda-是不是用旧版本的Hadoo完成了
    bin/hadoop
    选项可能是p/Hbase?在现代Hbase(至少0.96)中,没有一个主jar,也没有类似于
    Hbase-{version}.jar
    的jar。而且提供的jar似乎都希望将类名作为第一个参数,而不仅仅是
    export