HDFS的架构说明

NameNode
NameNode是HDFS架构中的主节点(Master)。HDFS架构中只有一个NameNode。NameNode主要负责管理HDFS的元数据,配置副本的放置策略,处理Client请求。

Client
Client主要负责切分文件,与各节点进行交互。
切分文件是把文件分割成数据块(Block)。数据块默认大小是128M,每个数据块有多个副本存储在不同的机器上,副本数可在文件生成时指定 (默认有3个副本)。
交互包括与NameNode进行交互,Client从NameNode获取文件的元数据;从DataNode读取数据和向DataNode写入数据。
元数据是指描述数据属性的数据。数据属性包括存储位置、格式、权限、大小、历史版本等。

为什么HDFS会以文件块的方式来存储数据:

(1)一个文件有可能大于集群中任意一个磁盘,引入块机制可以很好的解决这个问题

(2)使用块作为文件存储的逻辑单位可以简化存储子系统

(3)块非常适合用于数据备份进而提供数据容错能力

(4)副本优点是安全,缺点是占空间

每一个块默认的大小为128M,是可以更改配置的:(这里块的大小以128M为例子,128M为134217728字节)

<property>
 <name>dfs.blocksize</name>
 <value>134217728</value>

</property>       

注意当一个文件的大小不足128M时,比如文件大小为2M,那么这个文件也占用一个block,但是这个block实际只占2M的空间,所以从某种意义上来讲,block只是一个逻辑单位。

DataNode
DataNode是HDFS架构中的从节点(Slave)。DataNode负责存储Client发来的数据块,执行数据块的读写操作,汇报存储信息给NameNode。

Secondary NameNode
SecondaryNameNode主要是用来进行镜像备份,对NameNode中的edits文件与fsimage文件进行定期合并。镜像备份是指备份fsimage文件。

心跳机制:

Datanode和Namenode一直保持的心跳连接:每隔一定时间都会向Namenode发送数据包

主要目的:

(1)告知Namenode,只要心跳不停止,认为Datanode一直是存活的状态,一旦停止后,先认为其假死,然后等待一会,如果依然不发送数据,认为真的宕机。

(2)向Namenode报告自己Datanode的块信息,让Namenode时刻更新每个Datanode的block信息。其中block信息是由每个Datanode来存储的,Namenode只是临时存储,每次启动,Datanode都需要重新报告自己所有块信息。

负载均衡机制:

Namenode要保证所有的block块在每个Datanode中存储的数量都是均衡的。

副本机制:

为了防止数据丢失,每个block块都要构建副本,默认情况下HDFS的副本数据为3个。

如果Namenode检测到某一个block副本数量不足3个,此时会自动进行维护block块,自动新增副本,保证为3个,如果检测到block副本数量大于3个,此时Namenode通知对应Datanode删除多余block块。

每一个block块的副本最多和Datanode的节点相等,副本越多,表示数据的可靠性越高,但是对磁盘的消耗比较大。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值