现在的位置: 首页 > 综合 > 正文

Hbase插入事项

2013年05月14日 ⁄ 综合 ⁄ 共 945字 ⁄ 字号 评论关闭

      人生的第一篇博客,写这些,主要是为了以后看自己曾今的影子。

      作为一名hbase的初学者,我就是一个菜鸟,十成十的菜鸟,好了,说下hbase插入时注意的事项。

      hbase的插入非常的简单,获取HTable,创建Put,使用hTable.put(put),完事,api就是这么简单,但插入时要提升效率,需要注意的事项有:

      1.创建hbase的表时注意使用pre-creating,在类HbaseAdmin上,这些在apache的官网上有详细的例子,使用的原因?就是预先创建一些region,当数据插入时,分散到预先创建的region上,避免一直写入一个region,导致split和compact的高触发,降低效率。

     2.如果是文本数据,记得使用HTable.setAutoflus(false),然后调用HTable.setWriteBufferSize()设置在客户端缓存数据的大小。这么做的好处就是如果单条就上传到hbase服务器,io流增多导出效率变慢,而缓存到几M或几十M的时候再一次提交,效率提升非常明显。当然,这有个风险,当你的客户端在插入时忽然间荡掉了,你缓存在客户端的数据也就丢失了。

     3.可以使用Put.setWriteToWAL(false)使habse写入时不写入日志,可以稍微提升效率 ,但导致的结果就是没有日志,hbase服务荡掉后尚未写入的数据会丢失。

     4.最后,我想说的是,即便这些都配置对了,但硬件条件不行的话,写入还是非常慢的。作为一个菜鸟,我就碰到了这样一个问题,原先我是用的api插入方式都是对啊,但数据插入奇慢无比,对比网上的那个测试数据,动辄1w/s的插入效率,100/s的插入效率实在是不能见人,由于性能相差太多,我只是考虑代码api方面有没有不恰当的地方,根本没忘硬件方面考虑。原先我是在自己的开发机器上网hbase里插入数据的,由于网络带宽和其他种种原因,导致写入100/s都无法达到,后来我将插入的服务移到自己的hadoop集群上进行插入,可以达到1k/s的效率,最后,到现场开发环境中测试,我可以达到1w/s的插入效率,我是同时插入1张主表和3张索引表的,总体效果满意。所有说,对于插入方面的,除了代码,还有硬件

抱歉!评论已关闭.