在我们CDH群集的最新升级中,我们已经推出了许多被弃用的方法和类。
一个这样的例子是方法raw(),我用来从我们的Hbase表记录中获取epochTimestamp,如下所示:
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?
答案 0 :(得分:3)
的替代品
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);
}
答案 1 :(得分:2)
公开列表listCells()
在此结果中创建单元格的排序列表。 从HBase 0.20.5开始,这相当于raw()。
因此,您的代码应该看起来:
String epochTimestamp = String.valueOf(values.listCells().get(0).getTimestamp());
答案 2 :(得分:1)
获取所有列和值,您可以使用如下的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)));
}