目录
1.HDFS基础
- 数据块(BLOCK)
HDFS默认的最基本的存储单位是数据块(Block),默认块大小是64MB。
- 元数据节点(NameNode)
NameNode的职责是管理文件系统的命名空间,他将所有的文件和文件夹的元数据保存在一个文件系统树里,如一个文件包括哪些数据块,这些数据块分布在哪些数据节点上,这些数据都要存储下来。
- 数据节点(DataNode)
DataNode是文件系统中真正存储数据的地方,一个文件被拆分成对个Block后,会将这些Block存储在对应的数据节点上。客户端向NameNode发起请求,然后到对应的数据节点上写入或读出对应的数据Block。
- 从元数据节点(Secondary NameNode)
Secondary NameNode 并不是NameNode节点出现问题时的备用节点,他和元数据节点分别负责不同的功能。其主要的功能就是周期性的将NameNode的namespace image和edit log合并,以防日志文件过大。合并后的namespace image也在元数据节点保存了一份,以防在NameNode失效的时候进行恢复。
2.HDFS架构
- 概述
HDFS采用master/slave架构。一个HDFS集群由一个NameNode和一定数量的DataNode组成。NameNode是一个中心服务器,负责管理文件系统的命名空间(namespace)以及客户端对文件的访问。集群中的DataNode一般输一个节点对应一个,负责管理他所在节点上的存储数据。HDFS暴露了文件系统的命名空间,用户能够以文件的形式在上面存储数据。
从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组的DataNode上。NameNode执行文件系统的命名空间操作,比如打开,关闭,重命名文件或目录。他也负责确定数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的读写请求,在NameNode的同一调度下进行数据块的创建删除和复制。
- 架构组件功能
NameNode和DataNode被设计成可以在普通的商用机器上运行,这些机器一般云形成GNU/Linux操作系统。由于采用了可以执行极强的Java语言,HDFS可以部署到多种类型的机器上,任何支持Java的机器都可以部署NameNode和DataNode。(一个典型的部署场景时一台机器上只运行一个NameNode实例,而集群中的其他机器分别运行一个DataNode实例。)
文件系统的命名空间:HDFS支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统的命名空间的层次结构大多数现有的文件系统类似,用户可以创建删除移动和重命名文件。当前,HDFS不支持用户磁盘配额和访问权限控制,也不支持硬链接和软链接。但是HDFS架构并不妨碍对这些特性的实现。
NameNode负责维护文件系统的命名空间,任何对文件系统命名空间或属性的修改都将被NameNode记录下来。应用程序可以设置HDFS保存的文件的副本数目,文件副本的数目称为文件的副本洗漱,这个信息也是由NameNode保存的。