前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hbase复杂操作的优化- Htable HtablePool

Hbase复杂操作的优化- Htable HtablePool

作者头像
架构师刀哥
发布2018-03-20 17:27:38
1.1K0
发布2018-03-20 17:27:38
举报
文章被收录于专栏:坚毅的PHP坚毅的PHP

Htable主要提供表内的操作,put,delete,get,scan等操作

HTablePool 可以建立池,存储HTableInterface接口的实现对象,一般是Htable,避免创建Htable的消耗。

HTablePool 默认创建方式:

new HTablePool(conf, poolSize);

使用这种方式得到的Htable,无法设置autoflush,在速度要求高可以容忍数据丢失场景中,会降低3/4左右的速度。

查看HTablePool创建方法发现,HTable由其内部参数HTableFactory创建,没有做任何设置

因此新建类 HTableBufferFactory implements HTableInterfaceFactory

增加设置:

HTable table = new HTable(config, tableName); table.setAutoFlush(false);

即可关闭自动提交

put对象时,设置 put.setWriteToWAL(false);  也可提高部分性能(至今没看到这个log写到哪儿去了。。。)

但是实际业务场景中,并不是只有put这么简单,后台处理机的功能是录入数据,包含了put delete incr 三种操作,并且要求高速处理

关闭autoflush有可能导致数据不一致情况(待测试),并且无法避免delete incr操作的rpc调用请求,这时需要结合 HTable.batch 实现批处理操作

创建 List<Row> batch = new ArrayList<Row>();  达到一定限度时batch处理

需要注意的是hbase的版本,在0.92版本不支持incr的批量,原本不知道这个情况

在hbase user邮件列表 user@hbase.apache.org 咨询了一下,《hbase权威指南》作者Lars George两小时内就回复了我,大爱邮件列表啊!

在他写书时候还没支持 0.94已经支持,但没有在change log里,算是个小功能吧 jira地址 https://issues.apache.org/jira/browse/HBASE-2947

incr进行batch,并把线程数double之后,处理2000条数据能力对比:

batch和线程double之前:

07 05 16:15:05 [[ClickDBWorker]34] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to hbase cost time:1.045479 07 05 16:15:05 [[ClickDBWorker]34] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:0.014752 07 05 16:15:08 [[ClickDBWorker]34] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to hbase cost time:2.638535 07 05 16:15:08 [[ClickDBWorker]34] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:0.217352 07 05 16:15:09 [[ClickDBWorker]41] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to hbase cost time:64.197514 07 05 16:15:10 [[ClickDBWorker]35] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:2.379507 07 05 16:15:14 [[ClickDBWorker]32] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:1.904393 07 05 16:15:15 [[ClickDBWorker]30] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to hbase cost time:71.706639 07 05 16:15:21 [[ClickDBWorker]40] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:1.533836

batch和线程double之后

07 06 16:33:39 [[ClickDBWorker]18] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:1.127692 07 06 16:33:40 [[ClickDBWorker]18] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to hbase cost time:0.800586 07 06 16:33:43 [[ClickDBWorker]34] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to mysql cost time:0.532394 07 06 16:33:43 [[ClickDBWorker]34] INFO c.t.t.m.MsgReactor - [MsgReactor] exploadeAll to hbase cost time:1.79E-4

之前出现写十几个小时,可用的分配内存全部占满问题,应该就是线程处理太慢,创建的对象无法释放造成的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-07-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档