首页> 中国专利> 一种分布式文件系统上基于硬件加速卡的压缩解压缩方法

一种分布式文件系统上基于硬件加速卡的压缩解压缩方法

摘要

本发明公开了一种分布式文件系统上基于硬件加速卡的压缩解压缩方法,属于分布式文件系统技术领域。该技术包括:客户端向数据节点写数据时,先将文件块进行分片,再经硬件加速卡对分片进行压缩,将压缩后的分片发送至数据节点;客户端从数据节点读取数据时,先从数据节点取回包含读取数据的各分片,调用硬件加速卡对各分片解压缩并组合,将组合后的数据发送至上层应用。上层应用可独立使用硬件加速卡以数据流的形式对数据进行压缩或解压缩。本发明提出的技术在分布式文件系统和上层应用中使用硬件加速卡,只需要很小的缓存就能实现数据压缩或解压缩,可以卸载传统压缩方法所消耗的大量CPU资源,并且对系统的用户而言完全透明。

著录项

  • 公开/公告号CN103020205A

    专利类型发明专利

  • 公开/公告日2013-04-03

    原文格式PDF

  • 申请/专利权人 北京普泽天玑数据技术有限公司;

    申请/专利号CN201210518038.9

  • 发明设计人 刘佳;胡肖;查礼;

    申请日2012-12-05

  • 分类号G06F17/30(20060101);

  • 代理机构11332 北京品源专利代理有限公司;

  • 代理人马晓亚

  • 地址 100083 北京市海淀区成府路28号9层4-906、4-908号

  • 入库时间 2024-02-19 18:48:14

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-31

    授权

    授权

  • 2017-01-04

    发明专利公报更正 卷:32 号:42 IPC(主分类):G06F0017300000 更正项目:申请人|地址 误:中科天现数据科技股份有限公司|100190北京市海淀区中关村科学院南路6号科研综合楼900房间 正:中科天玑数据科技股份有限公司|100190北京市海淀区中关村科学院南路6号科研综合楼900房间 申请日:20121205

    发明专利更正

  • 2016-10-19

    著录事项变更 IPC(主分类):G06F17/30 变更前: 变更后: 申请日:20121205

    著录事项变更

  • 2015-04-29

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20121205

    实质审查的生效

  • 2013-07-24

    著录事项变更 IPC(主分类):G06F17/30 变更前: 变更后: 申请日:20121205

    著录事项变更

  • 2013-07-24

    专利申请权的转移 IPC(主分类):G06F17/30 变更前: 变更后: 登记生效日:20130701 申请日:20121205

    专利申请权、专利权的转移

  • 2013-04-03

    公开

    公开

查看全部

说明书

技术领域

本发明涉及分布式文件系统技术领域,尤其涉及一种分布式文件系统上基 于硬件加速卡的压缩解压缩方法。

背景技术

随着数据时代的到来,互联网所要处理的数据量日益增大,为了保证数据 的高可靠性,当前的分布式文件系统一般采用多副本策略。但是,在大规模机 群中这将会带来不可忽略的巨额存储开销,同时对于分布式文件系统之上的系 统或应用,如分布式数据库、分布式数据仓库、MapReduce框架或其它应用,也 有可能会产生冗余数据,使得数据的膨胀率更高,I/O性能成为系统的瓶颈日益 明显,现有的分布式文件系统难以同时满足高性能、高可靠性和低存储开销的 需求。

通过对分布式文件系统之上应用的类型进行分析可以得知,这些应用使用 或产生的大部分数据是文本信息,特别是离线或在线分析系统中的数据基本都 是文本,而文本本身是一种高度可压缩的数据,因此通过引入一种快速的数据 压缩方法,可以有效降低数据的存储开销,提高磁盘和网络I/O的有效带宽, 从而提高应用的吞吐量。

对于传统的采用软件方式实现数据压缩或解压缩方法,如GZip,该方式虽 然能使系统的存储开销减小,但是在压缩或解压缩过程中会占用大量的CPU资 源,有可能导致系统的处理能力下降。

发明内容

本发明的目的在于提出一种分布式文件系统上基于硬件加速卡的压缩解压 缩方法,能够使得在占用少量系统资源的情况下,完成对用户透明的压缩和解 压缩过程,降低系统的存储开销,并且具有良好的容错机制。

为达此目的,本发明采用以下技术方案:

一种分布式文件系统上基于硬件加速卡的压缩解压缩方法,所述方法包括:

分布式文件系统中的客户端向数据节点写入数据时:所述客户端将文件块 分成多个分片,调用硬件加速卡对各分片进行压缩,再将压缩后的各分片发送 至所述数据节点;所述数据节点将所述压缩后的各分片存储至压缩块文件中, 并更新所述数据节点中的索引文件;

分布式文件系统中的客户端从数据节点读取数据时:所述数据节点找到保 存读取数据的压缩块文件;所述客户端取回包含所述读取数据的各分片,调用 所述硬件加速卡对所述各分片进行解压缩,并组合解压缩后的各分片,将组合 后的解压缩数据发送至上层应用。

优选地,所述各分片为64KB大小的数据。

进一步地,所述硬件加速卡采用PCI接口;

所述硬件加速卡利用一个压缩方法库,实现对特定内存缓冲区中的数据进 行压缩或解压缩的功能;

所述硬件加速卡上配备有多个处理芯片,每个芯片可单独进行压缩或解压 缩操作,所述芯片由可编程逻辑器件构成;

其中,所述压缩方法库包括各种压缩解压缩算法和驱动程序,具有压缩和 解压缩两个接口,两个接口的参数均包括输入缓冲区和输出缓冲区;

进一步地,所述硬件加速卡利用一个压缩方法库,实现对特定内存缓冲区 中的数据进行压缩或解压缩的功能包括:所述压缩方法库将压缩或解压缩算法 经所述用户层编程接口接入;调用驱动程序,经所述用户层编程接口驱动硬件 加速卡,完成对特定内存缓冲区中的数据压缩或解压缩功能。

进一步地,所述调用所述硬件加速卡对各分片进行压缩包括:所述客户端 将所述各分片送入所述压缩方法库压缩接口的输入缓冲区,所述压缩方法库驱 动所述硬件加速卡,所述硬件加速卡完成对所述各分片的压缩过程,并将压缩 后的所述各分片送入所述压缩方法库压缩接口的输出缓冲区。

进一步地,所述调用所述硬件加速卡对所述各分片进行解压缩包括:所述 客户端将所述各分片送入所述压缩方法库解压缩接口的输入缓冲区,所述压缩 方法库驱动所述硬件加速卡,所述硬件加速卡完成对所述各分片的解压缩过程, 并将解压缩后的所述各分片送入所述压缩方法库解压缩接口的输出缓冲区。

进一步地,所述压缩方法库在对数据进行压缩或解压缩时,如果发现所述 硬件加速卡出现故障,将采用软件方式对数据进行压缩或解压缩。

进一步地,所述压缩后的分片信息包括头部信息和压缩数据,所述头部信 息包括原始数据大小、压缩数据大小、压缩算法类型。

进一步地,所述数据节点将所述压缩后的各分片存储至压缩块文件中,并 更新所述数据节点的索引文件包括:所述数据节点按顺序将所述压缩后的各分 片写到压缩块文件中,并另外维护一个索引文件;

其中所述索引文件按所述各分片在文件块原始文件中的顺序,记录所述各 分片在压缩块文件中的位置偏移量和长度。

进一步地,所述数据节点找到保存读取数据的压缩块文件包括:所述数据 节点根据所述读取数据在文件块原始文件中的偏移位置和长度,在所述索引文 件中找到所述读取数据在压缩块文件中的位置。

进一步地,所述分布式文件系统的上层应用可独立使用所述硬件加速卡以 数据流的形式对数据进行压缩或解压缩。

进一步地,所述上层应用使用所述硬件加速卡向数据流中写入数据的过程 包括:所述上层应用先对需要写入的数据进行缓存,如果缓存数据的大小超过 预设值,将所述预设值大小的数据作为一个压缩块,调用所述硬件加速卡对所 述压缩块进行压缩,并将压缩后的数据写到数据流中。

优选地,所述预设值取64KB。

进一步地,所述上层应用使用所述硬件加速卡从数据流中读取数据的过程 包括:所述数据流内部有一个缓冲区,用于缓存已解压缩数据,如果所述缓冲 区不为空,将所述已解压缩数据发送至所述上层应用,如果所述缓冲区为空, 则从所述数据流中读取一个压缩数据块,调用所述硬件加速卡对所述压缩数据 块进行解压缩,并将解压缩后的数据存至所述缓冲区中。

本发明技术方案的优势在于:

在大型分布式文件系统上采用PCI接口的硬件加速卡来完成数据压缩或解 压缩,过程中只消耗少量系统资源,可以卸载传统压缩方法所消耗的大量CPU 资源;

数据的压缩或解压缩对于用户是完全透明的,上层应用无需做任何改动, 并且无论是写入或读取数据,都可以提高磁盘和网络I/O的有效带宽;

采用分片式压缩格式,将文件分成大小为64KB的分片,能达到较好的压缩 效果,而且对于硬件加速卡只需要很小的缓存就能实现压缩;

在硬件加速卡出现故障时,压缩方法库能够切换到软件方式进行压缩或解 压缩,具有良好的容错机制;

分布式文件系统的上层应用可独立使用硬件加速卡创建输入流或输出流, 用以封装原有的输入流或输出流,能方便地对数据进行压缩或解压缩。

附图说明

图1是本发明具体实施例一提供的一种分布式文件系统上基于硬件加速卡 的压缩解压缩方法的系统结构示意图;

图2是本发明具体实施例一提供的分布式文件系统上基于硬件加速卡的压 缩解压缩方法的数据写入流程示意图;

图3是本发明具体实施例一提供的客户端调用硬件加速卡压缩数据流程示 意图;

图4是本发明具体实施例一提供的分布式文件系统上基于硬件加速卡的压 缩解压缩方法的文件块格式示意图;

图5是本发明具体实施例一提供的分布式文件系统上基于硬件加速卡的压 缩解压缩方法的数据读取流程示意图;

图6是本发明具体实施例二提供的另一种分布式文件系统上基于硬件加速 卡的压缩解压缩方法的系统结构示意图;

图7是本发明具体实施例二提供的上层应用压缩数据流程示意图;

图8是本发明具体实施例二提供的上层应用解压缩数据流程示意图。

具体实施方式

下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。

实施例一

本实施例基于Apache HDFS(Hadoop DistributedFile System,分布式文 件系统)实现基于硬件加速卡的压缩原型,HDFS为Google GFS的开源实现,是 Hadoop生态圈各项目的基础。

HDFS上层应用使用客户端来写入或读取文件。HDFS中一个文件会被分成多 个大小相同的文件,最后一个文件块的大小可能比其它的文件块小。属于同一 个文件的不同文件块可能存储在不同的数据节点上,且每个数据块在数据节点 中共有3个副本。

参见图1,一种分布式文件系统上基于硬件加速卡的压缩解压缩方法的系统 结构示意图。本实施例提供的压缩解压缩方法是通过调用硬件加速卡,来完成 对文件块的压缩或解压缩,其压缩或解压缩过程工作在客户端与数据节点。该 方法在硬件加速卡之上实现了一个压缩方法库。压缩方法库包括各种压缩解压 缩算法和驱动程序,具有压缩和解压缩两个接口,两个接口的参数均包括输入 缓冲区和输出缓冲区,方便应用使用硬件加速卡。压缩方法库将压缩或解压缩 算法经所述用户层编程接口接入,调用驱动程序,经所述用户层编程接口驱动 硬件加速卡,将数据送往硬件加速卡的缓存,由硬件加速卡完成对数据的压缩 或解压缩,操作完成后再从硬件加速卡的缓存读回数据。由此可见,压缩方法 库通过调用驱动程序来驱动硬件加速卡,完成数据的压缩或解压缩。

硬件加速卡采用PCI(Peripheral ComponentInterconnect,外设互联接 口)接口,能在普通的商用机器上使用,通过将压缩方法库中的压缩算法经用 户层编程接口接入,以硬件的方式实现对特定内存缓冲区中的数据进行压缩或 解压缩的功能。硬件加速卡上配备有多个处理芯片,每个芯片可以单独进行压 缩或解压缩操作,因此支持同时执行多个操作。各芯片由可编程逻辑器件构成。

参见图2,分布式文件系统上基于硬件加速卡的压缩解压缩方法的数据写入 流程示意图。当客户端向数据节点写入数据的过程如下:

101:客户端调用硬件加速卡对用户数据进行压缩,生成压缩后的多个分片。

102:客户端将压缩后的各分片发送至第一数据节点。

103:第一数据节点更新块文件和索引文件,并复制压缩后的各分片,将其 发送至第二数据节点。

104:第二数据节点更新块文件和索引文件,并复制压缩后的各分片,将其 发送至第三数据节点。

105:第三数据节点更新块文件和索引文件。

其中,步骤101中客户端调用硬件加速卡对用户数据进行压缩的过程,参 见图3,具体步骤如下:

201:当客户端缓存的用户数据大小达到一个文件块大小时,客户端将用户 数据进行分片,各分片大小要适中,以便能够达到较好的压缩效果,而且对于 硬件加速卡只需要很小的缓存就能实现压缩或解压缩。优选的各分片大小采用 64KB。

202:客户端将各分片送入压缩方法库压缩接口的输入缓冲区,压缩方法库 调用驱动程序来驱动硬件加速卡,硬件加速卡完成对各分片的压缩过程,并将 压缩后的各分片送入压缩方法库压缩接口的输出缓冲区。

203:客户端从压缩方法库压缩接口的输出缓冲区读回压缩后的各分片。

另外,步骤103、104、105中数据节点更新块文件和索引文件,具体的过 程为:数据节点顺序存储压缩后的各分片至压缩块文件中,在维护原有索引的 基础上另外维护一个索引文件,新维护的索引文件按各分片在文件块原始文件 中的顺序,记录各分片在压缩块文件中的位置,根据索引文件能够快速定位特 定分片。

图4是本实施例提供的分布式文件系统上基于硬件加速卡的压缩解压缩方 法的文件块格式示意图。当客户端未对用户数据进行压缩时,HDFS数据节点保 存的是未压缩块,包括块文件和元文件。元文件是用于描述要素、数据集或数 据集系列的内容、覆盖范围、管理方式等有关信息。当客户端使用硬件加速卡 对用户数据进行压缩时,HDFS数据节点保存的是压缩块,压缩块包括压缩块文 件、索引文件、元文件。压缩块文件由顺序存储的压缩分片构成,每个压缩分 片包括头部信息和压缩数据,头部信息包括原始数据大小、压缩数据大小、压 缩算法类型。根据各压缩分片的头部信息,可以按压缩算法类型对数据进行解 压缩。根据原始数据大小这个信息,很容易计算出当前分片在文件块原始文件 中的起始位置。索引文件由各分片索引构成,所述各分片索引记录着各压缩分 片在压缩块文件中的偏移量和长度。

参见图5,分布式文件系统上基于硬件加速卡的压缩解压缩方法的数据读取 流程示意图。当客户端从数据节点读取数据时,具体过程如下:

301:在数据节点上寻找保存读取数据的压缩块文件,并将找到的读取数据 压缩块文件中的各分片发送至客户端。其中,数据节点根据读取数据在文件块 原始文件中的偏移位置和长度,在新维护的索引文件中找到读取数据在压缩块 文件中的起始位置,最终寻找到保存读取数据的各分片。例如现有一个1MB大 小的原始文件,要读取从256KB位置开始的16KB数据,由于每个未压缩分片大 小为64KB,可知要读取的数据在第5个分片中。在压缩块文件中首先读出第1 个压缩分片的头部信息,然后跳过压缩数据部分,定位到第2个分片的起始位 置,依此类推,直到定位到第5个分片,读出第5个分片的压缩数据,将数据 解压缩后从中读出16KB的数据。

302:客户端接收读取数据压缩块文件中的各分片,并将各分片送入压缩方 法库解压缩接口的输入缓冲区,压缩方法库调用驱动程序来驱动硬件加速卡, 驱动硬件加速卡完成对各分片的解压缩过程,并将解压缩后的各分片送入压缩 方法库解压缩接口的输出缓冲区。

303:客户端从解压缩接口的输出缓冲区读回解压缩后的各分片,并对各解 分片按顺序组合成完整的请求数据文件块,将其发送至上层应用。

上述基于分片的头部信息,能够有效完成一些操作。在分布式文件系统中, 经常会遇到需要把一个大文件分割成多个小文件或在一个大文件中随机读取一 部分数据的情况。在对大文件进行数据切分或随机读操作时,只需读取压缩分 片的头部信息,获取分片压缩后的数据大小,然后跳过压缩数据部分,经过多 次重复操作,定位到大文件指定位置。在此过程中,不必读取压缩数据,也不 需要解压缩数据,减少了很多I/O操作,增加了灵活性。

当压缩方法库通过驱动程序驱动硬件加速卡,以硬件的方式对数据进行压 缩或解压缩时,如果发现所述硬件加速卡出现故障,压缩方法库将采用软件方 式对数据进行压缩和解压缩,完成与硬件加速卡同样的处理结果。

本实施例基于硬件加速卡的压缩原型采用hadoop-0.20.2作为代码基础, 采用Java语言实现。

本实施例的优势在于:

1、借助硬件加速卡,压缩或解压缩过程只占用少量CPU资源,压缩处理吞 吐率高于磁盘I/O带宽,相比传统采用软件方式的压缩解压缩方法所节省的系 统资源可用于其它处理过程。

2、于目前测试效果看来,对于真实的数据,压缩比大约为25%左右,有效 降低了存储开销,将磁盘的有效带宽提高了4到5倍;

3、压缩解压缩工作在HDFS的客户端和数据节点,对上层应用完全透明, 因此基于HDFS的在线或离线数据分析系统,例如HBase、Hive等,均可方便使 用数据压缩,无需做任何改动,并且可以减少客户端与数据节点、数据节点之 间的数据传输量。

4、在HDFS中对压缩后的分片进行切分或随机读操作时,只需要读出压缩 分片的头部信息,跳过真实的压缩数据部分,从而减少IO操作。

5、在硬件加速卡出现故障不能使用时,压缩方法库采用软件方式来完成同 样的处理过程,形成了良好的容错机制。

实施例二

参见图6,另一种分布式系统上基于硬件加速卡的压缩解压缩方法的系统结 构示意图。本实施例是对实施例一的进一步延伸,硬件加速卡除了用于HDFS的 客户端与数据节点上之外,还可用于上层应用。对于HDFS上层应用,例如分布 式数据库、分布式数据仓库、MapReduce框架及其它需要数据存储的应用,可独 立的调用硬件加速卡,以数据流的形式对数据进行压缩或解压缩,然后将处理 后的数据存储在分布式文件系统、本地文件系统、在网络上进行传输或用于其 它用途。压缩方法库通过驱动程序驱动硬件加速卡进行压缩或解压缩,可以创 建数据输入流和输出流,数据的流式写入具有只追加数据、没有随机写的特征, 该特征有利于简化数据压缩。

上层应用在调用硬件加速卡压缩数据时会创建一个数据输出流,该流封装 了原来的输出流。参见图7,上层应用压缩数据流程示意图。上层应用往数据流 中写压缩数据时,具体过程如下:

401:上层应用缓存数据,如果缓存数据的大小超过64KB,每64KB大小的 数据作为一个数据块;

402:上层应用将各数据块送入压缩方法库压缩接口的输入缓冲区,压缩方 法库调用驱动程序来驱动硬件加速卡,驱动硬件加速卡完成对各数据块的压缩 过程,生成各压缩分块;

403:上层应用将各压缩分块写到原来的输出流;

上层应用在使用硬件加速卡解压缩数据时会创建一个数据输入流,该流封 装了原来的输入流。参见图8,上层应用解压缩数据流程示意图。上层应用从数 据流中读取压缩数据时,具体过程如下:

501:原来输入流内部的缓冲区缓存已解压缩的数据。

502:上层应用从数据输入流读取数据时,判断缓冲区是否为空。

503:如果缓冲区不为空,将缓冲区中的数据返回至上层应用。

504:如果缓冲区为空,则上层应用从原来的输入流中读取一个压缩块,压 缩方法库通过驱动程序驱动硬件加速卡,对压缩块进行解压缩,并将解压缩后 的数据存在缓冲区中,返回步骤502。

关于硬件加速卡、压缩方法库更加详细的描述,可以参见实施例一,这里 不再赘述。

对于原来就启用压缩的上层应用,只需做出少量改动,使用硬件加速卡替 换原来的压缩器,即可完成压缩算法的切换。在应用中根据配置来选择对应的 压缩方式,可以避免切换压缩方式时重新编译代码。

本实施例提供的压缩解压缩方法除在分布式系统上使用硬件加速卡外,对 上层应用还提供了一个硬件加速卡,上层应用可调用硬件加速卡,创建输入流 或输出流,用以封装原有的输入流或输出流,能方便地对数据进行压缩或解压 缩。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过 硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于 一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或 光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的 精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号