google HDFS

根据GFS中主服务器/块服务器的设计,HDFS采用主服务器/从属服务器架构。HDFS集群是由一个NameNode 和一定数目的DataNode组成,NameNode是一个中心服务器,负责管理文件系统的名称空间和客户端对文件的访问。DataNode节点在集群是一个节点一个,负责管理节点上附带的存储。

NameNode执行文件系统的名称空间操作,如打开、关闭、重命名文件和目录,同时决定到具体数据节点的映射。
DataNode在NameNode的指挥下进行块的创建、删除和复制。
HDFS被设计成一个大集群中可靠地存储海量文件的系统。它将每个文件存储成块序列,除了最后一个块,所有块的大小相同。文件的所有块都会被复制,每个文件的块大小和复制因子都是可配置的。HDFS中的文件是单用户写模式,任何时候只能有一个用户写入(控制好同步)。NameNode全权管理块的复制,周期性地从集群中的DataNode接受心跳包和一个数据库报告(Blockreport)。心跳包的接收表示该数据节点正常工作,而数据块报告包括该数据节点所有的块组成的列表。

NameNode存储HDFS的元数据,对于任何修改文件元数据的操作,NameNode都用一个Editlog的事物日志记录下来。创建文件、修改文件都会在Editlog插入一条记录,NameNode在本地OS的文件系统中存储这个Editlog。整个文件系统的名称空间,包括块到文件的映射、文件的属性,都存储在FsImage的文件中,这个文件也放在NameNode所在系统的文件系统中。

所有HDFS通信协议都是建立在TCP/IP协议上,客户端通过一个可配置的端口连接到NameNode,通过各个端协议组件与NameNode交互,DataNode使用Datanode Protocol与NameNode交互。

使用HDFS的应用都是处理大数据集的,典型的块大小时64M,所以,文件一般按照64M大小分割,分割的块存储在不同的数据节点。

客户端创建文件的请求并没有立即发给NameNode,会将文件数据缓存到本地的一个临时文件。应用的写操作被透明的重定向到这个临时文件。当这个临时文件累计的数据超过一个块的大小,客户端才会联系NameNode,NameNode将文件名插入文件系统的层次结构中,并给它分配一个数据库,然后返回数据节点的标示符和目标数据库给客户端。客户端将本地临时文件刷新到指定的DataNode。当文件关闭时,在临时文件中剩余的没有刷新的数据也会传输到指定的DataNode,然后客户端通知节点文件已经关闭,NameNode将文件创建操作提交到持久存储。如果NameNode在文件关闭前挂了,则文件就丢失了。

HDFS写数据采用流水线式复制方式。客户端向HDFS文件写数据时,一开始是写入本地临时文件,假设文件的复制因子是3,则客户端会从NameNode获取一张数据节点列表来存放副本。然后向第一个datanode传输数据,第一个datanode一小部分一小部分(4kb)接收数据,将每部分写入本地仓库,并且同时将该部分传输到第二个datanode。第二个datanode也是边收边传,一小部分一小部分接收,存储在本地仓库,同时传给第三个datanode,第三个datanode仅仅是接收并存储。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值