【发布时间】:2012-05-31 19:56:47
【问题描述】:
我在使用 java api 设置行时间戳时遇到问题。
当我尝试向 put 构造函数(或 put.add())添加时间戳值时,什么也没有发生,在从表中读取行后,我得到系统提供的时间戳。
public static boolean addRecord(String tableName, String rowKey,
String family, String qualifier, Object value)
{
try {
HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(rowKey), 12345678l);
put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value.toString()));
table.put(put);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
HBase 0.92.1 在独立模式下运行。
提前感谢您的帮助!
【问题讨论】:
-
您能提供更多信息吗?您使用的是什么版本的 HBase?该行是否有并发写入?可能是版本 12345678L 已成功存储,但您有系统提供的时间戳比 12345678L 更新。尝试获取该行的所有版本并检查 12345678L 是否存在。
-
HBase 0.92.1。该行只有一个版本(我在获取和检查中设置了最大版本号)。
-
您能否将“hbase> describe 't1'”(HBase Shell)的输出粘贴到您的表 t1(无论它有什么名称)?这将为我们提供有关您尝试写入的列族的信息。可能存在诸如家庭生存时间之类的问题。也尝试写入一个空行,你肯定会得到你想要的时间戳,因为应该没有其他版本。
-
{NAME => 'TestTableName', FAMILIES => [{NAME => 'Family1', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '3', 压缩=> 'NONE', MIN_VERSIONS => '0', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'Family2', BLOOMFILTER => 'NONE', REPLIC ATION_SCOPE => '0', VERSIONS => '3', COMPRESSION =>'NONE', MIN_VERSIONS => '0', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => '假',BLOCKCACHE => '真'}]}