hbase删除deletefamily单元格或还原标记为删除的数据

xoefb8l8  于 2021-06-09  发布在  Hbase
关注(0)|答案(0)|浏览(295)

我在hbase中错误地删除了行,所以现在对于每一行都有一个 type=DeleteFamily . 我已经准备好了 KEEP_DELETED_CELLS => 'TRUE' 所以数据还在,但我需要恢复它。据我所知,扫描数据,然后对除deleteFamilyOne以外的所有单元格进行put是没有帮助的,因为数据已经在这里了。目前,我已使用以下代码将数据复制到另一个表:

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。
谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题