我在hbase中错误地删除了行,所以现在每个这样的行都有一个type=DeleteFamily
的单元格。我已设置KEEP_DELETED_CELLS => 'TRUE'
,因此数据仍然存在,但我需要恢复它。据我所知,扫描数据,然后使用除DeleteFamily之外的所有单元格进行放置,因为数据已经存在,所以无法提供帮助。现在,我已使用以下代码将数据复制到另一个表:
Configuration config = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(config);
Table myTable = connection.getTable(TableName.valueOf("my_table"));
Table myTableBu = connection.getTable(TableName.valueOf("my_table_bu"));
Scan scan = new Scan();
scan.setRaw(true);
scan.setTimeRange(1490004800000L, 1491004910000L);
ResultScanner scanner = myTable.getScanner(scan);
Result result;
do {
result = scanner.next();
if (result != null) {
Put put = new Put(result.getRow());
Arrays.stream(result.rawCells()).forEach(it -> {
try {
if (!CellUtil.isDelete(it)) {
put.add(it);
}
} catch (IOException e) {
log.error("Error adding Cell to Put: " + it);
}
});
myTableBu.put(put);
}
} while (result != null);
myTable.close();
myTableBu.close();
现在我想知道我是否可以设置KEEP_DELETED_CELLS => 'FALSE'
等待主要压缩,然后复制完所有数据或者在主要压缩后删除DeleteFamily单元格并将数据复制回来将使我返回到我的位置我现在我用谷歌搜索它,发现在主要压实后可能不会清除DeleteFamily细胞。
我很高兴在这里有其他可能的解决方案来恢复这些数据,比如可能有办法删除DeleteFamily单元格吗?我在谷歌找到的唯一解决方案是复制数据。
Hbase版本为1.2.0-cdh5.9.0。
谢谢!