前言
l
云计算领域目前有两大代表性系统:
Google
和
Amazon
,它们各自的存储系统为
Google GFS
和
Amazon S3
,都提供高可靠性、高性能、高可扩展性的存储能力
l
Hadoop HDFS
就是
Google GFS
存储系统的开源实现,主要应用场景是作为并行计算环境(
MapReduce
)的基础组件,同时也是
Bigtable
(如
HBase
、
HyperTable
)的底层分布式文件系统。
Hadoop HDFS
也有自身的局限性,虽然作为分布式文件系统称谓,但它并不适合所有的应用场合。如:单点
namespace
问题,小文件问题等,早有阐述。
http://www.cloudera.com/blog/2009/02/
l
Amazon S3
作为一个对象存储系统运营,为客户提供
1
到
5G
任意大小的对象(文件)存储,从有限的资料来看,
S3
没有采用
GFS
的类似的体系架构,也不对外提供完整的文件系统呈现,更多的是一种对象存储访问的形式。
l
既然
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
存储:
可用
Object
元数据表结构
列名
|
类型
|
备注
|
Object
标识符
|
字符串
|
Row key
;
格式:
Usr:bucket:full path
|
用户自定义元数据
|
字符串
|
<key
,
value>
列表
格式:
Key0
:
value0|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
|
用户自定义元数据
|
字符串
|
<key
,
value>
列表
格式:
Key0
:
value0|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
图
-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
的创建和删除
对象的创建
-
-
Client
提交创建对象请求
create_obj_req(usr,bucket,obj_key,obj_meta);
-
检查
user
和
Bucket
的合法性,要求存在、可访问、容量允许;生成对象在
HDFS
中的对象文件的
URI
;
-
返回对象文件
URI
;
-
将对象数据写入
HDFS
的对象文件;
-
通知
MetaData Storage
对象数据存储完成;
-
更新对象元数据索引信息,包括:
①
对象元数据信息插入;
②
Bucket
的已使用空间大小,对于同一个对象的多个版本,以最新版本空间大小为准;
-
-
返回创建对象成功。
图
-4
对象的创建
对象的删除
-
-
Client
提交删除对象请求
delete_obj_req(usr,bucket,obj_key);
-
检查
user
和
Bucket
的合法性,要求存在、访问权限;不合法则返回失败;
-
User
和
Bucket
检查通过,则进行如下处理:
①
删除对象在元数据表中的信息;
②
将删除对象及其在
hdfs
中的路径信息存入到已删除对象表中;
③
更新
Bucket
使用空间大小;
对象删除时,对象可能有两种存储形态:
-
-
对象文件
—— Archive Management
归档处理时,会直接删除无效的该文件;
-
归档文件的一部分
—— Archive Management
对磁盘利用率低的归档文件压缩处理时,删除该数据;
图
-5
对象的删除
小文件的归档管理
该部分主要由周期性执行的
MapReduce
任务完成;有以下几个处理流程:
-
-
对象归档
-
扫描元数据信息表,统计未归档的对象信息,包括在
HDFS
中的
URI
、对象大小等;
-
根据配置的归档文件大小限制,对统计所得的对象进行分组;
-
将每个分组中的对象文件合并到一个归档文件中;
-
更新相关对象元数据信息表中的数据位置描述项;
-
删除旧的对象文件;
图
-6
小文件的归档
来自:http://blog.csdn.net/Cloudeep/archive/2009/08/05/4412958.aspx
分享到:
相关推荐
基于Hadoop的云盘系统是一种分布式存储解决方案,利用Hadoop的可扩展性和高容错性来处理大规模数据。Hadoop是Apache软件基金会的一个开源项目,主要由HDFS(Hadoop Distributed File System)和MapReduce两部分组成...
本资料主要探讨的是如何利用Hadoop构建一个分布式对象存储系统,这种系统能够高效、可靠地存储海量数据。 【描述】:“人工智能-Hadoop” Hadoop在人工智能领域的应用越来越广泛。AI项目往往需要处理大量数据,...
【基于Hadoop的Web云盘系统】是一种分布式存储和处理大量数据的解决方案,它结合了Hadoop的强大功能和Web服务的便捷性。该系统利用JavaWeb技术构建用户界面,为用户提供了一个在线存储、管理和访问文件的平台。核心...
本项目是基于Hadoop平台,采用Java编程语言,构建了一套完整的电影推荐系统,旨在实现大规模数据处理下的高效推荐服务。 首先,我们要理解Hadoop的核心组件——Hadoop Distributed File System (HDFS) 和 MapReduce...
《基于Hadoop和OpenStack构建数据平台:深度解析与实践》 在当今信息化时代,大数据已成为企业竞争力的关键因素。为了有效管理和利用海量数据,企业和研究机构纷纷转向分布式计算框架,如Hadoop和云计算平台...
这篇基于Hadoop的流量日志分析系统的学士学位毕业论文,深入探讨了Hadoop在大数据处理中的应用及其优势。 首先,Hadoop架构是论文的核心研究对象。Hadoop是由Apache基金会开发的一个开源项目,旨在提供一种分布式...
本文将详细介绍如何利用Spring框架来搭建一个基于Hadoop的大数据分析平台,涵盖了从基础概念到实践应用的关键知识点。 首先,理解Hadoop是至关重要的。Hadoop是Apache基金会的一个开源项目,主要设计用于处理和存储...
本项目利用SpringBoot作为服务端基础,Java作为编程语言,Hadoop提供大规模数据存储,Vue.js构建用户界面,构建了一个高效、灵活的企业级网盘分布式系统。无论是作为毕业设计还是课程实践,这个项目都提供了全面的...
本项目名为“基于Hadoop的图像检索之人脸识别系统”,它将Hadoop与人脸识别技术相结合,构建了一个能够处理大量图像数据的人脸识别系统。 1. Hadoop基础知识: Hadoop是Apache基金会的一个开源项目,核心组件包括...
Hadoop作为一种开源的编程框架,主要使用Java语言,支持海量数据集的分布式处理,它主要包括HDFS(Hadoop分布式文件系统)和MapReduce(并行计算框架)两大组件。HDFS负责数据存储,而MapReduce负责数据处理。这一...
在这个背景下,一个基于Hadoop、HBase和SpringBoot的分布式网盘系统应运而生。这个系统是IT专业学生进行毕业设计的优秀案例,它巧妙地融合了大数据处理框架、分布式数据库和现代Web开发技术,旨在提供高效、可扩展的...
2. Hive:Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得非Java背景的用户也能方便地对Hadoop上的数据进行操作。在本项目中,Hive可能是用于对Hadoop中存储的...
- Hadoop分布式文件系统(HDFS):一个分布式文件存储系统,它存储数据跨越多台机器。 7. Hadoop的实际应用 Hadoop在处理网络级别的大数据方面具有显著优势。它不仅可以在成千上万台机器上运行,而且对开发人员和...
- **HBase与MapReduce技术**:HBase是基于Hadoop的一个非关系型数据库,适合存储半结构化或非结构化数据。结合MapReduce,可以对视频数据进行高效处理和索引构建,实现快速访问。 - **Lucene技术**:Lucene是一种...
### 基于Hadoop和Django的大数据可视化分析Web系统 #### 一、系统概述与价值 在当今数字化时代,大数据技术已经成为推动企业发展的重要力量。对于企业和组织而言,能够有效地收集、处理并分析海量数据变得至关重要...
本项目“基于Hadoop结合Spring全家桶,采用HDFS文件系统存储的以JPA完成持久层的项目”正是这样一个将大数据处理与企业级应用开发紧密结合的实例。下面将详细阐述该项目中的关键知识点。 首先,Hadoop是一个开源的...
这是一个基于Java技术栈,利用SpringMVC、Spring、HBase和Maven构建的Hadoop分布式云盘系统的项目。该项目旨在实现一个高效的、可扩展的云存储解决方案,利用Hadoop的分布式特性来处理大规模数据存储需求。 首先,...
【标题】基于Hadoop的疾病信息统计平台是一个利用Java编程语言构建的大数据处理系统,它旨在高效地收集、存储、处理和分析大量的疾病相关数据。Hadoop是Apache软件基金会开发的一个开源框架,专为分布式存储和计算大...
### 基于Hadoop平台的DBSCAN算法应用研究 #### 一、研究背景与意义 随着信息技术的飞速发展,大数据时代悄然而至。在这个时代背景下,数据量的爆炸式增长给传统的数据处理方式带来了前所未有的挑战。面对庞大的...
基于Hadoop的分布式数据库测试方法研究主要关注在电力系统海量数据存储采集的背景下,构建基于Hadoop生态圈框架的通用测试方法,以对分布式数据库的性能进行分析和检测。随着数据量的激增,传统的集中式数据库已无法...