我用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中,并将其数据显示为原始表
2条答案
按热度按时间c0vxltue1#
如果要从一个hbase群集导出表并将其导入另一个群集,请使用以下任一方法:
使用hadoop
出口
注意:将hdfs中的输出目录从源集群复制到目标集群
进口
注意:outputdir和inputdir都在hdfs中。
使用hbase
出口
将hdfs中的输出目录从源集群复制到目标集群
进口
参考:要导出和导入的hbase工具
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命令,从快照恢复表。reference:hbase snapshots