HDFS架构设计及副本放置策略

版本一

1.HDFS是一个主从架构,NameNode是老大,SecondaryNameNode是老二,老大挂了,老二会直接顶上去
2.RACK机架
下面这个图就是RACK机架,用来放服务器的,每台机架上可以放置多台服务器

rack.jpg

下面我们看下HDFS架构图
hdfs_.png

1. NN 名称节点

主要作用:管理文件系统的命名空间
主要存储:文件系统的命名空间,包含:
a.文件名称
b.文件目录结构
c.文件的属性(例如 权限,创建时间,副本数)
d.文件哪些块(副本块),以及块对应哪些DN节点上;不会持久化这个map映射关系,一般是集群启动和运行时,dn定期发送给blockreport 给nn,那么nn就在内存中动态维护映射关系

2 DN 数据节点

主要作用:读写文件的数据块
主要存储:数据块、数据块校验
与NN通信:
a.每隔3秒发一次心跳包给 nn(如下图)


a.png

b.默认每隔6小时发送一次blockreport 块报告(如下图)


b.png

3 SNN 第二名称节点

高可用的时候处于standby
主要作用:定期合并nn节点上的fsimage+editlog为新的fsimage,然后推送给nn
,也称之为检查点 checkpoint

触发条件(满足下面一个条件就会触发):
1)每隔1小时
2)每100万次操作动作


3.png

3.1 checkpoint执行过程:
假设NN有如下的edits和fsimage
edits_0000000000000000557-0000000000000000558
edits_0000000000000000559-0000000000000000560
edits_inprogress_0000000000000000561
fsimage_0000000000000000558
fsimage_0000000000000000558.md5

1.snn 会通过get请求把edits_0000000000000000559-0000000000000000560和fsimage_0000000000000000558下载到snn节点
2.然后合并为新的simage_0000000000000000560文件
3.再把新的simage_0000000000000000560推送到nn

然后nn下面的edits和fsimage就变成了
edits_0000000000000000557-0000000000000000558
edits_0000000000000000559-0000000000000000560
edits_inprogress_0000000000000000561
fsimage_0000000000000000558
fsimage_0000000000000000558.md5
simage_0000000000000000560
simage_0000000000000000560.md5


33.png

4 副本放置策略

第一个副本:
如果提交节点为DN,那么直接自己写一份,否则随机挑选一个cpu不太慢,不太忙的节点上

第二个副本:
放置于与第一个副本不同机架的几点上

第三个副本:
放置于与第二个副本同机架不同的节点上

生产上,考虑把副本数设置为2 的情况:
1.存储空间不够
2.数据两增长太快

对于历史数据可以迁移到阿里云的oos进行存储
到时候访问可以通过 hdfs dfs -ls oos://hadoop001:9000/

转载自https://guguoyu.blog.csdn.net/article/details/97915678


版本二
HDFS架构设计及副本放置策略

HDFS主要由3个组件构成,分别是NameNode、SecondaryNameNode和DataNode,HSFS是以master/slave模式运行的,其中NameNode、SecondaryNameNode 运行在master节点,DataNode运行slave节点。

NameNode和DataNode架构图
image.png

NameNode(名称节点)
存储:元信息的种类,包含:

  • 文件名称
  • 文件目录结构
  • 文件的属性[权限,创建时间,副本数]
  • 文件对应哪些数据块–>数据块对应哪些datanode节点
  • 作用:
  • 管理着文件系统命名空间
  • 维护这文件系统树及树中的所有文件和目录
  • 维护所有这些文件或目录的打开、关闭、移动、重命名等操作

DataNode(数据节点)
存储:数据块、数据块校验、与NameNode通信
作用:

  • 读写文件的数据块

  • NameNode的指示来进行创建、删除、和复制等操作

  • 通过心跳定期向NameNode发送所存储文件块列表信息

  • Scondary NameNode(第二名称节点)
    存储: 命名空间镜像文件fsimage+编辑日志editlog
    作用: 定期合并fsimage+editlog文件为新的fsimage推送给NamenNode

    副本放置策略

image.png

第一副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一台磁盘不太慢、CPU不太忙的节点上
第二副本:放置在与第一个副本不同的机架的节点上
第三副本:与第二个副本相同机架的不同节点上
如果还有更多的副本:随机放在节点中

转自:https://ruozedata.github.io/2018/03/30/HDFS%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%8F%8A%E5%89%AF%E6%9C%AC%E6%94%BE%E7%BD%AE%E7%AD%96%E7%95%A5/


版本三
image

图1 HDFS存储架构图

从图1可以看出,HDFS采用主从架构(Master/Slave架构)。HDFS集群分别是由一个NameNode和多个的 DataNode组成。其中,NameNode是HDFS集群的主节点,负责管理文件系统的命名空间以及客户端对文件的访问;DataNode是集群的从节点,负责管理它所在节点上的数据存储。HDFS分布式文件系统中的NameNode和DataNode两种角色各司其职,共同协调完成分布式的文件存储服务。

那么,NameNode是如何管理分布式文件系统的命名空间呢?其实,在NameNode内部是以元数据的形式,维护着两个文件,分别是FsImage镜像文件和EditLog日志文件。其中,FsImage镜像文件用于存储整个文件系统命名空间的信息,EditLog日志文件用于持久化记录文件系统元数据发生的变化。当NameNode启动的时候,FsImage镜像文件就会被加载到内存中,然后对内存里的数据执行记录的操作,以确保内存所保留的数据处于最新的状态,这样就加快了元数据的读取和更新操作。

随着集群运行时间长,NameNode中存储的元数据信息越来越多,这样就会导致EditLog日志文件越来越大。当集群重启时,NameNode需要恢复元数据信息,首先加载上一次的FsImage镜像文件,然后在重复EditLog日志文件的操作记录,一旦EditLog日志文件很大,在合并的过程中就会花费很长时间,而且如果NameNode宕机就会丢失数据。为了解决这个问题,HDFS中提供了Secondary NameNode(辅助名称节点),它并不是要取代掉NameNode也不是NameNode的备份, 它的职责主要是是周期性的把NameNode中的EditLog日志文件合并到FsImage镜像文件中,从而减小EditLog日志文件的大小,缩短集群重启时间,并且也保证了HDFS系统的完整性。

Namenode存储的是元数据信息,元数据信息并不是真正的数据,真正的数据是存储在DataNode中。DataNode是负责管理它所在节点上的数据存储。DataNode中的数据块是以文件的类型存储在磁盘中,其中包含两个文件,一是数据本身(仅数据),二是每个数据块对应的一个元数据文件(包括数据长度,块数据校验和,以及时间戳)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容