目前,HDFS集群的架构包括了单个Name Node和若干个Data Node。Name Node负责两方面的事情:一方面是存储和管理整个命名空间,包括创建、修改、删除和列举文件目录等文件系统级别的操作;另一方面是管理Data Node和文件块。Data Node主要负责文件块的持久化存储和远程访问。
在现有模式下,存储负载的增加对Data Node和Name Node都会造成影响。对于Data Node而言,可以通过添加节点实现水平扩展;而对于单个的Name Node而言,只能通过增加内存和硬盘的方式实现垂直扩展。正是单个Name Node的垂直扩展方式成为了HDFS集群的瓶颈。
根据Yahoo HDFS团队的报告,一个存储能力为10.4PB,拥有3700个Data Node的HDFS集群,分配给Name Node的JAVA堆已达到40GB,随着存储负载的继续增加,很快就会达到单机可配置物理内存的极限(在一些机器上是64GB)。使用如此大的JAVA堆会造成多方面的性能问题,比如:垃圾回收会变得低效,更长的初始化时间,甚至调试JVM也会变得困难。