一、认识HDFS

1.分布式文件系统

当单台服务器的存储量和计算性能已经无法处理超大文件时,分布式文件系统应用而生。为存储超大文件,可将文件切分为很多“块”,并将其均匀的存储在多台服务器上,然后通过一套系统来维护这些“块”。当用户需要访问时,该系统将后台多个服务器上存储的“块”临时拼装,并返回给统一的客户端,用户就像是操作一台计算机一样访问该超大文件,这套系统就是“分布式文件系统”。

  HDFS是基于流式数据访问模式,流式数据就是将数据序列化为字节流。HDFS中存放的数据一定是流式数据,是可序列化和反序列化的数据。HDFS是不支持存储和访问非序列化的数据的。HDFS将超大文件序列化为字节的序列或者字节数组来存储,这样不会破坏文件存储结构。

2.HDFS优势

存储非结构化数据的hadoop数据库 hdfs存储非结构化数据_HDFS

 3.HDFS局限性

存储非结构化数据的hadoop数据库 hdfs存储非结构化数据_HDFS_02

 二、HDFS核心设计

1.数据块

数据块是HDFS上存储数据的基本单位,通常Hadoop1.0,HDFS数据块大小为64MB,到了2.0后升级到了128MB,并且如果一个数据块没有被存满,还可继续使用其剩下的空间。

2.数据块复制

为提升HDFS可靠性,创建了多份数据块副本(针对同一数据),并将其放在集群DataNode节点上,一般复制系数是3,可以通过hdfs-site.xml进行复制系数的设置。(后期添加Code)

3.数据块副本的存放策略

1)第1个副本放在客户端所在的DataNode中 

2)第2个副本放在与第1个副本不同机架的DataNode中

3)第3个副本放在与第2个副本相同机架的不同DataNode中

存储非结构化数据的hadoop数据库 hdfs存储非结构化数据_HDFS_03

 4.负载均衡

当HDFS负载不均衡时,需要对HDFS进行数据的负载均衡调整,即对各节点机器上数据的分布式存储进行调整,从而让数据均匀的分布在各个DataNode节点上,均衡I/O性能。·

5.心跳机制

HDFS集群之间的节点是通过心跳机制实现通信的。HDFS是主从架构,其主节点上的守护进程是NameNode和ResourceManager,在从节点上的守护进程是DataNode和NodeManager,主节点在启动时会开启一个进程间的通信服务(IPC)等待从节点的链接。从节点启动后会主动连接IPC服务,并每隔3秒连接一次,该时间可以调整,即设置心跳时间。从节点通过心跳向主节点汇报自己的信息,主节点通过心跳向从节点下达命令。NameNode通过心跳得知DataNode的状态信息,ResourceManager通过心跳得知NodeManager的状态。如果主节点长时间没有受到从节点的心跳信息,主节点就认为从节点已失效,就被定义为“dead node”。NameNode会检查dead node中的副本数据,复制到其他的DataNode中。