回味经典--HDFS文件系统设计
概览:The Hadoop File System简称HDFS,是设计用于进行分布式的高可靠性的并且有着大带宽IO需求的文件存储系统。成千上万台的计算机可以加入到HDFS系统,并且存储成本不会因为扩容而降低他的性价比。
1.简介
Hadoop为MapReduce算法提供了一个大数据分布式存储框架。Hadoop框架一个非常重要的性质是把数据进行了切分并存储到了很多的服务器上,并且会在这些机器上进行并行计算。这样的话可以让运算贴近存储。
2.组成架构
NameNode(管理节点)
在NameNode上存储有元数据以及文件系统树。
在进行数据读取时,首先会连接到namenode节点,查询距离客户端最近的文件存储datanode。然后再从距离最近的datanode节点获取数据。
在进行数据写入时,客户端会让namenode分配3个节点(默认可调整)来对数据进行存储。这个存储的过程是一个流水线的工作形式。
块与DataNode地址的映射表:该信息不会在checkpoint中记录,因为块地址可能经常会变化
image:namespace镜像文件
checkpoint:对image的持久化记录,存在本地文件系统中
journal:image的修改日志,存在本地文件系统中
DataNode(工作节点)
每份在DataNode上的数据副本文件由两部分组成。第一部分是数据本身,另外一份是计算校验和(checksum)和block的生成水印。另外在HDFS系统中,如果数据没有装满一个block的话那么这个block就会是真实的数据大小而不是一个完整的Block的大小。当datanode与namenode进行通信时,会进行一次握手校验,用于判断datanode是否属于本集群以及校验软件的版本。需要两个都满足才会进行后续的操作。
在经过验证之后会进行常规的操作。NameNode与DataNode每3秒会做一次心跳检测,用于验证datanode是否还可用。如果10分钟后都没有收到回复,那么就认为这个DataNode不可用,然后NameNode会把这个节点上面的数据副本重新安排存储到其他的datanode上。
HDFS客户端
与大多数的传统数据文件系统相似,HDFS也支持对文件的读,写,删除操作。
当从客户端进行数据写入时,namenode会首先把数据写入到一个DataNode,然后把这份数据托付给这个DataNode,后续这个DataNode会递归地进行数据写入。
3.副本管理
Block的放置
在一个巨大的HDFS集群中,倾向于把同一份数据的不同副本放置到不同的Rack(机柜)中。
在HDFS中,1个网络距离是从一个节点到父节点的距离。计算两个节点的距离,可以通过计算他们到他们的共同父节点的距离之和。
在默认的副本管理策略里面可以很好地去平衡数据可靠性与数据读写速度。第一副本会放在Client所在的节点,然后剩余的两个副本会被随机地安放在不在同一个Rack的节点里面。
集群网络拓扑结构
- 点赞
- 收藏
- 关注作者
评论(0)