HDFS的架构设计

HDFS为是Apache Hadoop Core项目的一部分,是Hadoop的核心项目,今天我们就来讨论以下关于HDFS架构设计问题。

分布式

既然HDFS标榜为一个分布式文件系统,那首要解决的就是分布式的问题。分布式,简单来说就是分布在各个节点,这些节点可能在不同的主机上,也可能在不同的数据中心,甚至还可能跨地区,跨国度。各节点之间通过网络来进行信息交互。DHFS通过Namenode和Datanode来实现分布式,Namenode在一个节点,Datanode在不同节点,Namenode通过网络与Datanode来进行数据交互,来管理整个HDFS文件系统。

健壮性

一个文件系统好不好,首要的就是它能否稳定可靠地将数据存储起来,以供后续利用,是评价一个文件系统首要的指标。

容错性

在分布式集群面前,硬件或网络方面的错误将是常态而非异常情况,因此要提高整个系统的健壮性,就必须充分考虑到这些故障问题。HDFS对每个数据块都采用了多副本机制,默认的副本系数为3,意思就是,同一个数据块,有三个相同的副本,分别存储在不同的Datanode上,且HDFS采用了机架感知策略来优化副本的存放,一般的方式是:将两个副本存放在同一机架上的不同Datanode上,另一个副本放在另一个机架上的Datanode上,这样某个Datanode出现故障,甚至某个机架出现故障,依然不会造成数据的丢失或无法访问。
每个Datanode都会定期向Namenode发送心跳包,如果由于网络或系统出现问题,部分Datanode长时间没有发送心跳包,就表明此Datanode出现问题,Namenode就将此Datanode标记为宕机,将不再将IO请求发送给此Datanode,与此Datanode相关的数据块将不再有效,相关块的副本系数也将减小,从而便于后续的副本复制。

数据完整性

数据块在传输或存储过程中,出现错误的情况必然会出现,对于这种问题,HDFS提供了校验功能,在数据块存储后,会对数据采用CRC32进行校验,并记录其校验值,在客户端读取前,会对数据进行校验,如果检验失败,则表明该数据块出错,于是就进行以下步骤:
1. 客户端将出错的块连同所在的Datanode报告给Namenode
2. Namenode将此块标记为损坏,这样防止下次再去读取此块,也不会再复制此块到其他Datanode
3. Namenode将此块的副本系数减一,以便于后续复制新的块到其他Datanode
4. Namenode将此处错的块删除。
通过以上四个步骤,基本保证了数据的完整性与可靠性。

海量存储

HDFS的上层应用往往都是具有很大的数据集,因此支持海量存储对HDFS来说,是非常必要的。HDFS在存储数据之前,会将数据进行切分成一个个较小的块,默认每个块的大小为64MB,这样的实现方式,只要节点足够多,再大的文件,也可以被存放在HDFS里面,而不用担心由于单机文件系统大小的限制或硬盘大小的限制从而造成的无法存储的情况。

简单性

HDFS对数据切分,副本复制,数据完整性校验等的一系列操作,对用户来说,是完全透明的,用户在存储文件过程中,感觉和在一台机器上存储文件一样,完全不用担心额外的问题。
HDFS采用的是“一次写入,多次读取”的简单模型,且采用流式的数据访问方式,采用批处理方式,而非交互式的数据访问方式。

智能性

集群均衡

当某个Datanode上的存储容量低于某个临界值时,按照相应的均衡策略,系统会自动的将数据移动到其他空闲的机器上,从而实现整个集群里面的数据存储均衡。

智能扩容

由于集群均衡策略的存在,从而可以智能的进行Datanode的扩容,而不用担心扩容和数据的迁移与均衡问题。

安全模式

Namenode会在启动时,进入称之为安全模式的特殊状态,处于安全模式时,Namenode不进行数据快的复制,而是根据Datanode发来的心跳信号和状态报告中,确定每个数据块的副本系数,从而便于安全模式退出后,副本的复制。

高性能

副本的选择

为了提高数据读取性能,HDFS会优先让读取程序读取离读取程序最近的Datanode,如果同一机架上有,则就读取同一机架上的副本,总之,副本的选择符合“就近原则”。

缓存

当客户端在写入数据时,开始会先写入到本地的临时文件夹中缓存起来,当临时文件大于一个块的大小时,客户端才会联系Namenode,Namenode分配Datanode数据块和目标数据块,然后客户端会将本地的临时文件上传到指定的Datanode的数据块上,以此循环,直到文件存储完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值