CN104850401A - 一种用PVFS替代Hadoop存储模块的方法 - Google Patents
一种用PVFS替代Hadoop存储模块的方法 Download PDFInfo
- Publication number
- CN104850401A CN104850401A CN201510229869.8A CN201510229869A CN104850401A CN 104850401 A CN104850401 A CN 104850401A CN 201510229869 A CN201510229869 A CN 201510229869A CN 104850401 A CN104850401 A CN 104850401A
- Authority
- CN
- China
- Prior art keywords
- pvfs
- hadoop
- class
- module
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000006870 function Effects 0.000 claims description 41
- 230000008569 process Effects 0.000 claims description 13
- 238000013501 data transformation Methods 0.000 claims description 6
- 238000005538 encapsulation Methods 0.000 claims description 4
- 210000000988 bone and bone Anatomy 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 abstract description 5
- 230000000875 corresponding effect Effects 0.000 description 15
- 230000007547 defect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用PVFS替代HADOOP存储模块的方法,使用并行虚拟文件系统PVFS代替HADOOP的分布式文件系统HDFS模块,本发明实现了从HADOOP到PVFS的连接,主要包括三个模块:PVFS程序接口、HADOOP-PVFS模块与JNI连接模块。本发明旨在选取一种更适合的分布式文件系统作为HADOOP的存储模块来代替HDFS,以减少HADOOP在文件操作方面的开销,提升HADOOP在MapReduce计算,尤其是数据密集型计算时的表现。
Description
技术领域
本发明属于计算机技术领域,涉及分布式计算及分布式文件系统,尤其涉及到分布式计算架构与分布式文件系统之间的连接,具体为一种将PVFS分布式文件系统接入Hadoop以替代Hadoop原有存储模块HDFS的实现方法。
背景技术
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop是目前应用面最广的一种分布式计算平台,采用MapReduce分布式计算模型,提供了一系列的接口与框架,帮助用户高效的利用分布式集群的计算资源,提高计算的并行性。
分布式计算平台往往需要建立在分布式文件系统上,对于数据密集型的分布式计算来说,文件系统的性能尤为重要。Hadoop自己提供了一个分布式文件系统(HadoopDistributed File System),简称为HDFS。HDFS具有较高的安全性,并且和Hadoop高度契合,在存储数据时提前考虑MapReduce计算节点的分布,优先将计算时需要的数据存储在计算节点上,以节省网络开销。
但是,在今天看来,HDFS已经暴露出了不少缺陷:
1.HDFS存在单点问题。早期的HDFS只存在一个NameNode,这可能引起严重的单点故障,在NameNode崩溃时会丢失所有未保存的数据;在后来的版本中,HDFS添加了多个副NameNode,在主NameNode崩溃时使用副NameNode继续运行,但是同一时间运行的依然只有一个NameNode,在文件访问频繁时容易造成网络拥堵。
2.HDFS采用多副本的方式进行文件的并行访问,节点间只能以副本为单位进行并行读写操作。这样虽然可以提升文件系统整体的吞吐量,但是为了满足不同节点对同一个数据文件的访问需求,HDFS必须创造足够多的副本,否则将会损失其并行性。
3.HDFS将数据存放在对应的计算节点上,节省了网络开销,但是随着计算机网络技术的发展,网络通信所花费的时间已经比I/O操作低一到两个数量级,相比而言几乎可以忽略不计;而HDFS为了节省网络开销所付出的代价就是完全没有文件内的并行性。这就限制了HDFS的读写速度无法超越I/O硬件设备的读写速度。
对于非数据密集型的计算而言,HDFS的缺陷并无关痛痒,因为这类计算的主要时间开销在于运算过程而非存取过程。但是对于数据密集型的计算来说,无论输入、输出还是中间结果的读写都会造成大量的时间开销,这个时候就需要使用一个性能更强的文件系统来代替HDFS。本发明选择了并行虚拟文件系统(Parallel Virtual File System)。
并行虚拟文件系统简称PVFS,是由Clemson大学开发的一个开源分布式文件系统,以其高并行性能著称。PVFS的特点是将文件分为很多小的区块进行存放,在多个节点同时访问同一个文件时可以并行地访问不同的区块,所以不需要副本也可以进行节点间并行访问。此外,在单个节点访问PVFS中的文件时,可以从不同的PVFS存储节点中并行地读取不同的区块,从而使文件读写速度达到硬件I/O速度的数倍。
但就目前的技术而言,Hadoop为了达到较高的性能,与HDFS的结合非常紧密,Hadoop中与文件系统相关的虚类提供的虚方法与HDFS的上层接口基本是一一对应的,然而这就对使用其他文件系统代替HDFS带来了不便和困难。这也是本发明需要解决的主要问题。
发明内容
本发明要解决的问题是:如何使用PVFS替代原有的Hadoop存储模块,发挥PVFS的优点,克服HDFS的缺陷。
本发明的技术方案为:一种用PVFS替代Hadoop存储模块的方法,使用并行虚拟文件系统PVFS代替Hadoop的分布式文件系统HDFS模块,包括以下步骤:
步骤1:编写PVFS程序接口模块,用于提供访问PVFS的操作请求的统一函数接口,将操作请求转化为相应的PVFS操作,并自动申请与PVFS管理相关的权限与句柄,所述PVFS程序接口模块包括对以下基本PVFS操作函数的封装:文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询和系统状态查询;
步骤2:编写Hadoop-PVFS模块,通过PVFS程序接口模块调用PVFS,并为Hadoop提供服务;
调用PVFS时,通过配置将Hadoop的存储模块选择为PVFS,Hadoop保留所有原有功能,由Hadoop-PVFS模块为Hadoop提供PVFS文件系统接口、PVFS输入流、PVFS输出流、PVFS文件状态和PVFS系统状态类,用于满足Hadoop的文件系统操作,
收到Hadoop的文件操作请求时,Hadoop-PVFS模块对请求进行分析,转化为对应于PVFS处理的基本件操作,并向PVFS提出操作请求,然后从PVFS接收返回值或数据,再将返回值或数据转化为对应于Hadoop处理的数据结构返回给Hadoop;
步骤3:设置JNI连接模块,使用JNI连接模块连接Hadoop-PVFS模块与PVFS程序接口模块。
PVFS程序接口模块为一个C语言模块,编译为动态链接库“.so”,其中封装了初始化系统句柄函数和获得操作句柄函数,申请相应的句柄后直接调用操作函数即可进行相应的操作。
Hadoop-PVFS模块是一个JAVA语言模块,编译为JAVA归档文件“.jar”,Hadoop-PVFS模块包含PvfsAbstractFileSystem类、PvfsFileStatus类、PvfsFileSystem类、PvfsFsStatus类、PvfsInputStream类、PvfsOutputStream类以及PvfsUtil类,为Hadoop提供所述的PVFS文件系统接口、PVFS输入流、PVFS输出流、PVFS文件状态和PVFS系统状态类,提供文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询、系统状态查询的服务,实现Hadoop对PVFS的访问,其中:
PvfsAbstractFileSystem类继承自AbstractFileSystem虚类,实现Hadoop系统对PVFS的访问接口;
PvfsFileStatus类实现文件信息的存储与格式化,并提供转化为FileStatus类的方法,是在Hadoop与PVFS间传递文件信息的数据结构;
PvfsFileSystem类继承自FileSystem虚类,实现Hadoop系统及其中应用程序对PVFS的访问接口;
PvfsFsStatus类实现文件系统信息的存储与格式化,并提供转化为FsStatus类的方法,是在Hadoop与PVFS间传递文件系统信息的数据结构;
PvfsInputStream类继承自FSInputStream虚类,实现Hadoop对PVFS的读数据操作;
PvfsOutputStream类继承自FSOutputSummer虚类,实现Hadoop对PVFS的写数据操作;
PvfsUtil类为Hadoop-PVFS模块与PVFS程序接口模块相连接的准备阶段,它将PvfsAbstractFileSystem类、PvfsFileStatus类、PvfsFileSystem类、PvfsFsStatus类、PvfsInputStream类和PvfsOutputStream类中需要进行的PVFS操作集中起来,转化为参数为尽量简单的数据结构的等价方法,然后交给JNI连接模块使用,PvfsUtil类相当于从Hadoop-PVFS模块到PVFS程序接口模块的链接中在Hadoop-PVFS模块一端的接口。
通过对Hadoop配置文件内容的调整,实现对Hadoop-PVFS模块的类的选择,并传递PVFS需要的配置参数。
进一步的,JNI连接模块是一个C语言模块,编译为动态链接库“.so”。
本发明方法优选使用PVFS-2.8.2版本与Hadoop-2.4.1版本
本发明提供了一种将PVFS用于Hadoop的方法,解决原来Hadoop与HDFS结合紧密而无法使用其它文件系统的问题,使用PVFS替代Hadoop存储模块,解决HDFS的时间开销大,读写效率低等问题,相对Hadoop原有的存储模块HDFS而言,本发明用PVFS替代后的优势如下:
1.PVFS具有高并行性,不仅可以在节点间进行并行读写,而且在单个节点读写单个文件时也具有高并行性,使文件读写速度达到硬件I/O的数倍。对于数据密集型计算而言PVFS可以将I/O时间开销分摊到每一个节点上,从而减少整体I/O时间开销,并且在对单个大容量数据单独进行读写时PVFS可以提高数倍的速度。
2.PVFS无需特殊硬件设备支持,任何Linux系统都可以运行PVFS。所以在一个正常运行的Hadoop集群上,只需要安装部署PVFS与本发明实现的各模块就可以直接将Hadoop运行在PVFS上,无需更换硬件设备。
3.PVFS作为一个独立的分布式文件系统功能简单,系统开销较小,这一点与目前其他主流分布式文件系统不同,而与HDFS较为相像。在部署为Hadoop存储模块时,PVFS的功能可以完全提供Hadoop所需的服务,并且由于系统开销较小,所以可以避免过多的占用节点的运算资源。
4.PVFS的文件区块可以自由设定,不必与Hadoop的MapReduce分块相同,所以可以用更适合数据特征的方式进行分块存储,提高数据物理存储的规律性,方便数据的读写与维护。
经试验,在一个具有4个节点的小型万兆网集群中,PVFS对单个文件的读写速度平均比HDFS高两倍以上。
进一步的,本发明选择使用PVFS来替代Hadoop存储模块,不仅提高了Hadoop的效率,还解决了PVFS本身的缺陷,并利用PVFS的不足反而提高了效率,实现了双向改进。作为一个独立的分布式文件系统,PVFS也有它的不足之处,PVFS只提供了对文件的读、写、覆盖操作,在对文件进行修改时无法保留文件的编辑权限,这就造成了多个节点同时编辑同一个文件的同一个区块时有可能出现读写的同步错误,只能保留最后的一个编辑结果。但是Hadoop中的文件操作只有读(READ)、写(WRITE)和扩展(APPEND)三种,不会出现多个节点同时编辑同一个文件的同一个区块这种情况,本发明实现PVFS与Hadoop的结合后,完美的避免了上述同步错误。另一方面,由于PVFS没有使用现有文件系统中流行的租约或者上锁的方式来避免上述同步错误,也就是在Hadoop中不会出现的错误,反而会节省这部分的开销,提升其在Hadoop中的表现。
综上所述,本发明提供了一种用PVFS替代Hadoop存储模块的方法,旨在选取一种更适合的分布式文件系统作为Hadoop的存储模块来代替HDFS,以减少Hadoop在文件操作方面的开销,提升Hadoop在MapReduce计算,尤其是数据密集型计算时的表现。
附图说明
图1为本发明实现系统的层次结构。
图2为本发明实现系统的工作流程。
图3为本发明方法中PVFS程序接口模块的使用流程。
图4为本发明方法中,使用PVFS作为Hadoop存储模块所需修改的配置。
图5为本发明方法中Hadoop-PVFS模块的工作流程。
图6为本发明方法中JNI连接模块的工作流程。
图7为本发明方法实验结果的部分文本。
具体实施方式
本发明提供了一种使用PVFS替代Hadoop存储模块的实现方法,使用并行虚拟文件系统PVFS替代了Hadoop的分布式文件系统HDFS模块。本发明实现了从Hadoop到PVFS的连接,主要包括三个模块:PVFS程序接口模块、Hadoop-PVFS模块与JNI连接模块。
PVFS程序接口模块是一个C语言模块,编译为动态链接库“.so”,封装了PVFS的程序接口,使PVFS的内部参数对用户透明。
之所以需要编写PVFS程序接口模块,是因为PVFS并没有提供完善的API。PVFS的程序接口较为依赖于PVFS内核模块与ROMIO等类库,其中PVFS内核模块对Linux内核版本要求严格,而ROMIO等类库的使用并不广泛。由于PVFS内核模块支持的内核版本较少,而ROMIO等类库又不常用,所以在编程使用PVFS时往往需要调用PVFS的内部函数。PVFS内部函数并不是完整的接口,执行一条操作请求往往需要调用数个函数,并且在调用PVFS内部函数完成操作请求时,用户需要获得、维护并使用一些PVFS内部参数,这样会使程序的编写更为困难,并且使用内部参数时更容易出现不可预料的错误。所以本发明首先实现了PVFS程序接口模块,该模块不仅可以用于Hadoop到PVFS的连接,也可以单独用于其他程序对PVFS的使用。
PVFS程序接口模块提供了文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询、系统状态查询等基本操作的函数接口,并重新封装了初始化系统句柄、获得操作句柄等函数,用户只需要申请相应的句柄后直接调用操作函数即可进行相应的操作,无需手动管理一些PVFS内部的中间变量与参数。
Hadoop-PVFS模块是一个JAVA语言模块,编译为JAVA归档文件“.jar”,通过PVFS程序接口模块调用PVFS,并为Hadoop提供服务。
本发明中,Hadoop-PVFS模块设置为Hadoop的一个可装卸模块,将Hadoop-PVFS模块的JAVA归档文件复制到Hadoop的相应目录下即可使用。当需要使用PVFS作为Hadoop的存储模块时,只需将Hadoop配置文件作少许修改即可,具体而言就是在Hadoop中保存常规配置的配置文件core-site.xml中定义程序需要调用的文件系统接口类的类名;将配置文件改回原样即可继续使用HDFS作为Hadoop的存储模块,无需卸载Hadoop-PVFS模块。另外,Hadoop-PVFS模块可以从Hadoop配置文件获取一些可以自定义的PVFS相关参数,例如PVFS分块大小、PVFS载入点等参数,在替换Hadoop存储模块时无需用户更改应用程序,只需要进行相应的配置即可。
Hadoop-PVFS模块包含PvfsAbstractFileSystem类、PvfsFileStatus类、PvfsFileSystem类、PvfsFsStatus类、PvfsInputStream类、PvfsOutputStream类以及PvfsUtil类,为Hadoop提供PVFS文件系统接口、PVFS输入流、PVFS输出流、PVFS文件状态和PVFS系统状态类,向Hadoop提供文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询、系统状态查询等服务。收到Hadoop的文件操作请求时,Hadoop-PVFS模块负责分析请求,转化为方便PVFS处理的基本件操作,并向PVFS程序接口模块提出操作请求进而调用PVFS,再从PVFS接收返回值,并将返回值或数据转化为方便Hadoop处理的数据结构,然后返回给Hadoop。
JNI连接模块是一个C语言模块,编译为动态链接库“.so”,用于连接PVFS程序接口模块与Hadoop-PVFS模块。
由于PVFS程序接口与Hadoop-PVFS模块分别由C语言和JAVA语言编写,所以需要使用JNI连接模块将两个模块相连接。JNI连接模块对文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询、系统状态查询等操作分别进行了转译,首先从JAVA可识别的参数转化为C可识别的参数,然后申请操作所需的句柄、执行对应的操作,最后将返回值或数据转化为JAVA可识别的参数。
本发明分为PVFS程序接口模块、Hadoop-PVFS模块与JNI连接模块三个部分,它们共同工作完成了Hadoop与PVFS的连接,包括Hadoop和PVFS后总共有五个部分,其层次图如图1所示。从上到下分别为Hadoop、Hadoop-PVFS模块、JNI连接模块、PVFS程序接口模块与PVFS。
本发明的工作流程如图2所示,基本步骤如下:
(1)Hadoop需要进行文件操作。
(2)判断是否已经定义了文件所属文件系统,若已经定义了则执行(4),否则执行(3)。
(3)根据文件路径定义文件所属的文件系统。
(4)判断已定义的文件系统是否为PVFS文件系统,若不是则进入其他文件系统的工作流程,否则执行(5)。
(5)判断该操作是否为已定义的PVFS操作,若不是则提示错误,否则执行(6)。
(6)将该操作转化为一个或多个基本操作。
(7)通过JNI连接模块将基本操作转化为C语言。
(8)调用PVFS程序接口模块将基本操作提交至PVFS。
(9)PVFS执行操作。
(10)通过PVFS程序接口模块获得基本操作的返回值与数据。
(11)通过JNI连接模块将返回值与数据转化为JAVA可识别的格式。
(12)通过Hadoop-PVFS将返回值与数据封装为Hadoop可用的数据结构。
(13)文件操作完成。
其中步骤(1)(2)(13)由Hadoop执行,(3)(4)由Hadoop根据相关配置执行,(5)(6)(12)由Hadoop-PVFS模块执行,(7)(11)由JNI连接模块执行,(8)(10)由PVFS程序接口模块执行,(9)由PVFS执行。
PVFS程序接口模块将PVFS暴露的函数封装为基本文件操作。PVFS程序接口模块的总体思想就是将文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询、系统状态查询等基本操作单独作为函数封装起来,从而使PVFS内部参数与临时变量对用户透明。
PVFS程序接口模块提供了一系列接口函数,主要分为三类。第一类为基本操作函数,用来执行上述某一项基本操作;第二类为句柄相关函数,用于申请与释放句柄;第三类为工具函数,是基本操作的一部分,但不会产生中间变量。在Hadoop与PVFS连接的过程中,仅用到了第一类与第二类函数。
PVFS程序接口模块的基本操作函数与PVFS函数的对应关系如表1所示。
表1 PVFS程序接口模块的基本操作函数对应的PVFS函数
其中很多PVFS程序接口模块的基本操作函数对应了多个PVFS函数,这是因为在一个基本操作中,往往需要经过一次或多次调用PVFS函数获得中间变量并进行处理的过程,这也是为什么本发明需要将PVFS进行一次程序接口封装。例如PVFS程序接口模块的open操作流程,需要用到PVFS_sys_lookup、PINT_lookup_parent等多个函数,并且维护与使用resp_lookup、resp_getattr、resp_create等类型的多个中间变量,如果不进行封装则非常的繁琐并且在编程时容易出错。
PVFS程序接口模块的使用方式如图3所示,对PVFS系统依次初始化系统句柄、申请操作句柄、然后执行相应操作。其中初始化系统句柄只能执行一次,申请操作句柄在一段操作序列中可以只执行一次,执行完毕后需要释放句柄。
Hadoop-PVFS模块包含PvfsAbstractFileSystem类、PvfsFileStatus类、PvfsFileSystem类、PvfsFsStatus类、PvfsInputStream类、PvfsOutputStream类以及PvfsUtil类,其中PvfsAbstractFileSystem类、PvfsFileSystem类、PvfsInputStream类和PvfsOutputStream类都继承自Hadoop原有的对应虚类。在Hadoop运行时,根据读到的配置文件与文件操作对象的路径共同决定这些虚类的实例属于哪些子类,所以通过设置配置文件即可以选择是否使用PVFS作为Hadoop的存储模块。要使用PVFS作为Hadoop的存储模块,只需要在Hadoop中保存常规配置的配置文件core-site.xml中定义一些pvfs2相关键值就可以了,如图4所示。
PvfsAbstractFileSystem类继承自Hadoop原有的AbstractFileSystem类。AbstractFileSystem类在Hadoop中扮演了一个类似虚拟文件系统(VFS)的角色,仅由Hadoop系统在文件系统格式不明确的时候使用。PvfsAbstractFileSystem类实现了创建文件(createInternal)、创建目录(mkdir)、创建文件流(open)、修改文件所有者(setOwner)等17个虚方法,用于Hadoop所需的各种文件操作在PVFS上的实现;重写了AbstractFileSystem类原有的getUriPath方法,其功能改为将输入路径转化为可以识别的PVFS路径;相对AbstractFileSystem类新增了setConf方法,用于从配置文件读取用户对PVFS的一些配置;相对AbstractFileSystem类新增了Initialize方法并重写了析构方法finalize方法,用于初始化与释放PVFS系统句柄。
PvfsFileStatus类主要作为Hadoop与PVFS间传递文件信息的数据结构,相对Hadoop原有的FileStatus类新增了一些PVFS需要的文件信息的变量,并可以和FileStatus类相互转化。FileStatus类是Hadoop中保存文件信息的数据结构,本发明无法直接使用FileStatus类的原因有二,一是FileStatus类的变量无法完全满足PVFS文件信息的保存与传递,二是FileStatus类的成员变量都是私有变量,不方便通过JNI进行修改赋值。
PvfsFileSystem类继承自Hadoop原有的FileSystem类。FileSystem类是Hadoop中与文件系统交互最常用也是最核心的部分,用于管理与执行应用程序的所有文件操作与Hadoop系统的大部分文件操作。PvfsFileSystem类实现打开(open)、创建(create)、附加(append)、重命名(rename)等11个虚方法,用于创建文件流、创建文件、扩展文件、重命名文件等Hadoop所需的各种文件操作在PVFS上的实现;相对FileSystem类新增了获取文件名(getFileName)、获取路径(getFullPath)等方法,用于将输入路径转化为可以识别的PVFS路径;相对FileSystem类新增了setConf方法,用于从配置文件读取用户对PVFS的一些配置;相对FileSystem类新增了初始化(Initialize)方法并重写了析构方法finalize,用于初始化与释放PVFS系统句柄。如上所述,PvfsFileSystem类与PvfsAbstractFileSystem类功能类似,但分工不同。
PvfsFsStatus类主要作为Hadoop与PVFS间传递文件系统信息的数据结构,主要用于传递系统容量、空闲容量等信息。实现PvfsFsStatus类而不直接使用Hadoop原有的FsStatus类,其原因是FsStatus类的成员变量都是私有变量,不方便通过JNI进行修改赋值。PvfsFsStatus类仅用于PvfsAbstractFileSystem类中。
PvfsInputStream类继承自Hadoop的FSInputStream类。在Hadoop系统中进行读文件操作时,Hadoop先读取文件信息,根据文件信息建立FSInputStream类,再以FSInputStream类为核心建立FSDataInputStream类,随后使用FSDataInputStream类作为输入流读取文件信息。PvfsInputStream类实现了搜索(seek)、读取(read)等虚方法,并重写或重载了一系列读操作相关的方法,将所述输入流与PVFS进行连接,并实现各种读操作的接口。由于PVFS的高随机读写性能,PvfsInputStream类新增了一个pos变量,用于记录与设置当前的偏移量,在进行读操作时直接使用偏移量从PVFS中读取数据。
PvfsOutputStream类继承自Hadoop的FSOutputSummer类。Hadoop系统中的写文件操作分为create与append两种,其中create为创建一个空白文件然后写入,append为打开一个已存在文件然后在文件末尾写入。在创建或打开文件后,Hadoop根据文件信息建立FSOutputSummer类,再以FSOutputSummer类为核心建立FSDataOutputstream类,随后使用FSDataOutputstream类作为输出流写入文件信息。PvfsOutputStream类实现了flush、writeChunk等虚方法,并重写或重载了一系列写操作相关的方法,将所述输出流与PVFS进行连接,并实现各种写操作的接口。输出时采用缓存机制,现将输出信息保存在PvfsOutputStream类的缓存中,等缓存写满、进行flush操作或关闭输出流时再将缓存中的数据一次性存入PVFS中,这样可以保证每次输出尽量都有一定的规模,以免输出数据只有一到两个分块的容量,导致PVFS的并行性无法得到发挥。
PvfsUtil类相当于Hadoop-PVFS与PVFS程序接口模块相连接的准备阶段,它将上述各类中需要进行的PVFS操作集中起来,转化为参数为尽量简单的数据结构的等价方法,然后通过JAVAH命令生成这些方法的C语言头文件交给JNI连接模块使用,PvfsUtil类相当于本系统从Java语言到C语言的链接中在Java端的接口。这样可以尽量避免JNI连接模块对复杂数据结构的转化操作,提高JNI连接模块的效率。
Hadoop-PVFS模块的工作流程如图5所示,当PvfsFileSystem类或PvfsAbstractFileSystem类执行文件操作时,首先对文件名进行补全,然后调用PvfsUtil类进行解析,以解析后的文件名为参数,通过PvfsUtil类对应的方法使用PVFS执行对应的操作,获得正确的返回值后,将返回值中的PvfsFileStatus类与PvfsFsStatus类转化为FileStatus类与FsStatus类,然后将结果返回给Hadoop。若执行的是读写操作,则使用PvfsInputStream或PvfsOutputStream创建一个输入流或输出流返回给Hadoop,在Hadoop使用输入输出流时隐性地调用PvfsUtil类进行读写操作。
JNI连接模块用于连接PVFS程序接口模块与Hadoop-PVFS模块,是一个C语言模块,使用JNI函数库,使JAVA程序可以运行。在编写JNI连接模块时,需要先用JAVAH命令生成PvfsUtil类对应的C头文件,然后根据生成的头文件编写模块。JNI中的每一个基本操作函数都对应了一个PvfsUtil类的方法与PVFS程序接口模块的函数。
JNI连接模块的工作流程如图6所示,首先将使用JNI库将JAVA可识别的参数转化为C可识别的格式,然后依次申请操作句柄、执行相应操作、然后释放相关句柄,最后使用JNI库将返回值与数据转化为JAVA可识别的格式。实际上如图6所示,JNI连接模块工作流程的中间部分其实就是PVFS程序接口模块的标准使用流程,由于在JAVA下不方便保存与处理句柄变量,所以将它们的申请与释放封装在JNI连接模块内。
Hadoop各示例算法以及Kirchhoff偏移算法在本发明所描述系统中运行情况良好,图7显示了Kirchhoff偏移算法在本发明所描述系统中运行结果的部分文本,证明了本发明的完整性与可行性。
以上是本发明的一个详细实现方案,根据实际物理环境或特定的计算问题还可以进行优化改动。
Claims (6)
1.一种用PVFS替代Hadoop存储模块的方法,其特征是使用并行虚拟文件系统PVFS代替Hadoop的分布式文件系统HDFS模块,包括以下步骤:
步骤1:编写PVFS程序接口模块,用于提供访问PVFS的操作请求的统一函数接口,将操作请求转化为相应的PVFS操作,并自动申请与PVFS管理相关的权限与句柄,所述PVFS程序接口模块包括对以下基本PVFS操作函数的封装:文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询和系统状态查询;
步骤2:编写Hadoop-PVFS模块,通过PVFS程序接口模块调用PVFS,并为Hadoop提供服务;
调用PVFS时,通过配置将Hadoop的存储模块选择为PVFS,Hadoop保留所有原有功能,由Hadoop-PVFS模块为Hadoop提供PVFS文件系统接口、PVFS输入流、PVFS输出流、PVFS文件状态和PVFS系统状态类,用于满足Hadoop的文件系统操作,
收到Hadoop的文件操作请求时,Hadoop-PVFS模块对请求进行分析,转化为对应于PVFS处理的基本件操作,并向PVFS提出操作请求,然后从PVFS接收返回值或数据,再将返回值或数据转化为对应于Hadoop处理的数据结构返回给Hadoop;
步骤3:设置JNI连接模块,使用JNI连接模块连接Hadoop-PVFS模块与PVFS程序接口模块。
2.根据权利要求1所述的一种用PVFS替代Hadoop存储模块的方法,其特征是PVFS程序接口模块为一个C语言模块,编译为动态链接库“.so”,其中封装了初始化系统句柄函数和获得操作句柄函数,申请相应的句柄后直接调用操作函数即可进行相应的操作。
3.根据权利要求1所述的一种用PVFS替代Hadoop存储模块的方法,其特征是Hadoop-PVFS模块是一个JAVA语言模块,编译为JAVA归档文件“.jar”,Hadoop-PVFS模块包含PvfsAbstractFileSystem类、PvfsFileStatus类、PvfsFileSystem类、PvfsFsStatus类、PvfsInputStream类、PvfsOutputStream类以及PvfsUtil类,为Hadoop提供所述的PVFS文件系统接口、PVFS输入流、PVFS输出流、PVFS文件状态和PVFS系统状态类,提供文件创建、文件访问、文件读取、文件写入、文件更新、目录列表、文件名查询、文件状态查询、系统状态查询的服务,实现Hadoop对PVFS的访问,其中:
PvfsAbstractFileSystem类继承自AbstractFileSystem虚类,实现Hadoop系统对PVFS的访问接口;
PvfsFileStatus类实现文件信息的存储与格式化,并提供转化为FileStatus类的方法,是在Hadoop与PVFS间传递文件信息的数据结构;
PvfsFileSystem类继承自FileSystem虚类,实现Hadoop系统及其中应用程序对PVFS的访问接口;
PvfsFsStatus类实现文件系统信息的存储与格式化,并提供转化为FsStatus类的方法,是在Hadoop与PVFS间传递文件系统信息的数据结构;
PvfsInputStream类继承自FSInputStream虚类,实现Hadoop对PVFS的读数据操作;
PvfsOutputStream类继承自FSOutputSummer虚类,实现Hadoop对PVFS的写数据操作;
PvfsUtil类为Hadoop-PVFS模块与PVFS程序接口模块相连接的准备阶段,它将PvfsAbstractFileSystem类、PvfsFileStatus类、PvfsFileSystem类、PvfsFsStatus类、PvfsInputStream类和PvfsOutputStream类中需要进行的PVFS操作集中起来,转化为参数为尽量简单的数据结构的等价方法,然后交给JNI连接模块使用,PvfsUtil类相当于从Hadoop-PVFS模块到PVFS程序接口模块的链接中在Hadoop-PVFS模块一端的接口。
4.根据权利要求3所述的一种用PVFS替代Hadoop存储模块的方法,其特征是通过对Hadoop配置文件内容的调整,实现对Hadoop-PVFS模块的类的选择,并传递PVFS需要的配置参数。
5.根据权利要求1所述的一种用PVFS替代Hadoop存储模块的方法,其特征是JNI连接模块是一个C语言模块,编译为动态链接库“.so”。
6.根据权利要求1-5任一项所述的一种用PVFS替代Hadoop存储模块的方法,其特征是所述方法使用PVFS-2.8.2版本与Hadoop-2.4.1版本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510229869.8A CN104850401B (zh) | 2015-05-07 | 2015-05-07 | 一种用PVFS替代Hadoop存储模块的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510229869.8A CN104850401B (zh) | 2015-05-07 | 2015-05-07 | 一种用PVFS替代Hadoop存储模块的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104850401A true CN104850401A (zh) | 2015-08-19 |
CN104850401B CN104850401B (zh) | 2018-04-24 |
Family
ID=53850064
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510229869.8A Active CN104850401B (zh) | 2015-05-07 | 2015-05-07 | 一种用PVFS替代Hadoop存储模块的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104850401B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371838A (zh) * | 2016-08-31 | 2017-02-01 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464453A (zh) * | 2002-06-06 | 2003-12-31 | 联想(北京)有限公司 | 基于分布式文件系统的文件存储系统及其文件访问方法 |
CN1553325A (zh) * | 2003-06-05 | 2004-12-08 | 联想(北京)有限公司 | 一种透明扩充文件系统功能的方法 |
-
2015
- 2015-05-07 CN CN201510229869.8A patent/CN104850401B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464453A (zh) * | 2002-06-06 | 2003-12-31 | 联想(北京)有限公司 | 基于分布式文件系统的文件存储系统及其文件访问方法 |
CN1553325A (zh) * | 2003-06-05 | 2004-12-08 | 联想(北京)有限公司 | 一种透明扩充文件系统功能的方法 |
Non-Patent Citations (1)
Title |
---|
WITTAWANT TANTISIRIROJ 等: ""On the Duality of Data-intensive File System Design: Reconciling HDFS and PVFS"", 《PROCEEDINGS OF 2011 INTERNATIONAL CONFERENCE FOR HIGH PERFORMANCE COMPUTING, NETWORKING, STORAGE AND ANALYSIS》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106371838A (zh) * | 2016-08-31 | 2017-02-01 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
CN106371838B (zh) * | 2016-08-31 | 2019-10-18 | 福建联迪商用设备有限公司 | 一种维护软件包依赖关系的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104850401B (zh) | 2018-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10768919B2 (en) | Package installation on a host file system using a container | |
US10534671B1 (en) | Container image layer compaction | |
Sevilla et al. | Malacology: A programmable storage system | |
US20140114952A1 (en) | Optimizing queries of parallel databases | |
CN105808323A (zh) | 一种虚拟机创建方法及系统 | |
CN107977446A (zh) | 一种基于数据分区的内存网格数据加载方法 | |
CN109314721A (zh) | 分布式文件系统的多个集群的管理 | |
US10489356B1 (en) | Truncate and append database operation | |
US20230334031A1 (en) | Versioned relational dataset management | |
US9535678B2 (en) | Providing distributed array containers for programming objects | |
CN109933338A (zh) | 区块链部署方法、装置、计算机设备和存储介质 | |
Fan et al. | Gear: Enable efficient container storage and deployment with a new image format | |
CN112000649A (zh) | 一种基于map reduce的增量数据同步的方法和装置 | |
CN116737363A (zh) | 深度学习平台的数据集缓存加速方法、系统、设备及介质 | |
US20220121880A1 (en) | Managing and streaming a plurality of large-scale datasets | |
CN110795416A (zh) | 一种文件复制方法、装置、设备及可读存储介质 | |
CN107113231A (zh) | 将基于图形的计算卸载到后端设备 | |
CN112818176A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN104850401A (zh) | 一种用PVFS替代Hadoop存储模块的方法 | |
CN102360382B (zh) | 一种高速对象并行存储系统目录复制方法 | |
CN116594978A (zh) | 基于用户态文件系统的前端模块管理器、管理方法及系统 | |
CN115983047A (zh) | 一种适用于多图形接口的跨平台的仿真系统 | |
Donnelly et al. | Confuga: scalable data intensive computing for POSIX Workflows | |
CN113238715B (zh) | 智能文件系统、及其配置方法、智能辅助计算设备和介质 | |
Grandi et al. | CMS computing model evolution |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |