目录

第五章 Hadoop的设计思想

5.1 HDFS和HDFS设计思想

5.1.1 分而治之

5.1.2 备份机制

5.2 HDFS的整体架构

5.2.1 主节点(NameNode)

5.2.2 从节点(DataNode)

5.2.3 冷备份节点(SecondaryNameNode)

5.3 HDFS的优缺点


第五章 Hadoop的设计思想

上一章提到过,Hadoop由Common、HDFS、MapReduce、YARN组成,分别对以上模块加以说明。

5.1 HDFS和HDFS设计思想

HDFS是分布式文件系统,其核心设计思想是“分而治之”“备份机制”

5.1.1 分而治之

即切分存储。当一个文件过大的时候,一个节点存储不了,将文件切分成块后,分块存储,每个块叫Block。

比如:在一主四从的情况下,如何存储8T数据?

解决方法:8T数据分成两个Block,每个Block的大小为4T。这会导致集群中4个节点,有两个节点闲着没事儿干。

上面的解决方式是不科学的,会造成负载不均衡。所以Hadoop中,默认切分块的大小是128M(Hadoop 2.0),64M(Hadoop 1.0)。

根据以上规则,若要存储一个300M的文件,则会分为0~127M、128~255M、256~300M三块,并随机存储在DataNode中。如果一个文件不足128M,也会单独存成一个块,该块的大小就是实际存储数据的大小。

分块思想虽然满足了负载均衡,但如果有一个块的存储节点宕机,数据的完整性得不到保证,所以产生第二个思想——备份机制。

5.1.2 备份机制

HDFS中默认块的存储采用备份机制,默认的备份个数是3个。可通过hdfs-site.xml中的dfs.replication属性修改,如:

<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

当备份数是3时,原始数据1个,备份2个,一共3个。所有的备份地位相同,没有主次之分。备份与原始数据一定存储在不同的节点上。说白了,怕宕机丢数据呗。

举几个场景,说明HDFS的备份机制。

场景1:若从节点(DataNode)总共2个,但将备份数配置为:dfs.replication=3,这时文件在HDFS上如何存储?

分析解释:因为备份和原始数据一定存储在不同的节点上,所以在这种情况下,实际只存储2个,另一个进行记账(登记),当集群节点个数大于等于3的时候会进行复制这个副本,最终达到3个。

场景2:假设集群中有从节点(DataNode)4个,设定副本有3个。

(1)若有一个存储副本的机器宕机了,HDFS将如何处理?

此时副本个数小于设定的备份个数,HDFS会进行自动复制,达到3个副本。

(2)刚刚带副本的机器修好了,又能用了,HDFS将如何处理?

宕机若修好了,副本数变为4个。此时集群在等待一段时间后,如果发现副本数仍然是4个,则会删除一个副本。

(3)备份数是越多越好么?

分析解释:备份越多,数据安全性越高。但是副本数据越多,也会占用过多的存储资源,同时集群的维护成本也变高。比如:100个节点,50个副本,HDFS同时维护50个副本,这50个副本的机器,随时可能发生宕机。带副本的机器宕机,又要复制副本;机器修好重启,又要删除副本;反反复复,无情 & 浪费。

所以一般配3个副本即可,差不多得了。HDFS设计原本就是基于廉价的PC机,能保护随时宕机数据有保障就行了。要是老宕机还是换个机器吧,不要挣扎了。

(4)影响HDFS负载均衡的因素有哪些?

解释分析:

1)各节点上承担的数据计算压力是否均衡,包括:块的大小,所有块的副本是否分布均匀。

2)还与各个节点的硬件配置有关。

以上就是HDFS的设计思想:分块存储 & 备份机制

HDFS在实际存储时,对于纯新的集群,NameNode采用轮询方式存储(轮询DataNode),旧集群靠NameNode随机分配DataNode方式存储。HDFS是硬盘存储

5.2 HDFS的整体架构

架构:主从结构(以一主多从为例)

5.2.1 主节点(NameNode)

NameNode主要负责:

(1) 用于存储元数据,包括:抽象目录树、存储数据和数据块(Block)的对应关系、数据块(Block)存储在从节点(DataNode)的实际位置。

a) 抽象目录树:HDFS的目录结构和Linux操作系统的类似,以“ / ”为根节点。之所以称为抽象目录树,因为该目录结构代表的是所有数据节点,不代表任何一个具体的节点。如:/hadoop.zip

b) 数据与Block的映射关系:存储的数据块是有编号的,比如:blk_1、blk_2、blk_3;HDFS底层存储数据时,每个Block都有一个唯一的ID。

c) Block的实际位置:HDFS底层存储的时候,是存储在真正的物理节点上,是硬盘存储。所以还需要记录Block存储的位置。

(2) 处理客户端的读写请求,读(下载)、写(上传)。

5.2.2 从节点(DataNode)

DataNode主要负责:

(1) 负责真正的数据存储,存储数据的Block

(2) 负责读写功能,磁盘IO

5.2.3 冷备份节点(SecondaryNameNode)

SecondaryNameNode也叫助理节点,秘书节点,主要负责:

(1) 当NameNode宕机的时候,SecondaryNameNode不能主动切换为NameNode。但其中存储的数据和NameNode中的数据“相同”,其作用是当NameNode宕机时,可帮助NameNode恢复元数据。

(2) 帮助NameNode做一些事情,分担一些压力。

5.3 HDFS的优缺点

优点:

(1) 可建立在廉价的机器上,成本低,使得中小型企业也可以搞大数据

(2) 高容错性,一个节点数据丢失不影响整体性能

(3) 适合离线数据的处理(批处理);适合大数据处理

(4) 适合一次存储,多次读取的场景

缺点:

(1) 不支持低延迟的数据访问,不适合实时数据处理

(2) 不擅长存储大量的小文件(KB级别的)

造成元数据存储过大,造成NameNode压力;元数据在HDFS中一般是150byte左右,并存在NameNode的内存中

(3) 流式文件访问,不支持文件修改,对修改关闭