支持事务形式的中间件访问HDFS系统的方法及中间件与流程

文档序号:17762561发布日期:2019-05-24 21:49阅读:401来源:国知局
支持事务形式的中间件访问HDFS系统的方法及中间件与流程

本发明涉及数据存储访问领域,具体地涉及一种支持事务形式的中间件访问hdfs系统的方法及支持事务形式访问hdfs系统的中间件。



背景技术:

随着互联网技术的飞速发展,在互联网上流通的数据迅速增长,达到了一个难以预测的数量级。传统的关系型数据库无法满足海量数据的高效存储需求,特别是当数据量达到了tb甚至pb的数量级。如何存储这些海量数据,成为了互联网企业的一大技术难题。分布式文件系统的出现,有效地解决了海量数据存储的难题。由google公司设计提出的gfs(googlefilesystem)模型正是因为能够有效地解决海量数据的存储难题得到了业界的认可,而hdfs(hadoopdistributedfilesystem)作为gfs的开源实现,因其高容错性、低廉、高吞吐量等特点,成为目前比较流行的分布式文件系统之一。hdfs的数据访问方式有2中:1)应用程序直接访问hdfs;2)应用程序通过中间件访问hdfs。相比于第一种类型的访问模式,第二种更具有优越性:中间件的运用屏蔽了hdfs的底层细节,提供了一个数据访问接口,降低了访问hdfs程序的实现难度,减少了项目开发人员的编码工作量并能提升开发速度,同时更具正确性和安全性。

目前,由于hdfs不提供事务支持,开发人员访问hdfs对文件进行上传、删除、读取等操作时,可能会发生操作失败的情况。失败的可能原因如下:1)程序外部的原因,例如系统故障、数据损坏等;2)程序内部的原因,例如代码错误、找不到数据等。操作失败后,开发人员需要对失败的操作进行重做。显然,这会造成开发人员的工作量增大,故障恢复变得复杂繁琐、数据冗余、数据丢失等一系列问题。hdfs没有事务功能导致其应用有一定的局限性,已不能满足基于分布式文件系统的应用系统日益增长的需求。今年来,在分布式中间件和事物支持方面的研究已取得一些成果。wusai等设计了分布式文件系统的数据访问中间件,来支持混合工作负载;rajeevgupta等提出了一种中间件,被设计用于在hadoop上开发、调试和通过维护数据流来增加可用性。然而,分布式文件系统的中间件的事物支持还未研究实现,hdfs还不能提供事务支持。



技术实现要素:

本发明实施例的目的是提供一种支持事务形式的中间件访问hdfs系统的方法及支持事务形式访问hdfs系统的中间件,目的是解决现有技术中的中间件不支持事务形式访问hdfs系统。

为了实现上述目的,本发明实施例提供一种支持事务形式的中间件访问hdfs系统的方法,该方法包括:接收hdfs访问操作;判断该hdfs访问操作是事务性还是非事务性的;以及在所述hdfs访问操作为事务性的情况下,执行以下操作:初始化中间件对象;根据所述hdfs访问操作,调用读文件、删文件和/或写文件接口方法中的一者或多者进行文件操作;判断所述文件操作是否成功;及在所述文件操作成功的情况下,提交所述事务操作至所述hdfs,记录事务日志,否则,回滚所述事务操作,记录事务日志。

可选的,所述写文件操作包括:上传文件至hdfs;事务日志记录写文件操作和文件路径;以及返回写成功标识。

可选的,判断所述读文件操作是否成功包括:判断文件是否存在;在文件存在的情况下,判断在所述读文件操作前是否删除该文件;在所述文件已被删除的情况下,回滚所述读文件事务操作,否则,读取hdfs的文件,在文件不存在的情况下,判断在所述读文件操作前是否新增该文件;在未新增文件的情况下,回滚所述读文件事务操作,否则,读取hdfs的文件,以及读取hdfs文件后,判断文件读取是否异常;在所述文件读取发生异常的情况下,回滚所述读文件事务操作,否则,事务日志记录读操作,并返回读成功标识。

可选的,判断所述删文件操作是否成功包括:判断文件是否存在;在文件存在的情况下,判断在所述删文件操作前是否有其它删文件操作已删除文件;在所述其它删文件操作已删除该文件的情况下,返回删失败标识,否则,删除该文件,事务日志记录删操作,并返回删成功标识,在文件不存在的情况下,判断在所述删文件操作前是否新增该文件;在未新增文件的情况下,返回删失败标识,在有新增文件的情况下,删除该文件,事务日志记录删操作,并返回删成功标识。

可选的,事务性的hdfs访问操作包括多个文件操作。

另一方面,本发明提供一种支持事务形式访问hdfs系统的中间件,该中间件包括:接口单元、服务单元以及数据访问单元,其中所述服务单元判断所接收的hdfs访问操作是事务性还是非事务性的;在所述hdfs访问操作为事务性的情况下,所述接口单元调用服务单元,执行以下操作:根据所述hdfs访问操作,调用读文件、删文件和/或写文件接口方法中的一者或多者进行文件操作;判断所述文件操作是否成功;及在所述文件操作成功的情况下,通过所述数据访问单元提交所述事务操作至所述hdfs,记录事务日志,否则,回滚所述事务操作,记录事务日志。

可选的,执行所述写文件操作包括:所述接口单元调用所述服务单元,并通过所述数据访问单元上传文件至hdfs;服务单元操作事务日志记录写文件操作和文件路径;以及返回写成功标识。

可选的,服务单元判断所述读文件操作是否成功包括:判断文件是否存在;在文件存在的情况下,判断在所述读文件操作前是否删除该文件在所述文件已被删除的情况下,回滚所述读文件事务操作,否则,通过所述数据访问单元读取hdfs的文件,在文件不存在的情况下,判断在所述读文件操作前是否新增该文件;在未新增文件的情况下,回滚所述读文件事务操作,否则,通过所述数据访问单元读取hdfs的文件,以及读取hdfs文件后,判断文件读取是否异常;在所述文件读取发生异常的情况下,回滚所述读文件事务操作,否则,事务日志记录读操作,并返回读成功标识。

可选的,服务单元判断所述删文件操作是否成功包括:判断文件是否存在;在文件存在的情况下,判断在所述删文件操作前是否有其它删文件操作已删除文件;在所述其它删文件操作已删除该文件的情况下,返回删失败标识,否则,通过数据访问单元删除该文件,事务日志记录删操作,并返回删成功标识,在文件不存在的情况下,判断在所述删文件操作前是否新增该文件;在未新增文件的情况下,返回删失败标识,在有新增文件的情况下,通过数据访问单元删除该文件,事务日志记录删操作,并返回删成功标识。

可选的,事务性的hdfs访问操作包括多个文件操作。

本发明提供一种支持事务性操作的中间件,提供统一的数据访问接口,屏蔽了底层的hdfs系统的操作细节,方便用户对hdfs系统进行数据访问,同时可以提高数据访问的可靠性和安全性,此外,本发明所提供的中间件支持事务功能,还可以保证用户操作的事务的正确性,简化事务故障的恢复。

本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:

图1是本发明一实施例提供的支持事务形式的中间件访问hdfs系统的方法流程图;

图2是本发明一实施例提供的写文件操作流程图;

图3是本发明一实施例提供的读文件操作流程图;

图4是本发明一实施例提供的删文件操作流程图;

图5是本发明一实施例提供的支持事务形式的中间件访问hdfs系统的统结构示意图;

图6是本发明又一实施例提供的支持事务形式的中间件访问hdfs系统的系统结构示意图。

具体实施方式

以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。

事务是指访问并可能更新数据库中各种数据项的程序执行单元。访问hdfs系统的操作分为事务性和非事务性,其中事务性操作是指若执行多个文件操作,要么都成功,要么都失败;而非事务性操作是指若执行多个文件操作,则多个文件操作之间没有关系,互相独立。本申请发明人发现,目前支持通过中间件访问hdfs系统的中间件均不支持事务性操作,这会导致在实际工作过程中,若事务操作中的某一文件操作错误,数据恢复过程复杂且恢复时间较长,不便于使用。本发明实施例的目的是提供一种支持事务形式的中间件访问hdfs系统的方法和一种支持事务形式访问hdfs系统的中间件,其可提供事务功能,简化事务故障恢复的过程,减少恢复时间。

图1是本发明一实施例提供的支持事务形式的中间件访问hdfs系统的方法流程图。如图1所示,本发明一实施例提供了一种支持事务形式的中间件访问hdfs系统的方法,该方法包括:接收hdfs访问操作;判断该hdfs访问操作是事务性还是非事务性的;以及在hdfs访问操作流程为事务性的情况下,执行以下操作:初始化中间件对象;根据hdfs操作,调用读文件、删文件和/或写文件接口方法中的一者或多者进行文件操作;判断文件操作是否成功;及在文件操作成功的情况下,提交事务操作至hdfs系统,记录事务日志,否则,回滚所述事务操作,记录事务日志。

其中,事务日志记录文件操作信息,在文件操作失败时,调用回滚事务操作。所述回滚事务操作是指即根据事务日志记录的信息,将数据恢复到该失败文件操作之前的正确状态的行为。

其中,文件操作成功会返回成功标识,文件操作失败则会返回失败标识。

其中,事务性的hdfs访问操作可以包括多个文件操作。

此外,在确定hdfs访问操作为非事务性时,执行以下操作:初始化中间件对象;根据hdfs访问操作,调用读文件、删文件和/或写文件接口方法中的一者或多者对hdfs系统的文件进行操作;文件操作成功返回成功标识符,文件操作失败则返回失败标识符,事务日志记录文件操作信息。

图2是本发明一实施例提供的写文件操作流程图。如图2所示,本发明该实施例提供了一种写文件操作流程,该流程包括:上传文件至hdfs;事务日志记录写文件操作和文件路径;以及返回写成功标识。

图3是本发明一实施例提供的读文件操作流程图。如图3所示,本发明该实施例提供了一种读文件操作流程,该流程包括:判断文件是否存在;在文件存在的情况下,判断在所述读文件操作前是否删除该文件;在所述文件已被删除的情况下,回滚所述读文件事务操作,否则,读取hdfs的文件;在文件不存在的情况下,判断在该读文件操作前是否新增该文件;在未新增文件的情况下,回滚所述读文件事务操作,否则,读取hdfs的文件;以及在读取hdfs文件后,判断文件读取是否异常;在所述文件读取发生异常的情况下,回滚所述读文件事务操作,否则,事务日志记录读操作,并返回读成功标识。

例如,该hdfs访问操作包括写文件以及读文件操作(所述读文件操作要读取的文件为写文件操作刚写入的文件),则通过中间件访问hdfs系统的工作流程为:

接收hdfs访问操作,并判断该hdfs访问操作是事务性的还是非事务性的;

在所述hdfs访问操作为事务性的情况下:

初始化中间件对象;

将事务状态设置为“运行”,事务日志开始记录事务信息;

调用写文件和读文件这两种接口方法进行文件操作:

首先执行写文件操作:将要写入hdfs系统的文件上传至hdfs,事务日志记录该写文件操作和文件写入路径,并返回成功标识;

其次执行读文件操作:在确定所要读取的文件不存在,但本事务的写文件新增了该文件的情况下,读取所述文件,并在读取文件正常的情况下,事务日志记录上述读文件操作并返回成功标识;

hdfs访问操作的所有文件操作均返回了成功标识,提交该hdfs访问操作,并将事务状态设置为“成功”,事务日志记录事务信息;

hdfs访问操作完成。

例如,一个hdfs访问操作包括写文件以及读文件操作(所述读文件操作要读取的文件不存在,且该hdfs访问操作中的其他写文件操作也未写入所要读取的文件),则通过中间件访问hdfs系统的工作流程为:

接收hdfs访问操作,并判断该hdfs访问操作是事务性的还是非事务性的;

在所述hdfs访问操作为事务性的情况下:

初始化中间件对象;

将事务状态设置为“运行”,事务日志开始记录事务信息;

调用写文件和读文件这两种接口方法进行文件操作:

首先执行写文件操作:将要写入hdfs系统的文件上传至hdfs,事务日志记录该写文件操作和文件写入路径,并返回成功标识;

其次执行读文件操作:在确定所要读取的文件不存在,并且本事务的写文件未新增该文件的情况下,确定所要读取的文件不存在,回滚所述读文件操作,并返回失败标识;

hdfs访问操作的读文件操作返回了失败标识,回滚所有文件操作,即根据事务日志确定事务对象的操作并将之前执行的操作恢复,将事务状态设置为“失败”,事务日志记录事务信息;

hdfs访问操作完成。

其中,由于hdfs访问操作是事务性的,因此,在所有文件操作均返回成功标识的情况下才会提交文件操作,如若有一个文件操作返回失败标识,则该事务性hdfs访问操作失败,需要调用回滚事务操作,将之前执行的文件操作恢复。

图4是本发明一实施例提供的删文件操作流程图。如图4所示,本发明该实施例提供了一种删文件操作流程,该流程包括:判断文件是否存在;在文件存在的情况下,判断在所述删文件操作前是否有其它删文件操作已删除该文件;在所述其它删文件操作已删除该文件的情况下,返回删失败标识,否则,删除该文件,事务日志记录删操作,并返回删成功标识;在文件不存在的情况下,判断在所述删文件操作前是否新增该文件;在未新增文件的情况下,返回删失败标识,在有新增文件的情况下,删除该文件,事务日志记录删操作,并返回删成功标识。

例如,该hdfs访问操作包括写文件以及删文件操作(所述删文件操作要删除的文件为写文件操作刚写入的文件),则通过中间件访问hdfs系统的工作流程为:

接收hdfs访问操作,并判断该hdfs访问操作是事务性的还是非事务性的;

在所述hdfs访问操作为事务性的情况下:

初始化中间件对象;

将事务状态设置为“运行”,事务日志开始记录事务信息;

调用写文件和删文件这两种接口方法进行文件操作:

首先执行写文件操作:将要写入hdfs系统的文件上传至hdfs,事务日志记录该写文件操作和文件写入路径,并返回成功标识;

其次执行删文件操作:在确定所要删除的文件不存在,但本事务的写文件新增了该文件的情况下,删除所述文件,事务日志记录上述删文件操作并返回成功标识;

hdfs访问操作的所有文件操作均返回了成功标识,提交该hdfs访问操作,并将事务状态设置为“成功”,事务日志记录事务信息;

hdfs访问操作完成。

例如,该hdfs访问操作包括多个删文件操作(其中所述多个删文件操作所要删除的文件为同一个,并且hdfs存有该文件),则通过中间件访问hdfs系统的工作流程为:

接收hdfs访问操作,并判断该hdfs访问操作是事务性的还是非事务性的;

在所述hdfs访问操作为事务性的情况下:

初始化中间件对象;

将事务状态设置为“运行”,事务日志开始记录事务信息;

调用删文件接口方法进行文件操作:

首先执行第一个删文件操作:在确定所要删除的文件存在,并且在此之前没有其它删文件操作删除该文件的情况下,删除该文件,事务日志记录删操作,并返回成功标识,记录事务日志;

其次执行第二个删文件操作:在确定所要删除的文件存在,并且在此之前有其它删文件已删除该文件的情况下,返回失败标识,记录事务日志;

hdfs访问操作的一个删文件操作返回了失败标识,回滚所有文件操作,并将事务状态设置为“失败”,事务日志记录事务信息;

hdfs访问操作完成。

本发明实施例提供的事务性访问hdfs系统的操作可以包括多个文件操作,并且在全部文件操作均成功的情况下才提交对hdfs系统的操作,并将事务状态设置为“成功”;全部文件操作中只要有一个文件操作失败,则调用回滚事务方法,将失败的文件操作之前执行的操作恢复,并将事务状态设置为“失败”,事务日志记录事务信息。

采用本发明实施例所提供的支持事务形式的中间件访问hdfs系统的方法,可以简化事务故障的恢复,减少事务故障恢复时间,并能提高文件操作的可靠性和安全性。

图5是本发明一实施例提供的支持事务形式的中间件访问hdfs系统的系统结构示意图。如图5所示,本发明一实施例提供了一种支持事务形式访问hdfs系统的中间件,该中间件包括接口单元、服务单元以及数据访问单元。此外,还包括应用单元和数据存储单元。

所述应用单元用于向访问hdfs系统的应用程序提供对应的交互界面,应用程序调用中间件访问数据存储单元,应用单元则负责假面显示并得到返回的查询数据;接口单元,由六个接口方法组成:读文件、删文件、写文件、开始事务、提交事务及回滚事务,其中,读文件、删文件及写文件支持用户对hdfs进行数据操作,开始事务、提交事务及回滚事务保证用户对hdfs进行数据访问的同时支持事务;服务单元,由接口单元调用并为接口单元提供控制服务、日志操作服务及文件操作服务,其中,控制服务包括事务性或非事务性操作判断、文件存在判断、文件新增判断、文件删除判断,日志操作服务操作日志文件,文件操作服务对hdfs文件执行读、写、删操作;数据访问单元,处理底层的数据访问和通讯功能,为上层的服务单元提供数据服务;数据存储单元包括hdfs文件系统。

具体而言,用户通过应用单元操作应用程序发出的hdfs访问操作指令,应用程序调用中间件访问数据存储单元,服务单元接收并判断所接收的hdfs访问操作是事务性还是非事务性的;在所述hdfs访问操作为事务性的情况下,接口单元调用服务单元,执行以下操作:根据hdfs访问操作,调用读文件、删文件和/或写文件接口方法中的一者或多者进行文件操作;判断文件操作是否成功;及在文件操作成功的情况下,通过数据访问单元提交所述事务操作至所述hdfs,记录事务日志,否则,回滚所述事务操作,记录事务日志;最后文件操作结果通过应用单元的交互界面进行显示。

其中,写文件操作包括:接口单元调用服务单元,并通过数据访问单元上传文件至hdfs;服务单元操作事务日志记录写文件操作和文件路径;以及返回写成功标识。

其中,服务单元判断读文件操作是否成功包括:判断文件是否存在;在文件存在的情况下,判断在所述读文件操作前是否删除该文件;在所述文件已被删除的情况下,回滚所述读文件事务操作,否则,通过所述数据访问单元读取hdfs的文件,在文件不存在的情况下,判断在所述读文件操作前是否新增此文件;在未新增文件的情况下,回滚所述读文件事务操作,否则,通过所述数据访问单元读取hdfs的文件,以及读取hdfs文件后,判断文件读取是否异常;在所述文件读取发生异常的情况下,回滚所述读文件事务操作,否则,事务日志记录读操作,并返回读成功标识。

其中,服务单元判断删文件操作是否成功包括:判断文件是否存在;在文件存在的情况下,判断在所述删文件操作前是否有其它删文件操作已删除文件;在所述其它删文件操作已删除该文件的情况下,返回删失败标识,否则,通过数据访问单元删除该文件,事务日志记录操作,并返回删除成功标识,在文件不存在的情况下,判断在所述删文件操作前是否新增此文件;在未新增文件的情况下,返回删失败标识,在有新增文件的情况下,通过数据访问单元删除该文件,事务日志记录删操作,并返回删成功标识。

其中,事务性的hdfs访问操作可以包括多个文件操作。

图6是本发明又一实施例提供的支持事务形式的中间件访问hdfs系统的系统结构示意图。与图5所示的支持事务形式的中间件访问hdfs系统的系统相比,数据访问单元还包括dao层、jdbc(javadatabaseconnectivity);数据存储单元还包括数据库。

本发明该实施例所提供的支持事务形式的中间件访问hdfs系统的系统,可以利用数据缓存机制,将用户进行数据操作时的部分操作数据缓存至数据库,以实现系统访问性能的游湖。其中,所述被缓存的数据可以是一直不变的或不经常改变的数据,例如文件路径等。

有关本发明提供的上述支持事务形式的中间件访问hdfs系统的具体细节及益处,可参阅上述针对本发明提供的上述支持事务形式的中间件访问hdfs系统的方法,于此不再赘述。

以上结合附图详细描述了本发明实施例的可选实施方式,但是,本发明实施例并不限于上述实施方式中的具体细节,在本发明实施例的技术构思范围内,可以对本发明实施例的技术方案进行多种简单变型,这些简单变型均属于本发明实施例的保护范围。

另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明实施例对各种可能的组合方式不再另行说明。

本领域技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得单片机、芯片或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

此外,本发明实施例的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明实施例的思想,其同样应当视为本发明实施例所公开的内容。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1