JAVA网页编程之hbase failover形态下启动慢缘故原由排查仓酷云
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听,某天我们晋级hbase,从hbase-0.94.5升到hbase-0.94.10,固然这些版本内里有本人到场的部分patch。启动后,看master页面,发明良多region还没有online,在渐渐的open中。是甚么缘故原由呢?jstack发明master在实行processDeadServersAndRecoverLostRegions历程,在一个region一个region的处置,而集群统共有3w多个region,300百台呆板,3w个region一个个处置,写zk,关照regionserver翻开region,这个历程的确很慢,为何没有bulkassign呢?
本来是由于有3个deadregionserver,启动历程被判别为failover来处置了。
我们看下HMaster的启动历程:
启动过程当中:
HMaster依据以下前提之一判别此次是不是是failover历程:
(1)有非metaregion在regionserver下面
(2)有region在RITs过程当中
(3)deadservers不为空
[*]假如是failover历程(实行processDeadServersAndRecoverLostRegions):
剔除deadservers下面的regions,这些regions由SSH(ServerShutdownHandler)来处置
剔除RITs过程当中的region
剩下的region一个一个处置分派
[*]假如不是failover历程(实行Cleanclusterstartup):
删除zk下面的unassigned节点
BulkAssignerassignregion。
从启动历程看假如是clean的startup历程,regionopen会很快都完成,由于是批量open,以是速率会很快,假如判断是failover的历程,那末就很慢了,出格是年夜集群,region多的时分。这里就是由于有deadregionserver以是判断是failover历程。针对这类情形,我们打了个patch,把某些region用bulkassign的体例来翻开,年夜年夜减速了启动历程。
办理思绪是:
region一个一个处置分派,改成bulkassign,由于这些region不在deadserver下面,也没有在rits中。
测试效果:
11000个region,当地测试,本人的呆板,单集群一个master,一个regionserver,一个zk节点
(1)region一个一个处置分派时,启动共消费33mins
(2)regionbulkassign时,启动消费7mins
成绩办理了后,我们来看下为何启动历程有3个deadregionserver呢?从master日记来看,有两个regionserver启动时绑定端口失利,regionserver启动后会绑定60030端口,假如失利就会抛出非常,这个端口被其他使用利用了,办理举措是在设置文件中把hbase.regionserver.info.port.auto设置为true,regionserver发明60030端口被占用,会实验绑定其他端口。另有一个regionserver是因为封闭时有成绩,没有删除.oldlog目次上面的子目次招致的。又查了下regionserver封闭失利的缘故原由:
1
2
3
4
5
6
7
2013-12-1815:17:45,776INFOorg.apache.hadoop.hbase.regionserver.HRegionServer:Connectedtomasteratnull
2013-12-1815:17:48,776INFOorg.apache.hadoop.hbase.regionserver.HRegionServer:STOPPED:Exiting;clustershutdownsetandnotcarryinganyregions
2013-12-1815:17:48,776FATALorg.apache.hadoop.hbase.regionserver.HRegionServer:ABORTINGregionserverdump152049.cm8.tbsite.net,60020,1384410974572:Unhandledexception:null
java.lang.NullPointerException
atorg.apache.hadoop.hbase.regionserver.HRegionServer.tryRegionServerReport(HRegionServer.java:880)
atorg.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:753)
atjava.lang.Thread.run(Thread.java:662)
依据regionserver日记发明是毗连master出了成绩,rpcproxy被设置为null,前面心跳工夫到了,又利用这个rpcproxy招致的npe,以是我们也修正了这块逻辑,制止regionserver封闭失利。
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 是一种为 Internet发展的计算机语言 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
页:
[1]