Hbase放置时间戳(Java)和hbase shell时间戳

时间:2014-03-12 09:38:42

标签: java shell timestamp hbase

我有以下代码:

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(当前时间以毫秒为单位)。 有谁知道为什么?如何进行转换?

1 个答案:

答案 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);
   }