我已将Hutch中的已爬网数据保存在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'的名字。
上述程序有什么问题? 简单来说就是:
答案 0 :(得分:21)
如果要从一个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>
答案 1 :(得分:4)
如果您可以使用Hbase命令来备份hbase表,则可以使用Hbase ExportSnapshot Tool,它使用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'