昨天下午的时候检查生产环境的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 检测文件系统正常
阅读(15401) | 评论(1) | 转发(1) |