一种用PVFS替代Hadoop存储模块的方法

文档序号:8528013阅读:541来源:国知局
一种用PVFS替代Hadoop存储模块的方法
【技术领域】
[0001] 本发明属于计算机技术领域,涉及分布式计算及分布式文件系统,尤其涉及到分 布式计算架构与分布式文件系统之间的连接,具体为一种将PVFS分布式文件系统接入 Hadoop以替代Hadoop原有存储模块HDFS的实现方法。
【背景技术】
[0002] Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了 解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop是目前应用面最广的一种分布式计算平台,采用MapReduce分布式计算模型,提供 了一系列的接口与框架,帮助用户高效的利用分布式集群的计算资源,提高计算的并行性。
[0003] 分布式计算平台往往需要建立在分布式文件系统上,对于数据密集型的分布式 计算来说,文件系统的性能尤为重要。Hadoop自己提供了一个分布式文件系统(Hadoop Distributed File System),简称为HDFS。HDFS具有较高的安全性,并且和Hadoop高度契 合,在存储数据时提前考虑MapReduce计算节点的分布,优先将计算时需要的数据存储在 计算节点上,以节省网络开销。
[0004] 但是,在今天看来,HDFS已经暴露出了不少缺陷:
[0005] 1. HDFS存在单点问题。早期的HDFS只存在一个NameNode,这可能引起严重的单 点故障,在NameNode崩溃时会丢失所有未保存的数据;在后来的版本中,HDFS添加了多个 副NameNode,在主NameNode崩溃时使用副NameNode继续运行,但是同一时间运行的依然只 有一个NameNode,在文件访问频繁时容易造成网络拥堵。
[0006] 2. HDFS采用多副本的方式进行文件的并行访问,节点间只能以副本为单位进行并 行读写操作。这样虽然可以提升文件系统整体的吞吐量,但是为了满足不同节点对同一个 数据文件的访问需求,HDFS必须创造足够多的副本,否则将会损失其并行性。
[0007] 3. HDFS将数据存放在对应的计算节点上,节省了网络开销,但是随着计算机网络 技术的发展,网络通信所花费的时间已经比I/O操作低一到两个数量级,相比而言几乎可 以忽略不计;而HDFS为了节省网络开销所付出的代价就是完全没有文件内的并行性。这就 限制了 HDFS的读写速度无法超越I/O硬件设备的读写速度。
[0008] 对于非数据密集型的计算而言,HDFS的缺陷并无关痛痒,因为这类计算的主要时 间开销在于运算过程而非存取过程。但是对于数据密集型的计算来说,无论输入、输出还是 中间结果的读写都会造成大量的时间开销,这个时候就需要使用一个性能更强的文件系统 来代替HDFS。本发明选择了并行虚拟文件系统(Parallel Virtual File System)。
[0009] 并行虚拟文件系统简称PVFS,是由Clemson大学开发的一个开源分布式文件系 统,以其高并行性能著称。PVFS的特点是将文件分为很多小的区块进行存放,在多个节点同 时访问同一个文件时可以并行地访问不同的区块,所以不需要副本也可以进行节点间并行 访问。此外,在单个节点访问PVFS中的文件时,可以从不同的PVFS存储节点中并行地读取 不同的区块,从而使文件读写速度达到硬件I/O速度的数倍。
[0010] 但就目前的技术而言,Hadoop为了达到较高的性能,与HDFS的结合非常紧密, Hadoop中与文件系统相关的虚类提供的虚方法与HDFS的上层接口基本是--对应的,然 而这就对使用其他文件系统代替HDFS带来了不便和困难。这也是本发明需要解决的主要 问题。

【发明内容】

[0011] 本发明要解决的问题是:如何使用PVFS替代原有的Hadoop存储模块,发挥PVFS 的优点,克服HDFS的缺陷。
[0012] 本发明的技术方案为:一种用PVFS替代Hadoop存储模块的方法,使用并行虚拟文 件系统PVFS代替Hadoop的分布式文件系统HDFS模块,包括以下步骤:
[0013] 步骤1:编写PVFS程序接口模块,用于提供访问PVFS的操作请求的统一函数接 口,将操作请求转化为相应的PVFS操作,并自动申请与PVFS管理相关的权限与句柄,所述 PVFS程序接口模块包括对以下基本PVFS操作函数的封装:文件创建、文件访问、文件读取、 文件写入、文件更新、目录列表、文件名查询、文件状态查询和系统状态查询;
[0014] 步骤2:编写Hadoop-PVFS模块,通过PVFS程序接口模块调用PVFS,并为Hadoop 提供服务;
[0015] 调用PVFS时,通过配置将Hadoop的存储模块选择为PVFS,Hadoop保留所有原有 功能,由Hadoop-PVFS模块为Hadoop提供PVFS文件系统接口、PVFS输入流、PVFS输出流、 PVFS文件状态和PVFS系统状态类,用于满足Hadoop的文件系统操作,
[0016] 收到Hadoop的文件操作请求时,Hadoop-PVFS模块对请求进行分析,转化为对应 于PVFS处理的基本件操作,并向PVFS提出操作请求,然后从PVFS接收返回值或数据,再将 返回值或数据转化为对应于Hadoop处理的数据结构返回给Hadoop;
[0017] 步骤3 :设置JNI连接模块,使用JNI连接模块连接Hadoop-PVFS模块与PVFS程 序接口模块。
[0018] PVFS程序接口模块为一个C语言模块,编译为动态链接库so",其中封装了初始 化系统句柄函数和获得操作句柄函数,申请相应的句柄后直接调用操作函数即可进行相应 的操作。
[0019] Hadoop-PVFS模块是一个JAVA语言模块,编译为JAVA归档文件jar", Hadoop-PVFS 模块包含 PvfsAbstractFileSystem 类、PvfsFileStatus 类、PvfsFileSystem 类、PvfsFsStatus 类、PvfsInputStream 类、PvfsOutputStream 类以及 PvfsUtil 类,为 Hadoop提供所述的PVFS文件系统接口、PVFS输入流、PVFS输出流、PVFS文件状态和PVFS 系统状态类,提供文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查 询、文件状态查询、系统状态查询的服务,实现Hadoop对PVFS的访问,其中:
[0020] PvfsAbstractFileSystem类继承自AbstractFileSystem虚类,实现Hadoop系统 对PVFS的访问接口;
[0021] PvfsFileStatus类实现文件信息的存储与格式化,并提供转化为FileStatus类 的方法,是在Hadoop与PVFS间传递文件信息的数据结构;
[0022] PvfsFileSystem类继承自FileSystem虚类,实现Hadoop系统及其中应用程序对 PVFS的访问接口;
[0023] PvfsFsStatus类实现文件系统信息的存储与格式化,并提供转化为FsStatus类 的方法,是在Hadoop与PVFS间传递文件系统信息的数据结构;
[0024] PvfsInputStream类继承自 FSInputStream虚类,实现 Hadoop 对 PVFS 的读数据操 作;
[0025] PvfsOutputStream 类继承自 FSOutputSummer 虚类,实现 Hadoop 对 PVFS 的写数据 操作;
[0026] PvfsUtil类为Hadoop-PVFS模块与PVFS程序接口模块相连接的准备阶段,它将 PvfsAbstractFileSystem 类、PvfsFileStatus 类、PvfsFileSystem 类、PvfsFsStatus 类、 PvfsInputStream类和PvfsOutputStream类中需要进行的PVFS操作集中起来,转化为参 数为尽量简单的数据结构的等价方法,然后交给JNI连接模块使用,PvfsUtil类相当于从 Hadoop-PVFS模块到PVFS程序接口模块的链接中在Hadoop-PVFS模块一端的接口。
[0027] 通过对Hadoop配置文件内容的调整,实现对Hadoop-PVFS模块的类的选择,并传 递PVFS需要的配置参数。
[0028] 进一步的,JNI连接模块是一个C语言模块
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1