当前位置:首页 > PHP教程 > PHP总结归纳

[原创]无法向HBase表插入数据的一个问题

转载必须注明出处: http://www.codelast.com/ 遇到一例无法向hbase插入数据的问题,发现问题所在之后觉得超级雷人,特记录下来。 【1】 在写程序之前,先通过 hbase shell 来创建一张数据表: create 'test', {name = 'f', compression = 'none', versions

转载必须注明出处:http://www.codelast.com/

遇到一例无法向hbase插入数据的问题,发现问题所在之后觉得超级雷人,特记录下来。

【1】在写程序之前,先通过 hbase shell 来创建一张数据表:

create 'test', {name => 'f', compression => 'none', versions => '1', ttl => '5184000', blocksize => '65536', in_memory => 'false', blockcache => 'true'}

这样,就创建了一张名为“test”的hbase表,其column family为“f”。

【2】写java代码,用于向hbase表插入一条记录。代码如下:

import org.apache.hadoop.hbase.hbaseconfiguration; import org.apache.hadoop.hbase.client.htable; import org.apache.hadoop.hbase.client.put; import org.apache.hadoop.hbase.util.bytes; import org.apache.log4j.logger; import java.io.ioexception; import java.util.arraylist; import java.util.list; public class hbaseputtest { private static logger logger = logger.getlogger(hbaseputtest.class); private static list list = new arraylist(); private static htable tabletest = inithtabletest(); public static htable inithtabletest() { htable table = null; try { table = new htable(new hbaseconfiguration(), "test"); } catch (ioexception e) { logger.error(e.tostring()); } return table; } public static void main(string[] args) { put put = new put(bytes.tobytes("abc")); put.add(bytes.tobytes("f"), bytes.tobytes("q"), 13399l, bytes.tobytes("123")); list.add(put); try { tabletest.put(list); logger.info("successfully put 1 record into hbase."); } catch (exception e) { logger.error(e.tostring()); } finally { list.clear(); } } }

文章来源:http://www.codelast.com/
上面的代码,向hbase的“test”表插入了一条记录,row key为“abc”,value为“123”,column family为“f”,qualifier为“q”(即,column为“f:q”),记录的timestamp为13399(随便写的一个值)。

【3】代码看上去没有什么问题,因此,我们执行它,然后回到 hbase shell,查看一下记录是否被成功地插入了名为“test”的hbase表中:

get 'test', 'abc'

这表示从“test”表中取出row key为“abc”的所有记录。
结果竟然是:一条也没有。为什么?

【4】分析问题。在经过试验之后,发现将java代码中,要插入记录的timestamp设置为当前时间,是可以成功向hbase插入记录的,于是终于发现,原来是:创建hbase表的时候,设置的那个ttl值,使得timestamp为13399的这条记录,就算是一插入了hbase表,也会被马上删除,所以用 hbase shell 根本看不到。
文章来源:http://www.codelast.com/
所以,调试时千万要注意测试环境中的陷阱。



【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!