学习博客:https://blog.csdn.net/kezhong_wxl/article/details/76573901
官方文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
一、介绍
DFS(Distributed File System)分布式文件系统:管理网络中跨多台计算机存储的文件系统。
Hadoop自带一个HDFS(Hadoop Distributed File System)分布式文件系统。HDFS是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上.
二、假设与设计
- 硬件错误:硬件错误是常态而不是异常。HDFS可能由成百上千的服务器所构成,每个服务器上存储着文件系统的部分数据,需要HDFS有错误检测和快速、自动的恢复。-----最核心架构目标
- 流式数据访问:能够实时的访问数据,运行在HDFS上的应用和普通的应用不同,需要流式访问它们的数据集。HDFS的设计中更多的考虑到了数据批处理,而不是用户交互处理。比之数据访问的低延迟问题,更关键的在于数据访问的高吞吐量
补充:关于数据访问方式,可以参考下面这个博客:
https://blog.csdn.net/HeatDeath/article/details/78986025
- 大规模数据集:运行在HDFS上的应用具有很大的数据集。HDFS上的一个典型文件大小一般都在G字节至T字节
- 简单的一致模型:HDFS应用需要一个“一次写入多次读取”的文件访问模型,一个文件经过创建、写入和关闭之后就不需要改变。
- 移动计算:一个应用请求的计算,离它操作的数据越近就越高效。HDFS为应用提供了将它们自己移动到数据附近的接口。
三、主从架构
有几个概念需要明确:
Namenode
管理节点;管理文件系统的命名空间,维护文件系统树及整棵树内的所有文件和目录;记录每个文件中各个块所在的数据节点信息;
管理文件系统命名空间的主服务器和管理客户端对文件的访问组成;
NameNode执行文件系统命名空间操作,如打开,关闭和重命名文件和目录。它还确定了块到DataNode的映射.何对文件系统名字空间或属性的修改都将被Namenode记录下来
Datanode
工作节点;根据需要存储和检索数据块(受client或namenode的调度),并定期向namenode发送他们所存储的块的列表。
负责提供来自文件系统客户端的读写请求
block
数据库,默认128MB.HDFS上的文件被划分为块大小的多个分块(chunk),作为独立的存储单元。与面向单一磁盘的文件系统不同,HDFS中小于一个块大小的文件不会占据整个块的空间(如:一个1MB的文件存储在一个128MB的块中,文件只使用1MB的磁盘空间,而不是128MB.)
四、数据复制
在HDFS中,它将每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的,为了容错,文件的所有数据块都会有副本。
HDFS中的文件都是一次性写入的,并且严格要求在任何时候只能有一个写入者。
Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。