HDFS架构

1.来源

HDFS来源于Google在2003年10月份发表的FGS论文:《The Google File System》,HDFS是GFS克隆版。HDFS的全称是Hadoop Distributed File System。它是易于扩展的分布式文件,运行在大量的普通廉价机器上,提供了很好的容错机制。能够为大量用户提供新能不错的文件存取服务。

2.结构介绍

HDFS上的文件是以块来进行存储的,不是说1GB的文件就以1GB来存储,而是将1GB的文件分成很多块来进程存储,默认一个快的大小是128MB。

2.1 NameNode

客户端存取文件的信息都保存在NameNode上,对于NameNode有以下几点:

1.NameNode是一个中心服务器,单一结点负责管理文件系统的名字空间以及客户端对文件的访问。很多分布式的系统都采用这种主从的方式来设计,比如HBase、Kubernetes等。

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

3.副本存放在哪些DataNode上有NameNode来控制,根据全局情况作出块放置决定。客户端读取文件时NameNode尽量让客户端读取最近的副本,降低带宽的消耗和读取延时。

4.NameNode全权管理数据库的复制,它周期性的从集群中的每个DataNode接收心跳信号和快状态报告。心跳信号意味着该DataNode工作正常,块状报告显示该DataNode上的所有的数据块的列表。

NameNode和DataNode是通过RPG协议来进行数据的沟通的,包括心跳信号以及块状态报告。

2.2 DataNode

一个数据块在DataNode上以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据,包括数据块的长度,块数据的校验和以及时间戳。元数据可以用来判断该块是否损坏,比如块的长度不正确。

DataNode启动后会想NameNode注册,通过后,周期性的向NameNode上报所有的块信息。

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

集群运行中可以安全的加入和退出一些机器。

2.3 文件存储

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

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

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

可以创建、删除、移动或重命名文件,当文件创建、写入和关闭后不能修改文件的内容。hdfs上的文件不能修改,但是可以追加内容。

通过Hadoop的官网文档可以查看副本的保存策略,通常是在本地保存一个副本,然后在同一个机架上保存另外一份副本,在另外一个机架上保存第3个副本。一个机架指的是一个服务器机柜,通常都是在同一个网段中。

3.数据损坏处理:

当DataNode读取一个块的时候,会计算checksum(校验和)

如果计算后的checksum与块创建时的值不一样,则说明该块已经损坏。客户端会读取其他DataNode上的块

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

DataNode在其文件创建后三周验证其checksum,自动进行修复和保证完整性。

hdfs会有很多种办法来保证文件的准确性,确保数据不会丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值