深入分析HDFS原理及读写流程

本文深入探讨了HDFS的架构体系,包括Client、NameNode、DataNode和SecondaryNameNode的角色与功能。详细阐述了HDFS的读写流程,包括数据的分块、寻址、读取和写入机制。此外,还分析了HDFS的优缺点,如高容错性、适合大规模数据集和流式访问,以及存在的延迟高、不适合小文件和并发写入等问题。
摘要由CSDN通过智能技术生成

一、架构体系

1.1、什么是HDFS?

HDFS即Hadoop Distributed File System的简称,采用Master/Slave主从结构模型来管理数据。在设计上采用了分而治之的思想,将单服务器无法承受的大量的数据分布在多台服务器上。HDFS主要由Client、NameNode、DataNode,SecondaryNameNode这四部分组成。

1.2、组成HDFS的各模块作用
1.2.1、Client

HDFS客户端是在DFSClient类的基础上实现的,提供了命令行接口、API接口、浏览器接口等面向用户的接口,使用户可以不考虑HDFS的实现细节,简化操作。

客户端在整个HDFS的作用可以进行如下总结:

  1. 上传文件时按照Block块大小进行文件的切分;
  2. 和NameNode交互,获取文件位置信息;
  3. 和DataNode交互,读取和写入数据;
  4. 管理和访问整个HDFS。
1.2.2、NameNode

NameNode在HDFS结构模型里充当Master的就角色,因此一个HDFS集群里只会有一个active的NameNode节点。在集群里主要用来处理客户端的读写请求,它主要负责管理命名空间(NameSpace)和文件Block映射信息。

nameSpace:

nameSpace维护着文件系统树(FileSystem Tree)和文件树上的所有文件及文件夹的元数据(metadata),并使用fsimage和editlog这两个文件来管理这些信息。fsimage(空间镜像文件),它是文件系统元数据的一个完整的永久检查点,内部维护的是最近一次检查点的文件系统树和整棵树内部的所有文件和目录的元数据,如修改时间,访问时间,访问权限,副本数据,块大小,文件的块列表信息等等。editlog(编辑日志文件),当HDFS系统发生打开、关闭、创建、删除、重命名等操作产生的信息除了在保存在内存中外,还会持久化到编辑日志文件。比如上传一个文件后,日志文件里记录的有这次事务的tx id,文件的inode id,数据块的副本数,数据块的id,数据块大小,访问时间,修改时间等。

文件Block映射信息:

作为一个master,NameNode需要记录每个文件的每个块所在的数据节点的位置信息,也就是我们常说的元数据信息metaData。但是由于NameNode并不进行持久化存储,因此NameNode需要管理Block到DataNode的映射信息。一般元数据主要是文件名—> 数据块映射和数据块 —> Datanode列表映射。

其中文件名 —> 数据块映射保存在磁盘上进行持久化存储,但是NameNode并不保存数据块 —> DataNode列表映射,这份列表是通过心跳机制(heartbeat)建立起来的。NameNode执行文件系统的namespace操作,如打开、关闭、重命名文件和目录的同时决定了文件数据块到具体DataNode节点的映射。

HDFS心跳机制

由于HDFS是master/slave结构,其中master包括namenode和resourcemanager,slave包括datanode和nodemanager。在master启动时会开启一个IPC服务,然后等待slave连接。当slave启动后,会主动以默认3秒一次的频率链接IPC服务。当然这个时间是可以调整的,这个每隔一段时间连接一次的机制,就是心跳机制(默认的 heartbeat.recheck.interval 大小为 5 分钟,dfs.heartbeat.interval 默认的大小为 3

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值