我有以下代码:
table = new HTable(hbaseConf, targetTable);
byte[] key = "key7".getBytes();
Put put1 = new Put(key);
put1.add(OUT_CF, DATA_COL, Bytes.toBytes("data"));
table.put(put1);
调试时我看到我为put对象获取的默认TS是9223372036854775807.在我看到hbase shell中的TS之后,TS是1394640871745(当前时间以毫秒为单位)。 有谁知道为什么?如何进行转换?
答案 0 :(得分:1)
我个人不知道Hadoop,但是下面的代码产生的输出与Put
对象的默认时间戳相同:
System.out.println(Long.MAX_VALUE);
// Output: 9223372036854775807
所以我假设Put
- 对象只是将其时间戳初始化为Long.MAX_VALUE
。遗憾的是,我没有在Apache website上记录此行为。
修改强>
由于Apache的文档很差(甚至没有解释他们谈论的是什么样的时间戳),我研究了源代码并发现了我的怀疑:
public static final long LATEST_TIMESTAMP = Long.MAX_VALUE;
另见此代码摘录:
public Put(byte [] row) {
this(row, null);
}
public Put(byte [] row, RowLock rowLock) {
this(row, HConstants.LATEST_TIMESTAMP, rowLock);
}