Hadoop 如何使用starttime endtime导出hbase表?
我正在尝试执行增量备份,我已经选中了导出选项,但无法确定开始时间选项。另外,请在CopyTable上建议如何恢复。hbase说,在这里找到了问题所在Hadoop 如何使用starttime endtime导出hbase表?,hadoop,hbase,Hadoop,Hbase,我正在尝试执行增量备份,我已经选中了导出选项,但无法确定开始时间选项。另外,请在CopyTable上建议如何恢复。hbase说,在这里找到了问题所在 hbase org.apache.hadoop.hbase.mapreduce.Export[[]]] 所以在尝试了一些组合之后,我发现它被转换成了一个真实的示例,如下面的代码 hbase org.apache.hadoop.hbase.mapreduce.Export test/bkp_destination/test 1369060183200
hbase org.apache.hadoop.hbase.mapreduce.Export[[]]]
所以在尝试了一些组合之后,我发现它被转换成了一个真实的示例,如下面的代码
hbase org.apache.hadoop.hbase.mapreduce.Export test/bkp_destination/test 1369060183200 1369063567260023219
在哪里
test是表名,
/bkp_destination/test是备份目标文件夹,
1369060183200是开始时间,
1369063567260023219是endtime使用您刚刚收到的给定表的副本(实际上是CopyTable MapReduce作业)。没有奇迹
如何恢复由您自己决定。显而易见的选择是:
- 使用相同的工具将表复制回
- 只需获取/放置所选行(我认为您在这里需要的)。请注意,在放回数据时,您应该保留时间戳
希望这能有所帮助。源代码建议 int versions=args.length>2?整数.parseInt(args[2]):1强> long startTime=args.length>3?Long.parseLong(args[3]):0L强> long endTime=args.length>4?Long.parseLong(args[4]):Long.MAX_值强> 接受的答案不将版本作为参数传递。那是怎么回事 hbase org.apache.hadoop.hbase.mapreduce.Export test/bkp_destination/test 1369060183200 1369063567260023219 从源代码来看,这归结为- 1369060183200-参数[2]-版本 1369063567260023219-参数[3]-开始时间 正在为ref附加源:
private static Scan getConfiguredScanForJob(Configuration conf, String[] args) throws IOException {
Scan s = new Scan();
// Optional arguments.
// Set Scan Versions
int versions = args.length > 2? Integer.parseInt(args[2]): 1;
s.setMaxVersions(versions);
// Set Scan Range
long startTime = args.length > 3? Long.parseLong(args[3]): 0L;
long endTime = args.length > 4? Long.parseLong(args[4]): Long.MAX_VALUE;
s.setTimeRange(startTime, endTime);
// Set cache blocks
s.setCacheBlocks(false);
// set Start and Stop row
if (conf.get(TableInputFormat.SCAN_ROW_START) != null) {
s.setStartRow(Bytes.toBytesBinary(conf.get(TableInputFormat.SCAN_ROW_START)));
}
if (conf.get(TableInputFormat.SCAN_ROW_STOP) != null) {
s.setStopRow(Bytes.toBytesBinary(conf.get(TableInputFormat.SCAN_ROW_STOP)));
}
// Set Scan Column Family
boolean raw = Boolean.parseBoolean(conf.get(RAW_SCAN));
if (raw) {
s.setRaw(raw);
}
if (conf.get(TableInputFormat.SCAN_COLUMN_FAMILY) != null) {
s.addFamily(Bytes.toBytes(conf.get(TableInputFormat.SCAN_COLUMN_FAMILY)));
}
// Set RowFilter or Prefix Filter if applicable.
Filter exportFilter = getExportFilter(args);
if (exportFilter!= null) {
LOG.info("Setting Scan Filter for Export.");
s.setFilter(exportFilter);
}
int batching = conf.getInt(EXPORT_BATCHING, -1);
if (batching != -1){
try {
s.setBatch(batching);
} catch (IncompatibleFilterException e) {
LOG.error("Batching could not be set", e);
}
}
LOG.info("versions=" + versions + ", starttime=" + startTime +
", endtime=" + endTime + ", keepDeletedCells=" + raw);
return s;
}
谢谢你的解释。但当应用“前缀”时,如何使用它?我在“getExportFilter(args)”中被搞糊涂了。如果我想导出:version=1和prefix='ABC-',那么我的'args'是什么?“1 ABC-”?还是别的什么?谢谢