专栏首页坚毅的PHPHbase复杂操作的优化- Htable HtablePool

Hbase复杂操作的优化- Htable HtablePool

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • post multipart data boundary问题 使用curl 向jersey post文件

    原以为curl 模拟post file跟post string类似,-d参数一加 ,header一加就完了,这次遇到个问题,却怎么都搞不定。 curl模拟pos...

    财主刀刀
  • startup script和cronolog日志切分

    相关参考资料: http://man.cx/start-stop-daemon(8) http://cronolog.org/usage.html http:/...

    财主刀刀
  • protocol buffer c++ python库安装

    c++库安装较简单,不要用源码,还得下载依赖,就被墙了 https://github.com/google/protobuf/releases  下载一个最新的...

    财主刀刀
  • CSS定位概述

    如果对一个元素进行相对定位,它将出现在它所在的位置上,然后可以通过设置垂直或者水平位置,让这个元素“相对于”它原来的位置进行移动,这时元素依然占据原来的位置,但...

    菜的黑人牙膏
  • gsoap入门:C/C++代码生成及编译

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • 【GitHub】NLP比赛TOP方案汇总

    https://github.com/zhpmatrix/nlp-competitions-list-review

    昱良
  • 反向传播算法大揭秘

    注: 该篇博文是我阅读《How the backpropagation algorithm works》一文的笔记,该博文详细介绍了反向传播算法,并给出了反向传...

    卡尔曼和玻尔兹曼谁曼
  • C语言

    栋先生
  • 0783-6.2.0-如何在Hue中集成HBase

    Fayson在前面介绍了《0635-5.16.1-Hue集成HBase出现Api Error异常分析》和《0647-6.1.1-Hue集成HBase出现Api ...

    Fayson
  • 网易基于 HBase 的最佳实践

    本文根据网易杭州研究院技术专家范欣欣在中国HBase技术社区第3届 MeetUp 杭州站分享的《网易HBase实践》编辑整理而成。

    大数据技术架构

扫码关注云+社区

领取腾讯云代金券