HDFS架构图(Hadoop distribute File System)





image.png



NameNode 介绍

Namenode 是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问

文件操作,NameNode 负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈。

副本存放在哪些DataNode上由 NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带块消耗和读取时延

Namenode 全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表

查看HDFS块文件

/opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-1921057509-192.168.57.129-1517160177567/current/finalized

说明:BP:表示块池子





image.png



可以使用more命令查看块文件中的数据。
meta结尾的数据表示元数据文件,这就是hdfs真正的存储结构

DataNode

一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳

DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。

集群运行中可以安全加入和退出一些机器(对现有集群没有影响)

HDFS文件

文件切分成块(默认大小128M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)

NameNode 是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等

DataNode 在本地文件系统存储文件块数据,以及块数据的校验和

可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容

Data Replication 文件复制





image.png



说明:
part-0 :一个文件
{1,3}:文件被拆分为2个块为1和3
r:2:复制两份。

解释:
For the common case, when the replication factor is three, HDFS’s placement policy is to put one replica on one node in the local rack, another on a different node in the local rack, and the last on a different node in a different rack. This policy cuts the inter-rack write traffic which generally improves write performance. The chance of rack failure is far less than that of node failure; this policy does not impact data reliability and availability guarantees. However, it does reduce the aggregate network bandwidth used when reading data since a block is placed in only two unique racks rather than three. With this policy, the replicas of a file do not evenly distribute across the racks. One third of replicas are on one node, two thirds of replicas are on one rack, and the other third are evenly distributed across the remaining racks. This policy improves write performance without compromising data reliability or read performance. 搜索网络
对于一般情况,当复制因子为3时,HDFS的放置策略是在本地机架的一个节点上放置一个副本,在本地机架中的另一个节点上放置另一个副本,在不同的网络上放置一个副本。此策略不会影响数据的可靠性和可用性。但是,它确实减少了读取数据时使用的聚合网络带宽,因为一个块只放在两个唯一的机架上,而不是三个。使用此策略,文件的副本不会均匀分布在各个机架上。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,另三分之一的副本位于一个机架上。此策略在不影响数据可靠性或读取性能的情况下提高写入性能。

机架:简单理解是一个交换机连接的所有服务器叫做一个机架

数据损坏的处理

步骤1

DataNode读取block的时候,它会计算checksum

步骤2

如果计算后的checksum,与block创建时值不一样,说明该block已经损坏

步骤3

Client读取其它DateNode上的block

步骤4

NameNode标记该块已经损坏,然后复制block达到预期设置的文件备份数

步骤5

DataNode 在其文件创建后三周验证其checksum