基于Hadoop和Openstack云存储的研究(HDFS和Swift对比)

来源:互联网 发布:linux终端粘贴快捷键 编辑:程序博客网 时间:2024/06/15 21:44

        前几天在知网上翻了好多论文,昨天开始一篇一篇地看,由于有的论文时间比较早,甚至是3年前的,所以很多部分只是对当前的技术有一个展望和综述,不过这样对我这种初学者也有好处,今天看得这篇文章是李金亮,翟永刚,汤向东发表的一篇题为《基于Hadoop和Openstack云存储的研究》的论文,以下为一些记录和感想。


1.HDFS 和Swift 优缺点

        HDFS 虽然有着许多优点,但也存在着一些缺点。

        首先,HDFS 是用来处理大吞吐量的离线数据,它需要牺牲一定的延时为代价,因此它不太适合哪些对延时有较高要求的应用程序。

        其次,HDFS 被设计用来处理大数据文件,它通常对大文件进行优化,而在处理大量小文件时反而会使其耗费更多内存,从而影响数据处理的效率。此外,HDFS 中一次只能写入一个文件,不支持多用户并发写入。

        相反,Swift 用来存储多个任意大小文件的数据,而且支持对文件多用户并发写入,但Swift 没有目录结构,不支持嵌套,也不支持文件的重写,只能新建,不支持服务器上的数据查询和处理,而且当容器的对象超过100 万个时,其性能就会急剧下降。因此,如果能将HDFS 和Swift 存储进行整合,可极大提高云存储的数据处理效率,降低硬件成本。


2.HDFS 和Swift 整合方式

        由于HDFS 采用Java 编写,而Swift 采用Python 编写,因此它们之间互不兼容。通常情况下,要想使用Hadoop对Swift 中存储的大量数据进行处理,一般先将Swift 中的数据导出到中间服务器,然后再将这些数据导入到HDFS中,最后才能通过MapReduce 技术对这些数据进行分布式处理。这种方法在处理少量数据时有一定的可用性,但在处理大量数据时,导出和导入数据的过程需要耗费大量的时间,而且还会耗费更多额外的存储。    

        为此,我们可以设计一个Swift 对象适配器(Adapter),用来进行接口适配,将Swift 中类的接口转变成Hadoop 所希望的另一个接口,使得原本两个因为接口而不兼容的类能够在一起工作。用来进行接口适配,将Swift 中类的接口转变成Hadoop 所希望的另一个接口,使得原本两个因为接口而不兼容的类能够在一起工作。

        Swift 虽然采用Python 语言编写,但是也提供了多种编程语言的客户端API,其中Swift 的Java 客户端API 是一个名叫Java-cloudfiles 的开源项目,它支持对Swift 存储的各种操作。

        Swift 适配器的作用就是调用Swift 的Java 客户端API,实现了对Swift 存储的操作,Hadoop MapReduce API调用Hadoop FileSystem API,对于MapReduce 来说,底层的HDFS 和Swift 都是透明的。适配器所在层次结构如图1 所示。



通过Swift 适配器,将高可用的Swift 对象存储作为Hadoop 的底层存储系统,使得Hadoop 在存储层面具有了高可用性。把Swift 适配器部署到已有的Hadoop 集群中是简单快捷的。原本用来分析存储在HDFS 中的数据的MapReduce 应用程序,也无需修改即可分析存储在Swift中的数据。


感谢原作者,摘录部分如侵则删。

1 0