机架节点是什么意思(机架的组成部分)

Namenode存储元数据元数据保存在内存中保存文件,block,datanode之间的映射。

元数据:数据文件是什么,数据文件分了多少块,每一块存在哪个节点上。

Namenode包括两部分:Fsimage/Editlog

FSimage:用于维护文件系统树以及文件树中所有文件和文件夹的元数据。

包含:文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。

没有记录块存储在哪个数据节点,而是由名称节点把这些映射关系保留在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,以确保名称节点的块映射是最新的。

Editlog:记录了所有针对文件的创建、删除。重命名等操作。

当名称节点启动是,会将FsImage和Editlog在内存中进行合并操作,生成新的FsImage,将旧的FsImage删除掉,重新生成新的Editlog此时Editlog是空的。


问题1:为何要用editlog其实只用FsImage就够了,每次更新的时候直接更新FsImage,那么是不是Editlog就没什么存在的必要了?

实际是不可以的,因为HDFS数据的变化量级是很大的,如果每次变更都直接更新FsImage,那么会导致系统运行非常忙,所以把更新单独记录到Editlog中。

问题2:Editlog会持续不断增大,怎么处理?

此时第二名称节点(SecondartNameNode)起作用了,它一个作用是冷备份,还有个作用就是针对于这个问题处理。

首先:第二名称节点会定期和名称节点通信,请求其停止使用Editlog文件,咱是将变更写到新的文件edit.new文件中,这个操作是瞬间完成的,对于应用是无感的。

其次:第二名称节点用http get请求把第一名称节点中的FsImage和Editlog下载到本地进行合并操作,产生新的FsImage。之后http post回第一名称节点.

最后:第一名称节点启用新生成的FsImage,并将edit.new文件重命名为Edit.log。

Datanode存储数据文件内容文件内容保存在磁盘维护了block id 到datanode本地文件的映射关系

保存方式:

数据冗余保存

1)加快数据传输速度

2)容易检查数据错误

3)保证数据可靠性

数据存放

第一副本:放在上传文件的数据节点

第二副本:放置在于第一副本不通的机架节点

第三副本:与第一副本相同的机架的其他节点上

其他副本:随机节点。

数据读取(就近策略)

客户端读取数据先从namenode获得所读的数据块存在哪个节点上,找到最近的机架节点读取数据。

数据错误与恢复机制

1) 名称节点出错

停止namenode一段时间,将冷备的第二名称节点数据恢复到namenode.(只对于1.0版本有这种问题,2.0之后高可用不会出现这种问题)

2) 数据节点报错

datanode会定期发送心跳信息给namenode如果namenode长时间未收到此nodenode心跳信息,那么会将冗余备份的数据恢复到报错的datanode节点。

3)数据出错

客户端写数据到datanode后,会在相同的目录下写入对应数据的校验码,客户端每次读取数据时会对读取到的数据做校验码计算并和生成的校验码进行对比,check数据是否出错。如果对比不上,那么一样的会把冗余数据覆盖修复报错数据。