大数据启蒙-学习Hadoop-HDFS(二)

103 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

架构设计要点

  1. HDFS是一个主从(Master/Slaves)架构
  2. 由一个NameNode和一些DataNode组成
  3. 面向文件包含:文件数据(data)和文件元数据(metadata)
  4. NameNode负责存储和管理文件元数据,并维护了一个层次型的文件目录树
  5. DataNode负责存储文件数据(block块),并提供block的读写
  6. DataNode与NameNode维持心跳,并汇报自己持有的block信息
  7. Client和NameNode交互文件元数据和DataNode交互文件block数据

第4点和第5点说明了HDFS具有负载均衡的设计,如果有1000个文件要存储,它们会排队一个个请求NameNode,NameNode会告诉它们应该储存到哪一个DataNode中,然后它们在去请求分配的DataNode储存数据,不会所有文件都同时集中存储到某一个DataNode。

目录树的优势

举个例子说明一下目录树的优势

Linux系统和Windows的文件系统差异:

Windows系统的分区不好创建,软件程序移动性差,比如说一个程序会将文件固定写入到G盘的temp文件中,如果这个电脑没有G盘,那就很麻烦。在Linux系统中,也有分区,但是这个分区的定义比较弱化。Linux中主要依靠一个目录树维护文件位置,文件夹a的路径是:/root/a,这个路径可能挂载在G分区,也可能挂载在E分区,但是这并不影响使用。

如果程序将文件固定写入到/root/a路径下,如果路径不存在,可以直接创建一个,相对于在Windows中创建一个G盘,就显得简单的多。可以理解成Linux系统中的目录树对硬件分区做了一层映射(解耦)。

架构设计要点描述后,我们可以通过下面一张图来加深理解:划重点了:角色即JVM进程

image.png

NameNode是个进程,在内存中维护了元数据(一棵目录树),集群中会有很多DataNode节点,一般我们说集群数量就是指DataNode数量。

NameNode中维护的元数据里面是文件名name + 路径path的结构,目录树中文件名+路径一定是唯一的。

在NameNode和DataNode中间,会存在Client(客户端)角色,Client向NameNode交互元数据(目录),Client向DataNode读写数据


下面一张图描述了在NameNode维护的元数据中有两个FileName(part-0和part-1),part-0的副本数量是2个,part-1的副本数量是3个,part-0的块id是{1,3}, part-1的块id是{2,4,5}。

image.png

TO BE CONTINUE.