個人檔案* Learning To Fly *部落格清單訪客留言更多 ![]() | 說明 |
|
10月22日 More on Java Garbage Collection许久以前写过一篇关于Java中的System.gc的文章,今年偶然又想起这回事儿,遂又找了些资料看看。 下面这篇是写得比较详细明白的,有兴趣的可以看一下。 http://www.artima.com/insidejvm/ed2/gcP.html ![]() 9月30日 Crash今天终于有时间把这部积压了多年的某年奥斯卡最佳影片看了。 整体感觉,不错。剧中的每个人都经历了一次Heart Crash,真的每个人,这一点我还是颇为佩服编剧和导演的。 不过最后的结局算是对人类的一个小小讽刺吧,呵呵~ 总的来说是部好片子,还没有看过的、喜欢剧情片的可以看看:) ![]() 8月22日 HBase和RegionServer那些事儿——云计算的诅咒题记:近些年来,随着云计算的不断推进和推广,HBase作为为数不多的开源基于云计算的数据存储系统吸引了大量的注意,谁让人家身出名门呢。作为Nutch家族冉冉升起的一个新星,HBase以其良好的扩展性以及巨大的开发潜力被人们广为传颂。本文记述了一个普通的IT民工与开源软件斗智斗勇地真实故事,书写了一段可歌可泣的垒码传奇。
找到这个LocalHBaserCluster之后,将其初始化,代码如下: HBaseConfiguration conf = new HBaseConfiguration(); conf.set(HConstants.MASTER_ADDRESS, "local:6000");
String path = "file:////home/Owner/master_home"; File dir = new File(path); dir.mkdirs(); conf.set(HConstants.HBASE_DIR, path);
LocalHBaseCluster cluster = new LocalHBaseCluster(conf); cluster.startup(); 上面的代码建立了一个Local Cluster,似乎不用费多少功夫嘛,那就先将其跑起来吧~
3. 白手起家打天下,各路jar包来助阵。 因为我修改了HBase的源码,所以部署时也选择了可能是比较复杂的方法:重新编译,从头部署。 第一步,将编译后的bin拷贝到Cygwin的home目录下。 第二步,将下载的HBase的src目录下的webapps目录放到刚才copy的bin目录下面,webapps包含了运行需要的jsp文件。 第三步,这是很tricky的一步。我当初修改的源代码是从下载的HBase的src/java下来的,但是这里面其实缺了一个很重要的目录,那就是——generated目录。当初为了寻找因为缺失这个目录所引发的Exception根源,我可是望穿了秋水啊~这位客观问了,那既然src下面都没有,让我去哪儿找啊?哇哈哈,这就是开源软件的阴险之处:自己找去~!……………………………………算了还是我告诉你吧,这个目录需要从你下载的HBase的jar包里找,其实这个目录是将上面提到的jsp文件编译成了class文件。好了,将这个偷来的目录拷贝到home/bin下面它该去的地方。 第四步,jar包!jar包!jar包!HBase运行依赖的包那是相当的多,主要来源是两个:一个是下载的HBase的lib目录下的那些个jar包;第二个是tomcat里的诸多包,为了保险起见,你最好将你能在tomcat的目录下能找到的jar包统统拿走。那么拿了人家这么多jar包,放到哪里去呢?答案有两个配置:勤快人配置:放到一个和bin同级的lib目录里,然后以后在cmd运行程序时指定classpath;懒人配置:统统放到jre的lib/ext目录下,这个目录里的jar包在任何java程序运行时都会首先来这里找,找不到再去classpath里找。你问我用的哪种方法?……今天天气真不错哈~
4. 家有LocalCluster初长成,有主有仆乐融融。 有了上面的配置,我们的第一个LocalCluster就要火爆登场了,大家给点儿掌声! 现在就可以运行了,通过Cygwin进入到bin目录下,鼓起全部勇气敲出引领大家进入java殿堂的那一行古老而神秘的命令吧:java - org.apache.hadoop.hbase.test.HBaseTest.
智商较高的朋友们可能已经猜出,没错,HBaseTest就是包含了刚才那一段代码的启动LocalHBaseCluster的类。随着你的拇指或者小指或者食指或者其他某个手指在Enter键上用堪比邓小平同志当年画圈圈之气势做出那惊鸿一敲,屏幕在迟钝了一下之后,开始水银泻地一般地输出各种花花绿绿的日志信息,由于我们刚才在jar包人才的引进方面做足了工作,使得这次运行没有爆出任何Exception,你也可以松一口气了:HBase跑起来了~ 不过,似乎还缺了些什么……你的心中升起了一股莫名的恐惧~
5. 风云突变,祸起端口。 想起来了,我们最初的目的是在一台机器上跑多个RegionServer,现在我们做到了吗?做到了吗?你猜猜?哈哈,做没做到要代码说了算。跟踪LocalHBaseCluster的代码可以发现,刚才用的构造方法是构造了一个包含一个Master和一个RegionServer的实例。什么?费了这么半天劲不就是搞了个StandAlone模式么???你欺骗我的青春!……其实我没有。
那现在这个情况和StandAlone模式有什么区别呢? StandAlone其实是提供给HBase的End User的一种使用模式,用户可以通过终端命令操作HBase,如建立表,插入数据等。而回顾一下我们刚才的部署过程就可以发现,我们做的其实是为开发人员服务的一种模式。其实也不是什么本质的区别,关键问题是:用HBase的StandAlone模式实现不了多个RegionServer的宏伟蓝图。
好吧,既然如此,那LocalHBaseCluster有没有可以指定RegionServer数量的构造方法?你别说,还真有,那好,那我们就指定为2个试试吧。你心中暗爽:java就是TMD简单~ 修改程序,重新编译,copy新文件,经历这些之后你再次施展了敲Enter大法,然后等待着满屏幕的日志信息来证明你的伟大以及java的傻瓜。你做到了,果然又是一屏幕的日志,不过在这乱七八糟的日志中,你发现了一丝不详的预兆:Exception!是的,是Exceptoin,java程序员除了老板之外最讨厌的东西!别的不用说,单是他那比别人多缩进一次的排版就可以知道他是个浪荡不羁,鱼肉程序员的坏小子。对付这种敌人怎么办?又一次,我们翻开毛选找答案,这次主席说:一些反动派都是纸老虎~
纸老虎,主席说得轻巧,这只老虎连个形状都没有,抓起来谈何容易,不过既然领导说了,我们就要抱着必胜的信念,排除万难去争取胜利!
俗话说:Throwable生九Exception,九Exception各不同。先来看看我们遇到的是个什么Exception。黑屏白字写的是:BindException:Address already in use : JVM_Bind。原来是个地址端口问题,有名有姓就好查了,开狐狸,放狗~!你别说,网上关于这个Exception的报告还真不少,可我们的问题在于Exception中没有提到被占用的是哪个端口,这可怎么办?望着netstat输出的一长溜进程和端口号,我绝望了……
这时,突然有一个飘渺的声音在天空对我喊道:追代码……追代码……一时间,我精神抖擞!对啊,作为一个英勇无畏的java战士,怎么忘了自己的终极武器了?于是我高举着以System.out为核心的追代码策略,团结在以Eclipse为核心的IDE周围,开始了轰轰烈烈的debug工程。
具体流程我就不加赘述了,总结起来就是:把Exception stack中所有出现了地址和端口号的地方都打印出来,看看冲突究竟在哪里。加入错误追踪信息的程序又一次起航了,这一次,System.out又立功了!我用在茫茫人海中寻找失散多年的亲人的目光在日志信息中搜寻,终于找到问题了:两个RegionServer占用了同一个端口……并且一举抓获了犯罪代码~
6. 要坚持具有应用需要特色的拿来主义一百年不动摇! 为什么会有这个问题呢?分析起来其实很简单,默认的LocalHBaseCluster只启动一个RegionServer,而Cluster应用的RegionServer又是一台机器只跑一个,所以RegionServer占用的端口号是固定的,那么自然就出现了刚才描述的端口冲突的情况。
发现了问题就好办,找到犯罪代码,修改之,让每次增加的RegionServer使用一个新的端口就行了。Apache的东西固然质量好,但是适合不适合应用需求就要具体分析了,而这也和我国领导层确立的坚持有中国特色的社会主义的原则不谋而合,看来天下的事,说到底,也都差不多~
7. 经济基础决定上层建筑,内存大小决定Cluster规模。 到这里,大的问题基本就解决了,但是还有最后一个小问题却是不能忽视的。 如果我们将LocalCluster的规模设置为2的话,经过刚才的修改HBase是可以正常运行的。 但是当我修改为5时,也就是有5个RegionServer时,程序却崩溃了,凶手就是我们熟悉的:Out of Memory !
为什么呢?在Cluster应用中,由于每个机器只跑一个RegionServer,所以可以最大程度地利用该机器上的资源,从代码可以看出至少要占用1024*1024*5*4字节,也就是20M的内存,而如果我们在一台机器上运行5个RegionServer,就至少需要100M的内存。问题就在于java运行时如果不加指定,默认的内存使用上限只有64M,所有出现这个问题就不奇怪了。 所以在运行时加入-Xmx参数指定最大内存就可以了。
8. 万里雄关真如铁,而今迈步从头越。 到这里,在单机上部署运行多个RegionServer的蓝图我们已经实现了,但是这只是万里长征的第一步。部署起来HBase,我们就可以对自己的一些修改和想法进行实现和评估,这,才是使用HBase更加重要的目的。开源项目从来都不是直接给人用的,更多的,是给大家提供推动IT进步的一个平台。
好了,让我用周润发同学的著名广告词结束本篇吧:成功,我才刚上路~ 7月23日 Something About Michael JacksonThere're two categories of music in the world, one is music by Michael Jackson, and the other is not. Maybe not everyone can understand this, but to me, it's true. 6月28日 受不了了……这几天每天打开浏览器看到的都是铺天盖地的纪念MJ的各给文章,每篇文章都像在触碰着我心中一个小小的伤口。我从来没有想到他对我的影响竟然已经如此深刻,他的死对我就好像失去了一个最好的朋友。不过,外星人总是要回去的,希望他能够从他的星球带回一个他的接班人…… 早上起来的时候似乎已经忘了MJ的离去,可是各种纪念活动和文章总在不断提醒着我:MJ真的走了,this is it。 唉,心情十分矛盾,一边希望悼念活动快点过去,好让广大歌迷们慢慢治愈创伤;一边也希望活动一直持续下去,好让我们感觉到,他刚刚离去,还未走远…… 6月26日 一个MJ走了唉,套用一句我国名言来说:MJ辞世,世间再无大师。 MJ是一个全面的偶像,全面的意思是: 在娱乐界,精通作词、作曲、演唱、舞蹈以及乐器; 娱乐界之外,他是以个人名义捐助慈善机构最多的人; 他是全世界青少年们的偶像; 他的音乐盒精神影响了不止一代人; 他是20世纪地球上最伟大的音乐人。 不知何日才能出现他的继任者,虽然历史总是向前的,不过还是很难想象会有人能够超过他。 Michael, you are not alone. 6月17日 重启治百病机器最近问题比较多。 先是piWorx的某个进程每次启动不久就自动关闭,然后是Firefox某个版本经常性崩溃(5分钟一次)。 今天休息之余重启了一下,起来之后发现啥都好了~ 哈哈,Window的神器果然还是重启和重装啊~ 6月15日 《Joey》和《Friends》最近又看了几集第二季的《Joey》,感觉和看第一季时差不多,感觉有些太刻意了。 F是一部著名的室内喜剧,是喜剧就要有joke,F如此受欢迎的主要原因之一就是它的joke都设计的非常巧妙,出其不意,而且是自然流露的。 J在F刚刚落幕不久的背景下推出,势必是想借Joey这个角色在F中的人气再火一把,然而我觉得做得有些不成功。从我的感觉来说主要有两个原因: 1. 没有相对连贯的剧情。感觉整部剧就是由一个个的joke串起来的,虽然也有故事情节,但是几乎被笑话分解得支离破碎,让人看起来很不得劲。 2. joke设计不成功。有很多joke的铺垫太明显,60%左右的joke看了铺垫就知道会发生什么,这一定不是好的joke。没有了惊喜也就没有了笑点。 不过话说回来,也有可能是F看多了有些挑剔了,多少有点曾经沧海难为水了~ 6月7日 关于八年前教师节前后的一些事情的其他解释~虽然我不居住在那片土地,但是生命在哪里都是生命。 有兴趣和耐心的同学们可以看看这个video,了解一下事件的另一种可能性~
http://v.youku.com/v_show/id_XNDQ2NTAxMjQ=.html 5月17日 有关一只小猫的梦话说前日做个了梦~ 梦里有我和另外一个不知是谁的男生——叫做某君吧,梦里依稀记得我是认识他的。 发生了什么呢?事情是这样的。 某君怀中抱着一只小猫,小猫用宠物们一致的杀手级的无辜眼神看着某君,心中满是幸福,估计在想:啊~我有多么好的一个主人,他是那么的爱我~ 就在小猫持续无辜的时候,某君pia的一下就把小猫远远的扔在了地上,把站在一旁的我吓了一跳,于是我赶紧跑到小猫旁边。 令我惊奇的是,小猫并没有表现出一丝一毫的不满和惊诧,而是继续无辜的看着我,似乎在对我说:你知道吗?我有多么好的一个主人,他是那么的爱我~虽然他有时会不小心把我摔倒地上,但那是因为他把我捧在手心里的时候太紧张了~ 我抱起小猫,一边抚摸一边心中默念: You're blessed to be a cat, not a human being~ 我想人世间的转身和背叛,大概要比动物界残酷的多吧~ 5月11日 Coach Carter全美国无数的高中生球员里,有几个能成为勒布朗?如果成不了勒布朗,他们的前途在哪里? 《Coach Carter》讲述了卡特教练用自己独特的执教理念训练队伍的故事。卡特教练与其他篮球教练最大的不同在于,他知道他的球员不只是球员,更是一个个的高中生,他必须为他们的未来着想。这样与众不同的执教理念,开始不仅受到了球员们的抵触,甚至连学校和整个社区都不予赞同。但卡特教练还是凭着自己的一片真心感动了孩子们,不仅把Richmand高中打造成为了一支篮坛劲旅,在只有50%学生能够顺利毕业的Richmand高中,球队的学生都顺利毕业,而且还有6人顺利升入大学,其中5人得到了篮球奖学金。 卡特教练面对的情况并不是个例。在美国,黑人的生活环境是比较恶劣的,不上大学的黑人更是有1/3有坐牢经历(以Richmand为例)。而对于高中校园里的黑人球员,人们——包括学校、社会以及球员自己——都把他们定位为球员,而不是学生,人们不在乎他们是否能够顺利毕业,是否能够升入大学,是否会有一个光明的前途。而在这样的环境下,球员们也对自己产生了错误的自我定位。认为自己可以不用好好上课,不用把学习当回事儿。这在无形中给了他们一种自己是特权人物的假象,也就为日后走入社会后违法乱纪埋下了伏笔。 卡特教练作为70年代Richmand的功勋球员,甚至这样的教育环境对学生球员是多么的不利。既然不能指望学校,就只能自食其力。卡特先是通过严格的训练让球员们都深深爱上了篮球,而后以篮球为筹码逼迫大家好好学习,否则就不能打球。这样的举动得到了球员、学校以及社区的一直反对,因为在他们心中,他们只是球员,打球是他们唯一需要做的事情,以成绩不好为由不让他们打球是很荒谬的。但是最后球员们明白了卡特的一篇苦心,并且以实际行动表明了他们的支持。 这是美国体育片的经典作片之一,愿意了解美国高中篮球真实情况的同学们可以欣赏一下,很不错。 Spirit推荐度:星星星星星 片长:2小时16分 主演:萨缪尔·杰克逊 ![]() 5月6日 劲霸男装-火湖版科比:今天走? 麦帝:放心吧,从小到大我就没赢过你 科比:.... 科比:有你的 ... 麦帝:火箭赢了~下赛季~我就不回来了~~~~~~~~~ 科比:.... 给你这样的爷们,T-mac 专注季后赛第一轮七年 ![]() 1月6日 Java性能调优小记在处理大数据量时: 1. 不用各种auCommit,自己定义和调整commit的阈值。 2. 贵重资源尽量重复利用。 3. 尽可能用buffer读取文件,不用readLine之类的。 4. 及时释放资源。 如果想控制CPU使用率在一定值之内,达到不影响用户正常使用的目的,可以使用间歇性sleep,sleep的时间比例需要具体调优来确定。 最后,调优的第一准则:每次只解决当前最大的瓶颈,解决后再次寻找最大瓶颈。 12月22日 Netbean 6.5 At a Glance今天偶然看到了Netbean 6.5的一篇宣传文章,就下了一个用了用。 然后在写了一个hello world之后就抛弃了…… 原因只有一个:字体太难看…… 做产品,外观很重要啊~还是Eclipse用着舒服,没有特殊需求看来是不会切换了~ 9月24日 推荐一本书英文名叫做:《Almost Buddhist》,中文译作《正见》,或《近乎佛教徒》。 中文的,很短,PDF89页。语言很朴实,几乎没有任何玄乎的佛教用语,我这个佛教白痴也可以看得懂。 如果你是一个爱思考,并且乐于探索或尝试不同思想的人,那么我想你会喜欢这本书的。 我这里有电子版,有兴趣的同学可以向我索取。 8月28日 A Summer to RememberWe experienced heaven, although followed by something no prettier than hell. Heaven gave us every reason to hold on through any hard time on the way to the end of time, and hell makes us treasure every detail of happiness and every chance to sustain and extend the happiness. What else can we ask for a summer ? |
|
|