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

Sha*_*fiq 9 hadoop hbase local-files

我已经在Hbase中保存了我的已爬网数据,其文件系统是hdfs.然后我通过命令将我的数据(一个hbase表)从hdfs直接复制到一些本地目录

hadoop fs -CopyToLocal /hbase/input ~/Documents/output
Run Code Online (Sandbox Code Playgroud)

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

hadoop fs -CopyFromLocal ~/Documents/input /hbase/mydata
Run Code Online (Sandbox Code Playgroud)

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

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

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

Nan*_*nda 21

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

使用Hadoop

注意:outputdir和inputdir都在hdfs中.

使用Hbase

  • @Nanda - 是用旧版Hadoop/Hbase完成的`bin/hadoop`选项,也许吧?在一个现代的HBase(至少0.96)中,没有一个主jar,也没有一个名为`hbase- {version} .jar`的jar.并且提供的罐子似乎都想要一个类名作为第一个参数,而不仅仅是`export`. (2认同)

Vis*_*mdi 7

如果您可以使用 Hbase 命令来备份 hbase 表,您可以使用 Hbase ExportSnapshot 工具,该工具使用 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'
Run Code Online (Sandbox Code Playgroud)

参考:Hbase 快照