关于python使用批量方式插入hbase的性能测试

这个5 1过得有些蛋疼,没有出去旅游,原本是计划去旅游,我自己把天气预报看错了,结果导致大家都没去成清凉谷….   好在昨天跟朋友们在工体的酒吧, 花了我2000多快,因为没有散台了,这种时候让人等到有散台会很没有意思的….  所以直接去了卡座…   拿铁酒吧的妹子不错….  嘿嘿,身材好棒   !


正题开始, 工作方面还是遇到了烦人的问题,很是不爽!  有个数据抽取队列居然飙升到了170w左右,你妈了个蛋的! ….  用strace看了下问题,是thrift server堵塞造成的.. … 上星期我们开发了一个组件,就是把会消耗时间的hbase和es的操作,数据序列化后放到redis里面, 然后由多个导出程序来消费这个队列 。 出了这个之外,我们还已经用nginx tcp模式针对10个Thrift server进行负载均衡,为了解决nginx tcp module只能针对端口的监控探测,我们的应对方案是开发了一个针对后端所有thrift server进行scan的小任务操作,用来保持最佳状态的后端服务。 就算这样,有时候还是会堵塞。    看了happybase的文档,发现是可以批量put到hbase的。  把线程的代码改成batch模式很是简单, 但是结果没有太多的改善。  我把自己的测试的结果show给大家…  

标记下文章的原文链接是,  http://xiaorui.cc      http://xiaorui.cc/?p=1353

需要做个对比才能看出效果, 因为vpn的关系看不到metric的收集数据展现的图表,这样只能简单的通过计算hbase的操作的时间记录日志,查看他的消费的时间。    我这里额外提一下,我这边每条的数据都比较大,虽然是压缩后的网页源码。    这里先看下批量插入的实现代码

hadoop.py

我这里用的是happybase,官方的文档已经写的很清楚,大家可以看看。 


下面是每个任务为一次put动作   我们会发现他消耗的时间相当的少,几乎都是在0.0x秒。   


下面是20条数据为一次put数据。 

50个任务

那么我们再来试试把数量级调节到100个 … …  我们会发现性能很是不稳…..   


批量的效果不是那么的明显。。。。


后续,跟同事的批量业务对比了下,他们的rowkey设计的时候包含了时间戳,时间是有序的数据,所以他会在一台服务器上插入。 然而我们的rowkey是url的md5,是个随机的哈希,会分配到不同的regionserver上面。  这样很好的解决了hbase热点在一区域的问题。








对Golang感兴趣的朋友可以加群: 278517979 !!!
另外如果大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码, 感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

  1. 往往 2015年5月4日 / 上午9:47

    这么看性能一般呀

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">