大数据初体验之概念篇(3)

接触到了HDFS架构,不得不说大数据的出现提高了处理日益增长的数据量,也就是TB级以上的数据的效率。具体概念见下文。


一、元数据块是什么?

首先说明一下元数据的概念:元数据是用于描述要素、数据集或数据集系列的内容、覆盖范围、质量、管理方式、数据的所有者、数据的提供方式等有关的信息。更简单的说,是关于数据的数据。

元数据块就是海量数据进行处理后,形成的带有标识的数据的数据。海量数据通过HDFS处理形成元数据块,标识后形成储存数据的侧盘块。

二、数据块是什么?

数据块是一组或几组按顺序连续排列在一起的记录,是主存储器与输入设备、输出设备或外存储器之间进行传输的数据单位。数据块也是物理 I/O 的单元。同时是磁盘读写的最小单位。

三、读写策略

大数据初体验之概念篇(3)

如图所示,

1、客户端调用Fi leSystem 实例的create方法,创建文件。NameNode 通过一些检查,比如文件是否存在,客户端是否拥有创建权限等;通过检查之后,在NameNode 添加文件信息。注意,因为此时文件没有数据,所以NameNode 上也没有文件数据块的信息。
2、创建结束之后, HDFS 会返回一个输出流DFSDataOutputStream 给客户端。
3、客户端调用输出流DFSDataOutputStream 的write方法向HDFS 中对应的文件写入数据。
4、数据首先会被分包,这些分包会写人一个输出流的内部队列Data 队列中,接收完数据分包,输出流DFSDataOutputStream 会向NameNode 申请保存文件和副本数据块的若干个DataNode , 这若干个DataNode 会形成一个数据传输管道。DFSDataOutputStream 将数据传输给距离上最短的DataNode ,这个DataNode 接收到数据包之后会传给下一个DataNode 。数据在各DataNode之间通过管道流动,而不是全部由输出流分发,以减少传输开销。
5、因为各DataNode 位于不同机器上,数据需要通过网络发送,所以,为了保证所有DataNode 的数据都是准确的,接收到数据的DataNode 要向发送者发送确认包(ACKPacket ) 。对于某个数据块,只有当DFSDataOutputStream 收到了所有DataNode 的正确ACK. 才能确认传输结束。DFSDataOutputStream 内部专门维护了一个等待ACK 队列,这一队列保存已经进入管道传输数据、但是并未被完全确认的数据包。
6、不断执行第3 - 5步直到数据全部写完,客户端调用close关闭文件。

7、DFSDataInputStream 继续等待直到所有数据写人完毕并被确认,调用complete方法通知NameNode 文件写入完成。NameNode 接收到complete消息之后,等待相应数量的副本写入完毕后,告知客户端。

注:读写策略部分非原创,为借鉴较为成熟的理论描述。
四、HDFS架构

大数据初体验之概念篇(3)
由这幅官网提供的图片我们可以看出,一个HDFS文件系统包括一个主控节点Namenode和一组至少两个的Datanodes从节点。
Namenode作为主服务器来管理整个文件系统的命名空间和元数据,以及处理外界的文件访问请求。Namenode保存了文件系统的三种元数据:

1)命名空间:即整个分布式文件系统的目录结构

2)数据块与文件名的映射表

3)每个数据块副本的位置信息,每一个数据块默认有三个副本。

NameNode上可以执行文件操作,比如打开、关闭、重命名等;而且NameNode负责DataNode分配数据块并建立数据块和DataNode的对应关系
—DataNode 负责处理文件系统用户具体的数据读写请求,同时也可以处理NameNode 对数据块的创建、删除副本的指令。

        —典型的部署模式采用NameNode单独运行于一台服务器节点上,其余的服务器节点,每一台运行一个DataNode