设为首页 收藏本站
查看: 914|回复: 0

[经验分享] 基于Hadoop构建对象存储系统(一)

[复制链接]

尚未签到

发表于 2016-12-10 10:35:00 | 显示全部楼层 |阅读模式
前言
 
l         云计算领域目前有两大代表性系统:GoogleAmazon,它们各自的存储系统为Google GFSAmazon S3,都提供高可靠性、高性能、高可扩展性的存储能力
 
l         Hadoop HDFS就是Google GFS存储系统的开源实现,主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是Bigtable(如HBaseHyperTable)的底层分布式文件系统。Hadoop HDFS也有自身的局限性,虽然作为分布式文件系统称谓,但它并不适合所有的应用场合。如:单点namespace问题,小文件问题等,早有阐述。http://www.cloudera.com/blog/2009/02/
 
l         Amazon S3作为一个对象存储系统运营,为客户提供15G任意大小的对象(文件)存储,从有限的资料来看,S3没有采用GFS的类似的体系架构,也不对外提供完整的文件系统呈现,更多的是一种对象存储访问的形式。
 
l         既然Hadoop HDFS适合处理和存储大块的文件,我们是否也可以把HDFS作为一种容器看待,通过上层抽象,对外提供类似Amazon S3一样的对象存储功能呢?答案我想是肯定的,下面就讨论基于Hadoop开源项目,构建一个高可靠,高性能、高扩展性的对象存储系统,实现类似Amazon S3的用户接口。
 
系统架构
  DSC0000.jpg

-1 系统架构

 
系统组成:
 
对象访问接口层(Access Edge
§         提供客户端Lib,供上层应用调用;
§         提供RESTSOAP接口,支持web业务的访问。
 
对象元数据存储层(MetaData Storage
§         实现对象操作业务逻辑,包括:
1.         Bucket创建;
2.         Bucket删除;
3.         Bucket信息查询;
4.         对象创建;
5.         对象元数据信息查询;
6.         对象删除;
7.         对象元数据修改;
§         负责对象元数据的管理和维护,基于Hbase实现,由Hbase实现系统的扩展和高可靠性
 
对象实体数据存储(DataNode)
§         提供对象数据的可靠存储;
§         提供对象归档文件的存储;
§         基于HDFS,支持数据冗余
 
归档管理(Archive Management)
§         零散的小对象文件的归档;
§         归档文件的存储管理;
§         失效对象的磁盘空间回收;
§         归档文件的再归档;
§         相关元数据信息的修改;
 
元数据存储子系统
采用BigtableHBase)的结构化存储系统,提供Mata Data存储:
 
可用Object元数据表结构
列名
类型
备注
Object 标识符
字符串
Row key
格式:
Usr:bucket:full path
用户自定义元数据
字符串
<keyvalue>列表
格式:Key0value0|key1:value1|…
归档标志
Bool
标识object文件是否已被归档
数据位置描述
字符串
格式:Hdfs://filepath:offset:size
最后修改时间
时间戳
标识元数据版本
 
已删除Object元数据表结构
列名
类型
备注
Object 标识符
字符串
Row key
格式:
Usr:bucket:full path
归档标志
Bool
标识object文件是否已被归档
数据位置描述
字符串
格式:
Hdfs://filepath:offset:size
 
Bucket信息表结构
列名
类型
备注
bucket 标识符
字符串
Row key
格式:
Usr:bucket
用户自定义元数据
字符串
<keyvalue>列表
格式:Key0value0|key1:value1|…
Max space
int64
Bucket允许的最大空间
Used space
int64
Bucket已使用的空间
注:RowKey的设计,应该为系统处理提供最合适的索引
HDFS中对象数据的存储形式
对象在HDFS中存储有两种形式:
§         对象文件 —— 每个文件对应一个对象,对象创建时存储到ONest中的形态;

  •  

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

HDFS中目录结构:
§         /data_dir-|-/object_dir/-|-obj_file0
                      |                   |-obj_file1
                      |
                      |-/arch_dir/-|-arch_file0
                                         |-arch_file1
 
  DSC0001.jpg

-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表示操作成功与否;
 
  DSC0002.jpg

-3 Bucket的创建和删除

对象的创建

  •  

    • Client提交创建对象请求create_obj_req(usr,bucket,obj_key,obj_meta);
    • 检查userBucket的合法性,要求存在、可访问、容量允许;生成对象在HDFS中的对象文件的URI
    • 返回对象文件URI
    • 将对象数据写入HDFS的对象文件;
    • 通知MetaData Storage对象数据存储完成;
    • 更新对象元数据索引信息,包括:

①     对象元数据信息插入;
②     Bucket的已使用空间大小,对于同一个对象的多个版本,以最新版本空间大小为准;

  •  

    • 返回创建对象成功。

  DSC0003.jpg

-4 对象的创建

对象的删除

  •  

    • Client提交删除对象请求delete_obj_req(usr,bucket,obj_key);
    • 检查userBucket的合法性,要求存在、访问权限;不合法则返回失败;
    • UserBucket检查通过,则进行如下处理:

①     删除对象在元数据表中的信息;
②     将删除对象及其在hdfs中的路径信息存入到已删除对象表中;
③     更新Bucket使用空间大小;
          对象删除时,对象可能有两种存储形态:

  •  

    • 对象文件 —— Archive Management归档处理时,会直接删除无效的该文件;
    • 归档文件的一部分 —— Archive Management对磁盘利用率低的归档文件压缩处理时,删除该数据;

 
  DSC0004.jpg

-5 对象的删除

 
小文件的归档管理
该部分主要由周期性执行的MapReduce任务完成;有以下几个处理流程:      

  •  

    • 对象归档
    • 扫描元数据信息表,统计未归档的对象信息,包括在HDFS中的URI、对象大小等;
    • 根据配置的归档文件大小限制,对统计所得的对象进行分组;
    • 将每个分组中的对象文件合并到一个归档文件中;
    • 更新相关对象元数据信息表中的数据位置描述项;
    • 删除旧的对象文件;

 
  DSC0005.jpg

-6 小文件的归档

 
  来自:http://blog.csdn.net/Cloudeep/archive/2009/08/05/4412958.aspx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-312280-1-1.html 上篇帖子: Hadoop源代码分析(一八) 下篇帖子: hadoop_rpc调用之Server端(3)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表