HDFS支持外部存储
前言
在HDFS的使用过程中,有的时候我们会存在依赖外部数据读取的操作。首先,HDFS集群的数据存在容量问题,随着数据量上升,需要的存储空间必然要往上走。那么这个时候,是否我们能够有一种方式把部分数据存放到外部存储上呢。这样,我们将会在一定程度上增多HDFS的使用场景,比如空间能节省出来,还有内外部数据的交互,连通等等。本文,笔者来为大家阐述阐述HDFS在最近新版中的新特性之一:Provided Storage(提供式存储)。
Provided Storage:提供式存储
概念
用一句话来概括这里的“提供式存储”:
通过HDFS能够定位到数据的外部存储。
在现有阶段,这个外部存储只支持读取操作,暂不支持外部存储的写。换句话说,对于用户来说,提供式存储能够使得用户通过现有HDFS逻辑访问到外部存储的数据。而且这个外部存储的空间不受本身HDFS集群容量的限制。
提供式存储的关键点:元数据的映射
在提供式存储的实现中,为了保持本身HDFS内部文件读取操作的逻辑与兼容性要求,需要做到以下两点:
- 远程文件系统(外部存储)需要实现Hadoop内部FileSystem接口。
- 提供式存储以新的Storage Type:PROVIDED类型被DN,NN所区别。就是说,当客户端访问的数据在PROVIDED类型的目录下时,表明其下的数据来自于外部存储。
除了以上2点,还有一个最为关键的步骤就是元数据的映射:HDFS Block数据对于远程文件系统文件元数据的映射。
具体的实现思路如下:
- 文件元数据映射需要定义3要素<路径,长度,偏移量>,这3个基本要素能够准确定位出文件实际的数据位置。
- 有额外工具能够遍历远程文件系统树,得到一个只读的命名空间树,这个树里面包含了HDFS Block与远程文件系统的映射关系,生成的Block是满足HDFS Block规则的新Block对象。
- HDFS NN,DN共享上面生成的映射关系文件,然后当用户访问到外部存储数据的时候,进行映射关系的转换,DN再访问远程文件系统数据。此过程如下图所示,图中的Alias map即元数据的映射关系数据,它可以从持久化的文件中加载进来,而映射关系文件则通过前面提到的工具独立生成。
引用
[1].http://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HdfsProvidedStorage.html