首先说明:
HDFS就是一个分布式文件系统
一般讲集群都是主从结构,不管你是hdfs还是mapreduce集群框架,都是有一个主多个从。
在hdfs里面,namenode就是主,datanode就是从,hdfs还有一个secondarynamenode,
这个就是一个镜像文件可以做数据的备份。
缕缕流程
client提交了一个任务,首先呢namenode看那些兔崽子datanode闲的蛋疼,然后就把这些数据往这个
闲的蛋疼的namenode节点上进行写。
在hadoop1.0中namenode有当爹又当妈实在是累。它管理着整个文件系统的一个命名空间,namenode的元信息都是存在内存中的,当然namenode的元数据它也会往磁盘上去存。还有一个就是元信息里面有两类很重要的数据,第一个就是 文件名到block,第二个就是block到datanode。我们操一个文件的时候不会关心是哪一个block,但是实质上这些block是切分好并且散落在不同的机器上的,namenode会帮你根据文件名映射出它背后的block。从这里就可以很显著的看出hadoop1.0中hdfs的namenode弊端了。而且也能看出hdfs不适合存大量的小文件。
namenode中的信息是存在两个地方的:一个存在内存里,还有一个就是一模一样的数据它存在本地磁盘中。
这个数据备份叫fsimage。就靠它自己也不行,会有东东定时把它持久化到edits logs里面去。 它只持久化那些已经修改的数据,如果你不用它也不会出来,这个东西时间久了也会定期往fsimage里面写。fsimage多了如果想合并的话那的依靠secondarynamenode去做了。
了解到实际工作中多是机器感知这样做备份。对于数据完整性做一个crc32校验。