我们的Hadoop版本经历过0.20.X、1.0.3、2.3.0 ,在我手上经历过的主要是1.0.3 和2.3.0的版本,这期间遇到过一些问题,有些是经验不足导致,有些是不按规范操作引起的,有些是版本自身bug,正因为经历了这些问题才丰富了自身经验,今天简单介绍一下这两年多我们遇到过的问题,希望对你能有一些借鉴。
fsimage文件损坏
2012年9月,hadoop集群跨机房迁移,新机房供电不稳,突然掉电(只出现过这一次)导致namenode的fsimage文件损坏,启动namenode失败。想通过secondNamenode还原上个小时的fsimage,发现secondnamenode已经3天不work了,祸不单行。后面没办法只能分析调试源码,发现是hdfs目录树中有叶子目录找不到父节点,导致namenode启动报错,之后通过本地程序调试将游离的叶子删除,正常加载。故障从下午4点持续到晚上10点。惊心动魄!体会:越忙会越乱,越出状况要越冷静!
userlog
用户作业打印了大量system.out,导致磁盘频繁报警。解决方案:通过配置user.log.limit限制每个task的标准输出大小。
公平调度器
新集群统一采用了jdk1.7版本,jdk1.7默认的排序算法为timsort,如果用户同时提交两个资源使用差不多的作业,公平调度无法比较这两个作业的优先级,直接进入死循环判断,导致调度器不work。解决方案:将jobtraker的jdk 降回1.6。有兴趣的同学可以自行去研究下timsort算法。
jobTraker堆栈溢出
在hadoop 1.0中jo