Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1067824
  • 博文数量: 83
  • 博客积分: 159
  • 博客等级: 上尉
  • 技术积分: 2221
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 17:08
个人简介

……致我那曾经苦逼的岁月……

文章分类
文章存档

2018年(1)

2017年(7)

2016年(13)

2014年(1)

2013年(12)

2012年(27)

2011年(22)

分类: 服务器与存储

2012-12-07 09:14:03

昨天下午的时候检查生产环境的hadoop集群时,发现异常情况如下图:
简要的说明上图的意思,说明有这些文件没有满足副本份数,我副本份数设置的为2份,刚刚起初以为是这个文件只有一个副本了,结果去每台datanode上面去find第一个上图报的block文件时,每台datanode上都有这个block文件,当时真的是奇了怪了,副本是2(我指的是hdfs-site.xml文件里面设置的),每个datanode上都有这个block文件,我的是三个datanode加起来应该是3份,这个数肯定大于默认的副本数,所以应该也不是报副本份数啊!纠结中!
经过一番的查询资料,看到这篇博客对我的启发很大,地址我引用一下,博主别见怪啊!
里面说到一句话让我尝试了一下
结果我查看了一下我的第一个报的block文件,看看文件的副本数是多少?
hadoop/bin/hadoop fs -ls /tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201207161728_0015/job.jar
Warning: $HADOOP_HOME is deprecated.
Found 1 items
-rw-r--r--   10 hadoop supergroup    3110243 2012-08-17 09:23 /tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201207161728_0015/job.jar
上述的红色字段我已标记出,看来问题出在这里了,我按照如下方法把它设置副本数为3
[hadoop@master ~]$ hadoop/bin/hadoop fs -setrep -R 3 /tmp/hadoop-hadoop/mapred/staging/hadoop/.staging/job_201207161728_0015/job.jar
说明一下上述的命令的意思,3就是副本份数,后面就是hdfs目录的路径,这样就说明把这个目录下的所有文件的副本份数都设置为了3。
再用hadoop/bin/hadoop fsck /查看一下,上述截图的第一个块文件未满足副本份数提示就消失了,依次操作,将所有的文件的份数都设置为3后,最后我们在fsck一下,得到的是下图:
这样就是一个说明集群检查一切正常了!通过上述解决手段,我也大致推理出了fsck的检查工作原理:
它会去检查hdfs文件系统上所有文件的副本份数,然后去和所有datanode节点上的副本块的总数进行比较。不知道推理的对不对,希望知道原理的朋友别吐槽!另外如果你用命令行设置了副本数,再重启hadoop集群的话,那么副本数还是以你设置的hdfs-site.xml文件里面值为准!
在这里我做个小实验,看看效果如何?
过程我就不截图了,说说结果吧!
1、首先我在本地新建一个文件,然后把文件上传到hdfs上。
2、在所有的datanode上找了只有两份副本,因为我hdfs-site.xml文件里面设置的为2。
3、查看hdfs上的文件,副本数的数也为2。
4、将datanode上有副本的文件复制到本节点其余的subdir*目录下,block块文件是4份。
5、我再用fsck查看,仍然没有报有超出的副本文件。
这里我说一下大致原因,当上传一个文件到hdfs文件系统时,它应该有一些相关的信息对应了datanode上的block块文件,因此不会去寻找别的subdir*目录,所以fsck时不会报超出副本的文件。
最后说一下这个hadoop/bin/hadoop fsck /输出的一些信息的大致意思,仅供参考:
Over-replicated blocks:        0 (0.0 %)   副本数高出设定默认复制级别参数的数据块文件所占比率
Under-replicated blocks:       0 (0.0 %)   副本数低于设定默认复制级别参数的数据块文件所占比率
Mis-replicated blocks:         0 (0.0 %)   丢失的副本块文件所占比率
Default replication factor:    2           副本份数
Average block replication:     2.658721    实际平均副本数
Corrupt blocks:                0           损坏的block数
Missing replicas:              0 (0.0 %)   丢失的副本数
Number of data-nodes:          3           数据节点数
Number of racks:               1           机架数,如果没配置机架,默认都是1
FSCK ended at Fri Dec 07 10:18:18 CST 2012 in 113 milliseconds

The filesystem under path '/' is HEALTHY    检测文件系统正常


阅读(15214) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

Bean_lee2013-02-19 23:28:14

虽然我做过一段时间的分布式文件系统的工作,但是Hadoop我并不懂,说是点评,其实是学习。楼主从异常开始,研究了fsck健康检查,这种精神十分让人敬佩。如果说缺点的话,如果能在代码层面讲讲fsck的检查工作原理就更好了。