Hadoop2系列才有的思想,Hadoop1系列设计比较冗余

文件系统

NameNode

1.NameNode是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问;

2.副本存放在哪些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带块消耗和读取时延;

3.NameNode全权管理数据块的复制,它周期性地从集群中的每个DataNode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意外着该DataNode节点工作正常。块状态报告包含了一个该DataNode上所有数据块的列表;

4.文件操作。NameNode 负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈。

DataNode

1.一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据(数据块的长度、校验和、时间戳);

2.DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

3.心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。

4.集群运行中可以安全加入和退出一些机器

Block

1.文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)

2.NameNode 是主节点,存储文件的元数据如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限),以及每个文件的块列表以及块所在的DataNode等等

3.DataNode 在本地文件系统存储文件块数据,以及块数据的校验和

4.可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。

数据损坏(curruption)处理

1.当DataNode读取block的时候,它会计算checksum

2.如果计算后的checksum与block创建时值不一样,说明该block已经损坏。Client读取其它DN上的block。

3.NameNode标记该块已经损坏,然后复制block达到预期设置的文件备份数

4.DataNode 在其文件创建后三周验证其checksum