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

lfapxunr  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(447)

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

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

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

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

它保存在hdfs中,当我使用 list 命令,它将它显示为另一个表,即“mydata”,但当我运行 scan 命令,它表示没有名为“mydata”的表。
以上程序有什么问题?简单地说:
我想使用hadoop命令将hbase表复制到本地文件系统
然后,我想通过hadoop命令将它直接保存在另一个系统的hdfs中
最后,我希望该表出现在hbase中,并将其数据显示为原始表

c0vxltue

c0vxltue1#

如果要从一个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工具

w6mmgewl

w6mmgewl2#

如果可以使用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'

reference:hbase snapshots

相关问题