当前位置: 首页 > 专利查询>冯凌峰专利>正文

一种基于LevelDB的海量数据离线批量加载方法技术

技术编号:27265642 阅读:17 留言:0更新日期:2021-02-06 11:29
本发明专利技术公开了一种基于LevelDB的海量数据离线批量加载(BulkLoad)方法。该方法包含以下步骤:使用Mapdeuce程序将数据文件转换为LevelDB存储文件(SST文件)格式,再生成元数据current和manifest文件,并将SST文件移动到指定的路径下,从而实现了海量数据快速离线批量加载到LevelDB中。本发明专利技术将HBase Bulkload方法引入到LevelDB中,该方法在大量离线数据入库的情况下,比LevelDB原生的Put接口有着更高的入库性能。的入库性能。的入库性能。

【技术实现步骤摘要】
一种基于LevelDB的海量数据离线批量加载方法


[0001]本专利技术涉及一种海量数据离线批量加载(BulkLoad)到数据库的方法,特别一种基于LevelDB的海量数据离线批量加载(BulkLoad)方法。

技术介绍

[0002]随着大数据时代的发展,数据的增长速度越来越快。大量的数据,对数据库的实时存储提出了更高的要求。很多场景下,不仅有当日的实时数据需要入库,还有大量的离线数据也需要快速入库。
[0003]LevelDB是Google设计开发的Key-Value存储引擎,它应用于海量数据快速写入并且写多读少的场景,其底层文件为SST文件,元数据文件有Current文件和manifest文件,底层存储使用了LSM tree的思想,在入库的同时进行LSM tree的compaction。Compaction的作用是对数据进行压缩和排序,保证数据按key的字典序排列,删除掉一些不再有效的数据,减少文件数量等,它是一个比较耗费系统资源的操作,同时也会带来LevelDB的写放大问题。如果使用LevelDB的原生接口同时入库大量的实时数据和离线数据,Compaction会给系统带来比较大的压力,最终迫使LevelDB减慢数据入库的速度,达不到业务应用快速入库的要求。

技术实现思路

[0004]本专利技术为了解决现有技术存在的问题,提出了一种基于LevelDB的海量数据离线批量加载(BulkLoad)方法。本方法借鉴了HBase的BulkLoad方法,使用Mapdeuce程序将数据文件转换为LevelDB存储文件(SST文件)格式,再生成元数据current和manifest文件,并将SST文件移动到指定的路径下,从而实现了海量数据快速离线批量加载到LevelDB中。
[0005]本专利技术为实现专利技术目的,提出的基于LevelDB的海量数据离线批量加载(BulkLoad)方法,其步骤如下:步骤1. 使用Mapreduce将数据文件转换为SST文件。
[0006]步骤1.1.实现SST文件的输出类SstOutputFormat,继承于基类FileOutputFormat。实现基类FileOutputFormat的抽象方法getRecordWriter,返回一个RecordWriter对象,用于SST格式文件的输出。返回该对象时,使用LevelDB的写数据至磁盘的LogWriter对象重写RecordWriter的write和close方法。
[0007]步骤1.2. Map阶段:根据输入数据,调用LevelDB的K-V组织方式,封装K-V,并作为Map阶段的输出。
[0008]步骤1.3. Reduce阶段:实现K-V比较器,对Map阶段传递过来的K-V进行排序,并将有序的K-V写到输出流。
[0009]步骤1.4. 设置MapReduce JOB信息,根据输入数据的大小估算Reduce的个数,每个Reduce数据大小为SST文件的大小。
[0010]步骤2:生成LevelDB的元数据文件
步骤2.1.生成CURRENT文件:由于是批量生成.sst文件,且已经在MapReduce中做好Key的全局排序,因此所有的.sst文件的层级均默认设置为7,即批量离线入库的.sst文件无需进行Compaction。同时,意味着一个DB的MANIFEST仅存在一个文件MANIFEST-0,CURRENT永远指向MANIFEST-0。
[0011]步骤2.2.生成MANIFEST文件:配置MapReduce作业时,根据DB定义全局变量Map<String, Multimap<Integer, FileMetaData>>(Map<DB名称, Multimap<文件索引, 文件元数据信息>>),记录每个DB的文件元数据信息。DB的MapReduce作业完成后,将对应的Multimap<Integer, FileMetaData>对象刷入MANIFEST文件中。
[0012]步骤3:BulkLoad实现DB的加载:将生成的数据文件和元数据文件移动到指定的LevelDB目录中,生成一个LevelDB的DB实例。
[0013]本专利技术将HBase Bulkload方法引入到LevelDB中,提出了基于LevelDB的海量数据离线批量加载(BulkLoad)方法,该方法在大量离线数据入库的情况下,比LevelDB原生的Put接口有着更高的入库性能。
附图说明
[0014]图1是本专利技术方法程序框图。
具体实施方式
[0015]下面结合实施例和附图,对本专利技术方法作进一步详细说明。
实施例
[0016]1. 将本专利技术方法的程序部署在某公司的内网环境中。该公司使用某互联网厂商的大数据平台(以Hadoop生态圈相关技术为基座)进行线上数据分析和检索,提供给客户使用;同时该公司内部需要在有限的资源条件下对数据定期进行备份和快速检索,LevelDB刚好可以满足这个要求。
[0017] 安装LevelDB的环境:使用一台服务器,具体配置为:CPU Intel Xeon Silver 4110 2.1GHZ,内存:96GB,系统盘:SSD 960GB*2,数据盘SATA 4TB*12。
[0018]数据量:每月对增量数据同步入库一次,每次数据量大约为500GB,存储周期:3年。
[0019]2. 将安装LevelDB的服务器安装上Hadoop客户端和LevelDB的BulkLoad程序,如果有增量数据需要入库,LevelDB的BulkLoad程序运行步骤为:(1)向大数据平台Hadoop集群提交MapReduce任务,将Hadoop集群上的原始数据转化为LevelDB底层的SST文件。(2)将SST文件拉取到安装LevelDB的服务器上。(3)调用BulkLoad程序元数据生成程序,生成元数据,并将数据移动到LevelDB的数据目录下。
[0020]3. 将500GB的离线海量数据,分别按照传统的LevelDB put接口方式入库和按照步骤1的bulkLoad方法入库,使用传统入库需要22小时才能将所有数据入库到LeveDB,用户在相当长一段时间内没办法完全查询;而使用BulkLoad入库仅需要40分钟,在将LevelDB BulkLoad凌晨运行的情况下,基本不影响用户查询。
[0021]程序实验表明,较之于传统的LevelDB入库方法,本专利技术基于LevelDB的海量数据离线批量加载(BulkLoad)方法,在入库效率上有明显的提高。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于LevelDB的海量数据离线批量加载(BulkLoad)方法,其步骤如下:步骤1. 使用Mapreduce将数据文件转换为SST文件步骤1.1. 实现SST文件的输出类SstOutputFormat,继承于基类FileOutputFormat;实现基类FileOutputFormat的抽象方法getRecordWriter,返回一个RecordWriter对象,用于SST格式文件的输出;返回该对象时,使用LevelDB的写数据至磁盘的LogWriter对象重写RecordWriter的write和close方法;步骤1.2. Map阶段:根据输入数据,调用LevelDB的K-V组织方式,封装K-V,并作为Map阶段的输出;步骤1.3. Reduce阶段:实现K-V比较器,对Map阶段传递过来的K-V进行排序,并将有序的K-V写到输出流;步骤1.4. 设置MapReduce JOB信息,根据输入数据的大小估算Reduce的个数,每个Reduce数据大小为SST文件的大小;步骤2:生成LevelDB的元数据文件步骤2.1. 生成CU...

【专利技术属性】
技术研发人员:冯凌峰
申请(专利权)人:冯凌峰
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1