吐个hdfs的槽

其实每个 open source 的玩意儿都会有这个那个的 bug 的,但是这次白白花了一天半的时间,正经活没干,实在是很想吐一个槽。

我们有一个hadoop的机群,最开始是一堆配置低的 pizzabox,每台box有俩 disk,后来加了一些高配置的 beefbox,自从那个之后我们的 cluster 就没有平衡过,亏得于  HDFS-6621 所赐,Balancer 就是一龟速。这也就算了,反正我们也不着急,让他慢慢平衡呗~

然后周四早上,有些 pizzabox 的 disk 就满了,但 cluster 的 utilization 只有不到 50%。我们就怀疑各种 config 问题,比如是不是 dfs.datanode.fsdataset.volume.choosing.policy 设成 Round Robin 啦(之前被咬过),dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction 是不是没设对,或者 dfs.datanode.du.reserved 是不是设太小了。总之排查了一番没有找出什么问题,就先看看 hdfs 能不能自己把几个 volume 之间 balance 一下,就翻到了这个 HDFS-1312 已经开了5年的 task 到现在还是悬而未决。

好吧,那我们就手动搞一下,参照 Hadoop 的 FAQ,貌似也不复杂,只要把 datanode 关掉,挪一下 subdir 到另一个磁盘同样的文件目录下就好了。我们也就这么做了,datanode 上线之后倒是 ok 了,磁盘多了点空余空间,我们很高兴,于是把其他的有问题的 box 都这么搞了。结果过了不久,我们就注意到磁盘又开始满了,我们心中就一股 WTF…

75e60383c11e59fc55673d7c9d75364ba3ed694277f2c45b3c63948a3a8f853a

然后我们又开始一顿排查,又是看源码又是 debug 的,觉得 datanode 没有问题,新 block 也是写到另一个磁盘的。折腾了很久,然后我去比对了一下文件,发现了 dncp_block_verification.log.curr 居然有 1 TB !

7297011354_476b7056be_o

所以我们是撞到了这个 HDFS-6114,我们挪了多少 block,丫又会写一堆 scan log 让我们一阵白挪….. 心里真的是万马奔腾…..

想想 Hadoop 也是有 10 年历史了,怎么还能这么不靠谱……..

Useless box

image

周末和一哥们一起做了这么个东西,如上图,花了我们俩engineer俩小时的时间。几百年都没焊板子了。

做出来的这玩意儿就如其名,完全useless…. 打开开关,盒子就会打开,伸出个手,把盒子关掉….

Google GO (2)

果然是犯困了,刚才更新了env却跑到另一个term里执行…

skh-laptop/home/skh/temp
skh >>> 8g ./helloworld.go                                                                  09-11-12 2:41
skh-laptop/home/skh/temp
skh >>> 8l ./helloworld.8                                                                   09-11-12 2:41
skh-laptop/home/skh/temp
skh >>> ./8.out                                                                             09-11-12 2:41
Hello, 世界
skh-laptop/home/skh/temp
skh >>> ls -l 8.out                                                                         09-11-12 2:41
-rwxr-xr-x 1 skh skh 582423 2009-11-12 02:41 8.out*

这个hello world果然很大

Google GO

Google果然什么都开始搞了,昨儿推出了名为GO的新语言。今天睡觉前小看了一下GO的主页,还是很牛的。Design FAQ对GO的特性介绍的很清楚,GO的很多特性归结出来就是simple,code要simple,interpreter要simple,compiler要simple,debugger也要simple。

AUR上发现有人已经创建了go-lang的包了,于是安装了一下,编译过程果然如广告里介绍的一般,少于10s。不过尝试helloworld居然失败了,fmt package没找到。据说暂时还不支持dymanic linking,一个helloworld会超大,暂时没机会验证一下 =(

skh >>> 8g ./helloworld.go                                                                  09-11-12 2:28
./helloworld.go:3: fatal error: can’t find import: fmt

困死了,改天再看看吧。

大家不要bs菜鸟啊

原帖来自于“围观一个不会在Java里设置User-agent头的“菜鸟”

故事是这样的,1996年的1月,在茫茫的USENET中,有一个不起眼的人物发了一个不起眼的帖子:“Q: Setting User-Agent Field?” 这个人想在Java里设User Agent,如果放到现在,可能最多的回答就是STFG了,可那个时候还没有Google。这个帖子在这里:https://groups.google.com/group/comp.lang.java/t/6923c024ed392c85/ 大家注意一下发贴人,诶,很熟悉吧?于是两年后我们就有了Google.

另外,注意到当时Java还是1.0beta,sun发布java才不到一年。所以说牛人还是有特别的地方的。

题外话,昨天看linuxtoy的文章看到说ck复出了,于是就留意了一下这个ck, 传说中的澳洲猛士Con Kolivas。他归隐了两年后推出了BFS, Brain F*** Scheduler,致力于给低端硬件上的kernel提速。他之前的贡献就是为linux内核提供了Completely Fair Scheduler,代替了之前的O(1) Schedular。其实总结一下就是他很牛x,然后呢他是一个麻醉师,kernel hack只是他的业余爱好。只能说他的业余爱好很好很强大。