HDFS源代码学习笔记
目录Google File System体系结构HDFS体系结构具体设计:NameNode & DataNode读文件块写文件块HDFS Federation体系结构个人总结
Google File System
HDFS体系结构    HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。还有一个Secondary NameNode。周期性将NameNode的命名空间镜像文件和修改日志合并以防日志文件过大。
当前的体系结构提供两层服务:命名空间的管理:管理目录、文件和块的命名空间,支持文件或目录的文件系统操作(创建、删除、修改等)。块存储:
块的管理(块的创建、删除等操作、副本的放置等)
块数据的物理存储和访问。具体实现NameNode实现:命名空间的管理(Namespace Management):管理元数据信息(文件目录结构,具体文件由哪些block组成等)
块的管理(Block Management):支持客户端对块文件的访问。DataNode实现:块数据的物理存储和访问。Datanode向NameNode的块管理层(非命名空间管理层)注册以形成存储层。
NameNode的详细设计NameNode主要存储了元数据信息和支持客户端对文件的访问。主要包含两大类:NameNode服务器类(Server类和HttpServer类)和FSNamesystem类。FSNamesystem类实际负责文件系统的管理。而NameNode服务器类则主要向外提供RPC接口和HTTP接口等服务。
根据文件名定位文件块NameNode主要工作之一就是向请求读写操作的客户端提供所处理文件在DataNode中的具体位置。根据客户端提供的文件名查找该文件对应块所在的Datanode的详细位置,主要分两步:沿着INodeDirectory所构建的目录树从根目录查找该文件所对应的所有块,即得到该文件的块列表。
对于块列表中的每一块,从BlocksMap中保存的从Block到BlockInfo映射表中得到BlockInfo,而BlockInfo则记录该块所在的DataNode的描述信息(DataNodeDescriptor)。DataNode的详细设计DataNode类中有一个FSDataSet类,该类用于对该DataNode上的整个存储空间进行管理。Storage是Hadoop中最大的结构,而Block是DataNode上最小的结构。Storage类保存了和存储相关的信息。一个DataNode上可指定多个Storage来存储块。由于HDFS规定了一个目录中能存放的Block数目,所以一个Storage上存在多个目录。对应的,FSDataset中用FSVolume来对应一个Storage,FSDir对应一个目录。所有的FSVolume通过FSVolumeSet管理,FSDataset中通过一个FSVolumeSet对象就可管理它的所有存储空间。
两大存储类
主要使用两大存储类来记录整个文件系统:FSDataset类与Storage类。Storage类的FSVolume与Storage类的StorageDirectory相对应。Storage类主要是通常的文件组织形式的逻辑结构,便于以常用I/O接口对其进行访问。FSDataset类则主要针对hadoop自身访问特性而组织文件存储的另一种逻辑结构形式。整个文件系统在本地磁盘中以Storage类来存储整个文件系统,而运行前必须将以Storage类存储的文件系统转换为FSDdataset类。
DataNode的工作流程启动DataNode之前需要与NameNode进行握手实现DataNode与NameNode布局版本一致。初始化DataNode的FSDataset对象,即初始化该DataNode所管理所有的存储空间。向NameNode注册,告知NameNode该DataNode的主机名、存储ID以及提供服务的端口号等信息(并没有告知详细的Block信息)。进入循环,每隔一段时间向NameNode发送心跳(heartbeat),其中主要内容如下图所示:NameNode根据接收到的心跳进行处理,并返回相应的命令给DataNode,使其继续执行工作。
Hdfs
上述DataNode与NameNode之间的交互始终围绕着如下原则进行:NameNode负责整个文件系统的命名空间的管理。真正的文件系统操作(读、写、修改等)的数据并不经过NameNode,而仅将这一过程反映到NameNode所管理的命名空间中,实际的工作是由DataNode来完成的。
读文件过程
写文件过程
局限性命名空间可扩展性    整个文件系统的元数据都存储在NameNode的内存中。节点的内存大小限制了元数据的大小。性能可扩展性     NameNode单个节点的吞吐量限制了整个文体系统操作的吞吐量。隔离性(多租户环境下)
可用性HDFS Federation体系结构BlockPool:块集合。互不相交,每个块仅属于一个BlockPool。由块管理层管理。Datanode提供共享存储层,存储该集群上归属于所有blockpool的文件块。一个命名空间可使用多个BlockPool,一个BlockPool仅属于一个命名空间,不能跨越命名空间。但在最新的设计中,一个命名空间仅有一个BlockPool
各个NameNode之间是相互独立的,不存在相互之间的协调。
Hdfs

More Related Content

PPTX
4, files & folders
PDF
云存储系统设计
PPT
第4章 sql server数据库的管理
PPTX
主機管理基本指令練習(三)
PPTX
Ch8 file system management(2013 ncu-nos_nm)
PPT
ch12
PPTX
Hdfs
PPTX
Hdfs
4, files & folders
云存储系统设计
第4章 sql server数据库的管理
主機管理基本指令練習(三)
Ch8 file system management(2013 ncu-nos_nm)
ch12
Hdfs
Hdfs
Ad

Hdfs