Result 类型的方法 raw() 已弃用

The method raw() from the type Result is deprecated

在我们的 CDH 集群的最新升级中,我们遇到了许多方法,并且 类 已被弃用。

一个这样的例子是我用来从我们的 Hbase table 记录中获取 epochTimestamp 的方法 raw(),如下所示:

String epochTimestamp = String.valueOf(values.raw()[0].getTimestamp());

我的 PM 要求我删除所有这些已弃用的功能,并将其替换为最新的。

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Result.html我发现listCells 等同于raw(),但是谁能帮助我如何使用listCells 从HBase 记录中获取epochTimestamp?

根据documentation

public List listCells()

创建此结果中单元格的排序列表。 从 HBase 0.20.5 开始,这相当于 raw()。

因此您的代码应该如下所示:

String epochTimestamp = String.valueOf(values.listCells().get(0).getTimestamp());

要获取所有列和值,您可以像下面这样使用 CellUtil:

    List<Cell> cells = listCells();

    Map<String, String> result = new HashMap<>();

    for (Cell c : cells) {

        result.put(Bytes.toString(CellUtil.cloneQualifier(c)),Bytes.toString(CellUtil.cloneValue(c)));

    }

的替代品
raw()

可能要迭代:

result.listCells()

这会为您提供一个单元格,然后要获取值,请使用:

CellUtil.cloneValue(cell)

查看文档:

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/CellUtil.html

示例:

for (Cell cell : result.listCells()) {
    String row = new String(CellUtil.cloneRow(cell));
    String family = new String(CellUtil.cloneFamily(cell));
    String column = new String(CellUtil.cloneQualifier(cell));
    String value = new String(CellUtil.cloneValue(cell));
    long timestamp = cell.getTimestamp();
    System.out.printf("%-20s column=%s:%s, timestamp=%s, 
        value=%s\n", row, family, column, timestamp, value);
}