JAVA编程:Pora2使用中HBase高并发读写功能优化仓酷云
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net网页编程,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。淘宝搜刮的本性化离线及时剖析体系Pora已晋级至Pora2,Pora2是在基于Yarn的流式盘算框架IStream基本上开辟的,同时为包管数据和动静的及时处置体系中较多地利用了HBase,是一个典范的高并发读写HBase的散布式使用。体系在公布之初碰到了对照严峻的功能成绩,体现为处置速率跟不上及时日记,而且全部Hadoop/HBase集群压力年夜,连带别的使用受影响。经由排查发明成绩次要都呈现在了对HBase的利用上,现将碰到的几个典范的利用HBase的成绩总结以下,但愿能为别的相似使用准确利用HBase供应参考。
HBase的PeriodicFlusher
从体系的各类统计目标剖析,体系次要慢在了读写HBase的环节,察看HBase日记发明每一个RegionServer都在频仍地flush和compact。剖析后发明以后hbase版本里有一个PeriodicFlusher的机制,memstore中的数据假如延续一段工夫没有flush的话hbase会主动触发flush,这个工夫距离默许是1小时。懂得了一下这是hbase0.94.8今后引进的新feature,初志是避免有些memstore长工夫不flush,在没有开启wal且碰到regionserver挂失落时招致数据丧失。
因为我们的hbase每一个regionserver有快要100个region,几近每分钟都有region由于到达一小时的工夫距离触发flush,而多半情形下每次flush的文件都很小,flush次数多了以后又会引发compaction,云云频仍的flush和compaction使得regionserver处置速率分明变慢。在我们将这个设置调剂为10小时后,能够从下图中看到hbaseflushqueuesize和fspreadlatency都有分明变小。
注:团体以为hbase的这个新feature使用场景很无限,其实不该该作为一个默许开启的设置,倡议能够经由过程设置间接禁用。
不中断的频仍scan对regionserver形成较年夜压力
Pora2接纳了一个基于HBase完成的动静行列Hqueue,下流利用方经由过程读这个动静行列,第一工夫猎取最新的动静举行处置。
读动静的历程相称于一次Scan,在一入手下手的Pora2版本中我们未对读Hqueue的频次举行把持,招致某些读HQueue的worker一直地倡议新的Scan,即使Hqueue数据已读完,仍会立即从头创立Scan,而这个Scan会由于读不到数据很快停止以后又从头创立。如许一直地新建Scanner对RegionServer端组成了不小的且是不用要的压力。
发明这个成绩后我们修正了这部分程序代码,在读完数据后sleep几秒后再从头scan。
在修正完hbase的设置而且加上读Hqueue的scan频次把持后,Pora2情形分明恶化,但处置积累数据时的速率仍是不敷快。
超年夜并发下的hbase成绩
从统计目标上剖析,体系仍是慢在会见hbase上,会见hbase的日记中不时呈现各类TimeOutException也能够申明这一点。跟踪日记中某些频仍报超时的regionserver发明,有些regionserver日记延续报以下非常:
地点呆板毗连数良多,但load很低,而一旦pora2停了,这些征象就会很快消散。
从这一征象剖析判别是Pora2对HBase的并发毗连数太多了,使得regionserver的handler不敷用,server端还没来得及处置哀求,client端已到了超不时间而断开。
为此我们年夜幅度削减了会见hbase的历程数以削减对hbase的并发毗连,为了不下降处置才能,在历程外部利用更多的处置线程。因为线程间是共享对hbase的毗连的,以是增添线程数不会增添对hbase的毗连数。
经由过程这一调剂,很年夜水平减缓了hbaseregionserver的压力。
制止HBase会见热门
在作了较多优化改善后发明仍有几个worker对照慢,跟踪那几个慢的worker日记发明读HBase常常超时,找到超时的regionserver,从HMasterUI上察看到这个server的读写哀求数分明是别的server的好几倍。入手下手嫌疑是数占有倾斜,有热门region落到了这台呆板上。在HBaseUI上逐一反省Pora2用到的HBase表,公然在个中的一张表上发明它的第一个region的哀求数比别的region凌驾一两个数目级。
按我们的计划预期,这个表的rowkey是加了hash前缀的,实际上不应有热门region,终极反省代码后才发明是天生rowkey的代码存在bug,天生前缀的代码用了key.hashCode()%regionNum,了局有良多key的hashcode前往是正数,使得良多前缀是正数,全都落在了第一个region上。
而对hbase来讲,一旦有一个region有热门,就会招致该region地点的regionserver变慢,进而使得这个server上别的表的region会见也慢,从而影响了全部hbase的功能。
Bulkload数据的MajorCompaction
查询拜访中还发明了一个Bulkload数据未实行MajorCompaction引发的成绩。
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 是一种语言,用以产生「小应用程序(Applet(s)) Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
页:
[1]