前言
Ozone的出现的初衷就是要解决HDFS namespace的扩展性问题,那么现在问题了,未来如何将这两大从设计上上来已经完全大改变的系统整合起来呢?这个听起来非常有意思,本文笔者结合最近社区的一些讨论,来简单聊聊这个话题。
Ozone的核心结构
社区在设计Ozone的时候,提出了一个具有关键性意义的概念:Storage Container。而不是HDFS中的块(block)概念。二者的关系是:Storage Container对外提供块服务。而Storage Container由底层存储向外提供服务,它可以支持不同的上层系统。所以Ozone的结构是这样的:
有人会说了,将block块服务剥离开来真的有这么重要吗?答案是非常重要。如果大家维护过拥有大规模数量级块的HDFS集群,一定经历过很多很多大大小小的问题。比如说以下几点:
- 大量的块导致NameNode维护的blockMap异常庞大,耗费内存。
- 每次涉及到块更新的操作都会持有一个全局锁,导致系统平均RPC的延时会提高,触发GC更频繁。
- 块规模的变大,在很多操作上会遇到瓶颈,快照,块汇报,等等。
而在Ozone中,SCM只负责维护这些Container信息。原先的block report就会变成container report。此时的关系变为:
KSM: objec