免费分布式存储系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Hadoop构建对象存储系统

By云深作者:Terry/Alen/Adam/SeymourZ

转载请注明出处前言

●云计算领域目前有两大代表性系统:Google和Amazon,它们各自的存储系

统为Google GFS和Amazon S3,都提供高可靠性、高性能、高可扩展性的存储能力

●Hadoop HDFS就是Google GFS存储系统的开源实现,主要应用场景是作为

并行计算环境(MapReduce)的基础组件,同时也是Bigtable(如HBase、HyperTable)的底层分布式文件系统。Hadoop HDFS也有自身的局限性,虽然作为分布式文件系统称谓,但它并不适合所有的应用场合。如:单点

namespace问题,小文件问题等,早有阐述。

/blog/2009/02/

●Amazon S3作为一个对象存储系统运营,为客户提供1到5G任意大小的对

象(文件)存储,从有限的资料来看,S3没有采用GFS的类似的体系架构,也不对外提供完整的文件系统呈现,更多的是一种对象存储访问的形式。

●既然Hadoop HDFS适合处理和存储大块的文件,我们是否也可以把HDFS

作为一种容器看待,通过上层抽象,对外提供类似Amazon S3一样的对象存储功能呢?答案我想是肯定的,下面就讨论基于Hadoop开源项目,构建一个高可靠,高性能、高扩展性的对象存储系统,实现类似Amazon S3的用户接口。

系统架构

图-1 系统架构

系统组成:

对象访问接口层(Access Edge)

▪提供客户端Lib,供上层应用调用;

▪提供REST和SOAP接口,支持web业务的访问。

对象元数据存储层(MetaData Storage)

▪实现对象操作业务逻辑,包括:

1.Bucket创建;

2.Bucket删除;

3.Bucket信息查询;

4.对象创建;

5.对象元数据信息查询;

6.对象删除;

7.对象元数据修改;

▪负责对象元数据的管理和维护,基于Hbase实现,由Hbase实现系统的扩展和高可靠性

对象实体数据存储(DataNode)

▪提供对象数据的可靠存储;

▪提供对象归档文件的存储;

▪基于HDFS,支持数据冗余

归档管理(Archive Management)

▪零散的小对象文件的归档;

▪归档文件的存储管理;

▪失效对象的磁盘空间回收;

▪归档文件的再归档;

▪相关元数据信息的修改;

元数据存储子系统

采用Bigtable(HBase)的结构化存储系统,提供Mata Data存储:

注:RowKey的设计,应该为系统处理提供最合适的索引

HDFS中对象数据的存储形式

对象在HDFS中存储有两种形式:

▪对象文件——每个文件对应一个对象,对象创建时存储到ONest 中的形态;

∙归档文件——为了减少HDFS中小文件的数据,将小的对象文件和归档文件归档。

HDFS中目录结构:

▪/data_dir-|-/object_dir/-|-obj_file0

| |-obj_file1

|

|-/arch_dir/-|-arch_file0

|-arch_file1

图-2 HDFS上的对象数据存储

Bucket的创建和删除

Bucket创建:

1、Bool Create Bucket(user_id, buck_name, buck_size, … );

2、MetaData Storage查询 Bucket信息表确定是否已经存在相同的user

bucket记录;

3、如果Bucket信息表中不存在相同的user Bucket记录,则在表中插

入一条user bucket记录;

4、返回True或者False表示操作成功与否;

Bucket删除:

1、Bool DropBucket(user_id, buck_name);

2、MetaData Storage查询 Bucket信息表确定是否已经存在相同的user

bucket记录;

3、如果Bucket信息表中存在相同的user Bucket记录,则查询

ObjectMeta表确定Bucket是否为空;

4、若Bucket为空,则删除Bucket信息表中对应的记录;

5、返回True或者False表示操作成功与否;

图-3 Bucket的创建和删除

对象的创建

1.

1.Client提交创建对象请求

create_obj_req(usr,bucket,obj_key,obj_meta);

2.检查user和Bucket的合法性,要求存在、可访问、容量允许;生

成对象在HDFS中的对象文件的URI;

3.返回对象文件URI;

4.将对象数据写入HDFS的对象文件;

5.通知MetaData Storage对象数据存储完成;

6.更新对象元数据索引信息,包括:

①对象元数据信息插入;

②Bucket的已使用空间大小,对于同一个对象的多个版本,

以最新版本空间大小为准;

1.

1.返回创建对象成功。

图-4 对象的创建

对象的删除

相关文档
最新文档