HDFS 单点改造方案对比
1背景
目前,HDFS集群的架构包括了单个Name Node和若干个DataNode。Name Node负责两方面的事情:一方面是存储和管理整个命名空间,包括创建、修改、删除和列举文件目录等文件系统级别的操作;另一方面是管理Data Node和文件块。Data Node主要负责文件块的持久化存储和远程访问。
1.1命名空间管理
HDFS的命名空间包含目录、文件和块。命名空间管理:是指命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作
1.2 块管理
A) 处理Data Node向NameNode注册的请求,处理datanode的成员关系,处理来自DataNode周期性的心跳。
B) 处理来自块的报告信息,维护块的位置信息。
C) 处理与块相关的操作:块的创建、删除、修改及获取块信息。
D) 管理副本放置(replica placement)和块的复制及多余块的删除。
目前HDFS为单NameNode模式,Namenode运行时将元数据及其块映射关系加载到内存中,随着集群数据量的增大,Namenode的内存空间也会遇到瓶颈。据实际生产经验统计如下:
文件数 |
数据块数 |
内存空间占用 |
3千万 |
3千万 |
约12GB 块管理 ≈ 7.8G,包括全部块副本信息 目录树 ≈ 4.3G,目录层次结构,包含文件块列表信息 |
10亿 |
10亿 |
约380GB 块管理 ≈ 240GB 目录树 ≈ 140GB |
注:淘宝与百度等均以支撑10亿的文件数为设计目标,京东文件系统的业务对象主要为图片,电子书等,10亿文件量可能只是时间问题。
2方案对比
2.1 Federation HDFS
HDFS Federation使用了多个独立的Namenode/namespace来使得HDFS的命名服务能够水平扩展。在HDFS Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的Namenode提供了提供了命名空间和块管理功能。Federation中引入了block pool的概念,负责对该命名空间的数据块进行管理。命名空间和它所拥有的BlockPool统称为一个Namespace Volume。datanode被所有的Namenode用作公共存储块的地方。每一个datanode都会向所在集群中所有的Namenode注册,并且会周期性的发送心跳和块信息报告,同时处理来自Namenode的指令。