CN112650736A - 一种数据迁移方法及装置 - Google Patents

一种数据迁移方法及装置 Download PDF

Info

Publication number
CN112650736A
CN112650736A CN202011618158.7A CN202011618158A CN112650736A CN 112650736 A CN112650736 A CN 112650736A CN 202011618158 A CN202011618158 A CN 202011618158A CN 112650736 A CN112650736 A CN 112650736A
Authority
CN
China
Prior art keywords
data
migrated
partition
physical
tables
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
Application number
CN202011618158.7A
Other languages
English (en)
Other versions
CN112650736B (zh
Inventor
段宏宇
田莉萍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Agricultural Bank of China
Original Assignee
Agricultural Bank of China
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Agricultural Bank of China filed Critical Agricultural Bank of China
Priority to CN202011618158.7A priority Critical patent/CN112650736B/zh
Priority claimed from CN202011618158.7A external-priority patent/CN112650736B/zh
Publication of CN112650736A publication Critical patent/CN112650736A/zh
Application granted granted Critical
Publication of CN112650736B publication Critical patent/CN112650736B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/214Database migration support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/215Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供的数据迁移方法及装置,先梳理各个源数据库中属于同一个逻辑表的物理数据表,从而删除同一逻辑表对应的冗余物理数据表,然后,在单个源数据库内分逻辑表并行迁移,不同源数据库之间串行迁移,从而保证迁移性能和迁移准确性。Spark计算引擎是基于内存计算的大数据并行计算框架,该方案充分利用Spark内存计算的优势,充分发挥了分布式数据库和系统的高效特点,通过多个节点在内存中并行运算,提高了数据迁移的效率。而且,该方案使用Spark计算引擎做数据清洗时,只需业务人员提供相应的SQL语句便能快速完成对数据的清洗处理,人工成本低。

Description

一种数据迁移方法及装置
技术领域
本发明属于计算机技术领域,尤其涉及一种数据迁移方法及装置。
背景技术
很多企业的业务系统由于构建较早,而且使用传统的关系型数据库(如Oracle、MySQL、Sybase等),在数据表的设计上也不够成熟。随着企业业务系统承载业务增多,每日数据增量巨大,传统的关系型数据存储架构,在存储能力和性能上已不能满足当下的业务需求。因此,需要对系统进行重构,在重构的过程中通常面临数据库更换的场景,数据迁移就成为大多数系统重构面临的核心问题。
传统的一种数据迁移方式,如BCP Out+SQL Loader,该数据迁移方式是源数据库通过自带的导出数据文件接口将数据表导出成相应的数据文件,目的数据库通过自带的数据导入接口将数据文件加载成相应的数据表。该方式从逻辑上能够解决所有的数据迁移问题,并可以在导出文件后对数据进行清洗操作。但由于每一张数据表的迁移都涉及数据磁盘的读写,对拥有巨量数据的系统而言,迁移的时间非常长,企业无法接受这种数据迁移方式。
另一种是基于Sqoop的数据迁移方式,Sqoop是连接常见关系型数据库和Hadoop的桥梁,可以把关系型数据库的数据导入到Hadoop系统(如HDFS、HBase和Hive)中,以及,能够把数据从Hadoop系统里抽取并导出到关系型数据库里,且采用批处理方式进行数据传输。相较于BCP Out+SQL Loader,Sqoop的操作更加方便,其底层使用MapReduce计算框架,性能上也有较大的提升。但是Sqoop对部分小众的关系型数据如Sybase数据库不支持,而且,虽然Sqoop采用MapReduce计算框架,能在一定程度上提高迁移效率,但MapReduce仍然存在大量落地磁盘操作,迁移效率仍然不理想。
此外,由于企业业务系统建立较早,在数据表设计方面考虑不周全,导致大量数据冗余,甚至存在大量错误的数据。亟需借助数据迁移的机会对数据清洗,但是,若采用传统的数据文件迁移方式,通过更改数据文件内容,时间成本非常大的;若采用Sqoop组件进行数据迁移,通过编写MapReduce程序更改传输的数据,人力成本非常大。即,传统的数据迁移方式清洗成本很高。
发明内容
有鉴于此,本发明的目的在于提供一种数据迁移方法及装置,以提高数据迁移效率,同时,在数据迁移过程中对数据进行清洗,且清洗成本低,其公开的具体技术方案如下:
第一方面,本发明提供了一种数据迁移方法,包括:
基于Spark计算引擎梳理各个源数据库中属于同一逻辑表的所有物理数据表,并删除冗余数据,得到同一个所述逻辑表对应的待迁移物理数据表;
对于任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于所述同一逻辑表的待迁移物理数据表。
可选地,所述基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,包括:
对于并行迁移的不同逻辑表中的任一逻辑表,均执行以下步骤:
将所述源数据库中存储的属于所述任一逻辑表的各个待迁移物理数据表的配置信息存储至待迁移物理数据队列中;
当根据所述表配置信息确定所述待迁移物理数据表的总存储量超过预设阈值时,并行读取所述待迁移物理数据表中不同数据分片内的待迁移数据,其中,所述数据分片是将所述待迁移物理数据表中的数据按预设表字段划分得到;
当根据所述表配置信息确定所述待迁移物理数据表中存在存储量倾斜的数据分片时,将所述存储量倾斜的数据分片内的数据打散,并行读取所述数据分片内不同的待迁移数据;
将读取的待迁移数据迁移至目标数据库中的与所述待迁移物理数据表相匹配的目标数据表中,并重复以上步骤直到所述待迁移物理数据队列为空。
可选地,将同一所述待迁移物理数据表中的数据集按照指定表字段进行分割得到至少一个数据块,且在所述目标数据库中目标数据表中为每个所述数据块设置一个分区,且每个分区具有一个分区标识;
所述将读取的待迁移数据迁移至目标数据库中的所述目标数据表中,包括:
将读取的待迁移数据转换为目标格式数据,所述目标格式数据中包括与各个所述数据块相匹配的分区标识;
分别统计每个所述分区标识对应的所述目标格式数据的数量,得到每个所述分区标识对应的待迁移分区数据统计值;
针对任一所述分区标识,如果所述分区标识对应的已迁移分区数据统计值大于或等于所述待迁移分区数据统计值,确定所述分区标识对应的待迁移数据不需要迁移;
如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中。
可选地,如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中,包括:
如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,则将包含所述分区标识的目标格式数据更新至待迁移分区列表中;
如果所述待迁移分区列表不为空,则从所述待迁移分区列表中读取目标格式数据写入与所述分区标识相匹配的分区中,直到所述待迁移分区列表为空。
可选地,所述方法还包括:
在将包含所述分区标识的所述目标格式数据成功写入所述目标数据表中与所述分区标识相匹配的分区之后,将所述分区标识对应的已迁移分区数据统计值更新为所述分区标识对应的所述待迁移分区数据统计值。
可选地,所述将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中,包括:
如果所述待迁移数据通过并行读取同一时间分片的数据获得,则通过静态插入方式写入所述分区中;
如果所述待迁移数据通过其他读取方式获得,则通过动态插入方式复写入所述分区中。
可选地,所述并行迁移不同逻辑表中的待迁移物理数据表,还包括:
判断所述待迁移物理数据队列对应的逻辑表是否是首次迁移;
如果是首次迁移,在所述目标数据库中为所述逻辑表创建相匹配的目标数据表;
如果不是首次迁移,建立与所述待迁移物理数据表对应的源数据库之间的访问链接,通过所述访问链接从所述待迁移物理数据表中读取待迁移数据。
第二方面,本发明还提供了一种数据迁移装置,包括:
表梳理模块,用于基于Spark计算引擎梳理各个源数据库中属于同一逻辑表的所有物理数据表,并删除冗余数据,得到同一个所述逻辑表对应的待迁移物理数据表;
并行迁移模块,用于针对任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于所述同一逻辑表的待迁移物理数据表。
可选地,所述并行迁移模块包括:
队列构建子模块,用于将所述源数据库中存储的属于所述任一逻辑表的各个待迁移物理数据表的配置信息存储至待迁移物理数据队列中;
多分片并行读取子模块,用于当根据所述表配置信息确定所述待迁移物理数据表的总存储量超过预设阈值时,并行读取所述待迁移物理数据表中不同数据分片内的待迁移数据,其中,所述数据分片是将所述待迁移物理数据表中的数据按预设表字段划分得到;
分片内并行读取子模块,用于当根据所述表配置信息确定所述待迁移物理数据表中存在存储量倾斜的数据分片时,将所述数倾斜的数据分片内的数据打散,并行读取所述数据分片内不同的待迁移数据;
数据入库子模块,用于将读取的待迁移数据迁移至目标数据库中的与所述待迁移物理数据表相匹配的目标数据表中,并重复以上步骤直到所述待迁移物理数据队列为空。
第三方面,本申请还提供了一种电子设备,包括存储器和处理器;
所述存储器内存储有程序,所述处理器用于调用所述程序以执行第一方面任一项所述的数据迁移方法。
本发明提供的数据迁移方法,先梳理各个源数据库中属于同一个逻辑表的物理数据表,从而删除同一逻辑表对应的冗余物理数据表,然后,在单个源数据库内分逻辑表并行迁移,不同源数据库之间串行迁移,从而保证迁移性能和迁移准确性。其中,对于任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中的待迁移物理数据表迁移完,继续迁移下一个源数据库中的待迁移物理数据表。Spark计算引擎是基于内存计算的大数据并行计算框架,该方案充分利用Spark内存计算的优势,充分发挥了分布式数据库和系统的高效特点,通过多个节点在内存中并行运算,提高了数据迁移的效率。而且,该方案使用Spark计算引擎做数据清洗时,只需业务人员提供相应的SQL语句便能快速完成对数据的清洗处理,人工成本低。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种数据迁移方法的流程图;
图2是本申请实施例提供的一种数据迁移过程的示意图;
图3是本申请实施例提供的一种数据并行迁移过程的流程图;
图4是本申请实施例提供的另一种数据迁移方法的流程图;
图5是本申请实施例提供的一种数据迁移装置的结构示意图;
图6是本申请实施例提供的一种并行迁移模块的结构示意图;
图7是本申请实施例提供的一种数据入库子模块的结构示意图。
具体实施方式
在详细介绍本申请提供的数据迁移方案之前,先对相关术语进行解释:
Hadoop是一种由Apache基金会主导开发的分布式系统基础架构,是目前广泛使用的开源分布式系统平台,其生态环境内包含多种基础组件,如HDFS(Hadoop分布式文件系统)、Hive、Spark均为Hadoop生态环境的服务组件。
Hive是数据仓库基础工具,在Hadoop中用来处理结构化数据。它架构在HDFS之上,使得数据查询和分析方便。并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。
Spark是基于内存计算的大数据并行计算框架,Spark是Mapreduce的替代方案,而且兼容HDFS、Hive等分布式存储层,可融入Hadoop生态系统,以弥补Mapreduce的不足。
传统的关系型数据库,如Sybase数据库,由于条件限制,其底层物理数据表存储策略主要是根据存储量大小进行分库分表存储,这种存储方式会导致同一逻辑表因单表存储受限原因被拆分为多个物理数据表进行存储,上层应用访问同一逻辑表时,必须先进行底层物理数据表聚合,导致上层应用访问数据操作复杂。
因此,基于解决业务系统数据存储难以扩展及分表访问困难的重构背景,本发明实现了从Sybase多库多物理表存储到按逻辑表合并至Hive表的数据迁移方法。在数据迁移过程中,核心思想是按照逻辑表合并已拆分的底层物理数据表,即关系型数据库中的同一逻辑表的数据存入同一Hive表中,通过Hive分区表实现不同数据块下数据的快速访问,数据块是按照指定表字段将待迁移物理数据表中的数据集划分得到。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,示出了本申请实施例提供的一种数据迁移方法的流程图,该方法采用Spark计算引擎将关系型数据库中的数据迁移至Hadoop生态圈的Hive数据仓库中。如图1所示,该方法可以包括以下步骤:
S110,基于Spark计算引擎梳理各个源数据库中属于同一逻辑表的所有物理数据表,并删除冗余物理数据表,得到同一个逻辑表对应的待迁移物理数据表。
对关系型数据库中的各个源数据库中的物理数据表进行梳理,在梳理过程中删除冗余数据,得到同一逻辑表对应的待迁移物理数据表。同时,在梳理过程中可将关系型数据库中的错误、无效数据清除,从逻辑表层面保证合并后的Hive表不再存储冗余脏数据。
关系型数据库通过分库分表策略存储数据会导致同一份数据在多个源数据库中冗余存储,而迁移至Hive集群后通过Hive分区实现单分区下仅保存一份数据,以分区进行数据去重,实现同一逻辑表的多物理数据表合并。
S120,对于任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于该逻辑表的待迁移物理数据表。
因为关系型数据库的多个源数据库存在物理数据表冗余存储的现象,为保证数据迁移性能与数据迁移准确性,本申请采用单库内分逻辑表并行迁移与多库串行迁移的迁移方案。
以Sybase关系型数据库为例,本发明提供的数据迁移方案如图2所示,先对Sybase数据库中的物理数据表进行梳理,得到属于同一逻辑表的物理数据表,例如,在Sybase1库中,物理表A1~An属于同一逻辑表,物理表B1~Bn属于同一逻辑表。对于同一个Sybase库,并行迁移不同逻辑表中的数据,对于任一逻辑表,直到该Sybase库中属于该逻辑表的数据都迁移完,再迁移下一个Sybase库中属于该逻辑表的数据。
Spark计算引擎在存储量较小的数据表迁移时性能良好,但当面对存储量超大的数据表(如,超过100G的单表数据),或者,在时间分片上存储量倾斜严重的情况下会出现迁移性能瓶颈。
在一个优选实施例中,对于单表存储量超大的物理数据表,可以将存储量超大的数据表预设表字段划分为多个数据分片,然后,多个数据分片并行读取数据,从而大大提高数据迁移效率。
例如,可以按照时间字段将物理数据表中的数据集划分为不同的时间分片,进而并行读取多个时间分片的数据并写入Hive数据表中,大大提升了迁移效率。
在另一个优选实施例中,对于单个数据分片的数据严重倾斜的情况,例如,在单个物理数据表中出现某部分时间分片的存储量过亿,而其他时间分片的数据平均不到百万,这种情况将原数据表中的数据集打散,并行读取该时间分片上的数据,实现单时间分片的数据并发写入Hive数据表中,大大提升了迁移效率。例如,可以通过自增行号ID,按照行号ID并行读取同一数据分片内的数据。
如图3所示,对于并行迁移的不同逻辑表中的任一逻辑表,均执行以下步骤:
S121,将源数据库中存储的属于任一逻辑表的各个待迁移物理数据表存储至待迁移物理数据队列中。S122,当根据表配置信息确定待迁移物理数据表的总存储量超过预设阈值时,并行读取待迁移物理数据表中不同数据分片内的待迁移数据。
此处的数据分片是将待迁移物理数据表中的数据按至少一个预设表字段划分得到。例如,按时间字段划分得到多个时间分片,按地域字段划分可以得到多个地域分片,还可以按照地域和时间字段划分得到地域时间分片。
S123,当根据表配置信息确定待迁移物理数据表中存在存储量倾斜的数据分片时,将数据倾斜的数据分片内的数据打散,并行读取数据分片内不同的待迁移数据。
S124,将读取的待迁移数据迁移至目标数据库中的与待迁移物理数据表相匹配的目标数据表中。
重复以上步骤S121~S124,直到待迁移物理数据队列为空。
本申请提供的数据迁移方法,先梳理各个源数据库中属于同一个逻辑表的物理数据表,删除同一逻辑表对应的冗余物理数据表,然后,在单个源数据库内分逻辑表并行迁移,不同源数据库之间串行迁移,从而保证迁移性能和迁移准确性。其中,对于任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于该逻辑表的待迁移物理数据表。Spark计算引擎是基于内存计算的大数据并行计算框架,该方案充分利用Spark内存计算的优势,充分发挥了分布式数据库和系统的高效特点,通过多个节点在内存中并行运算,提高了数据迁移的效率。而且,该方案使用Spark计算引擎做数据清洗时,只需业务人员提供相应的SQL语句便能快速完成对数据的清洗处理,人工成本低。
此外,本发明提供的数据迁移方案基于Spark计算引擎实现关系型数据库向Hadoop生态圈的数据迁移,能够适用于多种关系型数据库,只要关系型数据可以通过JDBC访问,就能使用Spark计算引擎进行数据处理,因此,该方案的通用型强。
请参见图4,示出了本申请实施例提供的又一种数据迁移方法的流程图,本实施例着重介绍单个源数据库的数据迁移过程。如图4所示,该方法可以包括以下步骤:
S210,启动数据迁移任务,获取待迁移Sybase物理队列,根据单物理表的表名和物理库名获取表配置信息(即,表配置信息)。
该步骤中的待迁移Sybase物理队列即待迁移物理数据队列,该队列对应的物理表(即,待迁移物理数据表)来自同一Sybase库且属于同一逻辑表。
该步骤中的物理表的配置信息包括该物理表的基本信息,例如,该物理表包含的数据分片个数、每个数据分片的存储量、整个物理表对应的总存储量等。其中,本文中的物理表即物理数据表。
S220,判断该逻辑表是否进行首次迁移,若是首次迁移,则完成Hive中建表操作,若不是首次迁移则进入步骤S230。
如果待迁移Sybase物理队列对应的逻辑表是首次迁移,则需要在Hive数据仓库中创建相应的Hive表,关系型数据库中一个逻辑表中的数据都存储在同一Hive表中,因此,针对同一逻辑表,只需执行一次建立Hive表的操作。
此外,待迁移Sybase物理队列中记录有各个物理表的迁移状态,例如,对应的逻辑表是否首次迁移、迁移成功,迁移失败等信息。
S230,通过获得的表配置信息,与对应物理表的Sybase数据库通过JDBC方式建立访问链接。
本实施例以时间分片为例进行说明,确认数据库链接后,进一步根据物理表的表配置信息判断物理表是否存在超大存储量的单个物理表,或者,单个数据分片的存储量严重倾斜的情况,确定数据并发读取方式。
S240,根据表配置信息中的表倾斜配置项判断是否存在数据严重倾斜的时间分片;如果是,则通过自增行ID方式打散数据集实现并发读取该时间分片内的数据,然后进入S260,如果该物理表在时间分片的存储量不倾斜则进入S250;
当根据表配置信息确定待迁移物理数据表中存在单个时间分片的存储量远大于其它时间分片的存储量时,将存储量大的时间分片内的数据集打散(如,通过自增行ID的方式将该时间分片内的数据集打散),并行读取时间分片内不同的待迁移数据。
S250,根据表配置信息中的时间片个数及表存储量判断是否按时间分片并发读取,若表存储量偏小或该表时间分片不可拆则单表读取进入S260,若表存储量偏大或时间分片可拆分则按时间分片拆分并发读取进入S260。
如果整个物理表的存储量大于预设阈值,或时间分片可拆分,则可以按照时间分片拆分物理表并发读取不同时间分片内的数据。
如果整个物理表的存储量小于预设阈值,或者时间分片不可拆分,则直接将该物理表中的数据依次全部读取。
S260,成功读取Sybase数据后转换为相应的DataFrame格式的数据(即,目标格式数据),然后按Hive分区键(即,分区标识)对该DataFrame数据进行分组统计,统计后进入S270判断该分区是否需要迁移。
在本申请的一个实施例中,分区键可以采用划分得到数据块的指定表字段表示,例如,按地域+时间字段划分得到多个数据块,则分区键可以采用地域+时间表示。
Sybase数据转换为DataFrame格式的数据后,DataFrame格式的数据中包括Sybase数据对应哪个Hive分区的Hive分区键。
其中,物理表中的数据通常按业务的地域和时间划分为不同的时间分片,同一时间分片的数据存入同一Hive分区,不同时间分片的数据分别存入不同的Hive分区中,从而实现不同时间分片下的数据快速访问。
该步骤是分别统计每个Hive分区键对应的DataFrame数据的数量,得到该Hive分区键对应的待迁移分区数据统计值。
S270,依次循环判断S260中的各Hive分区统计值,若该分区已迁移分区数据统计值大于等于当前统计值,则不再迁移该DataFrame数据,若小于待迁移分区数据统计值则插入待迁移分区列表进入S280;
对于任一Hive分区键,分配将该Hive分区键对应的待迁移分区数据统计值与已迁移分区数据统计值进行比较。其中,已迁移分区数据统计值是根据每个分区的成功写入目标数据库中的Hive分区记录得到。
如果已迁移分区数据统计值大于等于待迁移分区数据统计值,则确定该Hive分区键对应的待迁移数据不需要迁移,表明该Hive分区对应的Sybase数据已经全部写入,从而避免了冗余数据的迁移。
如果已迁移分区数据统计值小于待迁移分区数据统计值,则确定该Hive分区键对应的待迁移数据需要迁移,进一步将该Hive分区键对应的DataFrame数据写入待迁移分区列表中,该待迁移分区列表中用于存储同一Hive分区对应的待迁移的DataFrame数据。
S280,判断待迁移分区列表是否为空,若不为空则进入S290,若为空表明该分区对应的待迁移数据已完成迁移不再进行重复迁移,则跳转至S2110判断待迁移Sybase物理队列是否为空。
如果一个物理表包括多个时间分片,则一个时间分片对应的数据迁移完成后,继续迁移其它时间分片对应的数据,直到整个物理表的数据都迁移完,继续迁移下一个物理表中的数据。
S290,根据该DataFrame的并发读取方式确定数据写入Hive的SQL插入语句,若通过自增行号ID并发读取则通过insert into插入方式追加入库,若按时间分片并发读取或者单表读取均通过insert overwrite插入方式复写入库。
若通过insert into插入方式入库则将insert into语句拼接好后进入步骤S2100;若通过insert overwrite插入方式复写入库,则将insert overwrite语句拼接好后进入S2100。
S2100,根据拼接好的SQL插入语句,通过调用基于Spark-SQL的API将已读取的DataFrame数据写入Hive,若数据全部成功写入Hive则更新该物理表的迁移状态为迁移成功且将S260中按分区完成的分组统计值更新记录到对应成功迁移数据统计表,然后进入S2110,若数据写入Hive失败则更新该物理表的迁移状态为迁移失败,则回到S210继续循环单表迁移;
S2110,更新好后判断待迁移Sybase物理队列是否为空,若为空表明已迁移完成则结束,若不为空则回到S210继续循环单表迁移。
本实施例提供的数据迁移方法,充分利用Spark内存计算的优势,充分发挥了分布式数据库和系统的高效特点,通过多个节点在内存中并行运算,提高了数据迁移的性能。再者,该方案实现了基于Spark的关系型数据库向Hadoop生态圈的数据迁移,可以适用于多种关系型数据库,只要数据库可以通过JDBC访问,就可以使用Spark进行数据处理,通用性高。而且,该方案利用了Spark支持SQL操作的便利性,使得开发者可以通过SQL快速的对数据进行处理,增加该工具的使用便利性。
相应于上述的数据迁移方法实施例,本申请还提供了数据迁移装置实施例。
请参见图5,示出了本申请实施例提供的一种数据迁移装置的结构示意图,该装置应用于Spark集群上。如图5所示,该装置可以包括:表梳理模块110和并行迁移模块120。
表梳理模块110,用于基于Spark计算引擎梳理各个源数据库中属于同一逻辑表的所有物理数据表,并删除冗余数据,得到同一个所述逻辑表对应的待迁移物理数据表。
并行迁移模块120,用于针对任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于同一逻辑表的待迁移物理数据表。
在本申请的一个实施例中,如图6所示,并行迁移模块120包括:队列构建子模块121、多分片并行读取子模块122、分片内并行读取子模块123和数据入库子模块124。
队列构建子模块121,用于将所述源数据库中存储的属于所述任一逻辑表的各个待迁移物理数据表存储至待迁移物理数据队列中。
在本申请的一个实施例中,在得到待迁移物理数据队列之后,先判断该队列对应的逻辑表是否是首次迁移,如果是,则需要根据获得的表配置信息创建Hive表;如果不是首次迁移,则直接建立与该待迁移物理数据表之间的访问链接,并通过该访问链接读取待迁移数据。
多分片并行读取子模块122,用于当根据所述表配置信息确定所述待迁移物理数据表的总存储量超过预设阈值时,并行读取所述待迁移物理数据表中不同数据分片内的待迁移数据。
数据分片是将所述待迁移物理数据表中的数据按预设表字段划分得到。
分片内并行读取子模块123,用于当根据所述表配置信息确定所述待迁移物理数据表中存在存储量倾斜的数据分片时,将所述存储量倾斜的数据分片内的待迁移数据打散,并行读取所述数据分片内不同的待迁移数据。
数据入库子模块124,用于将读取的待迁移数据迁移至目标数据库中的与所述待迁移物理数据表相匹配的目标数据表中,并重复以上步骤直到所述待迁移物理数据队列为空。
在本申请的一个实施例中,同一所述待迁移物理数据表包括至少一个数据块,且在所述目标数据库中与所述待迁移物理数据表相匹配的目标数据表中为每个所述数据块设置一个分区,且每个分区具有一个分区标识。本实施例中,如图7所示,数据入库子模块125包括:
格式转换子模块1251,用于将读取的待迁移数据转换为目标格式数据,所述目标格式数据中包括与各个所述数据块相匹配的分区标识。
待迁移分区数据统计子模块1252,用于分别统计每个所述分区标识对应的所述目标格式数据的数量,得到每个所述分区标识对应的待迁移分区数据统计值。
第一确定子模块1253,用于针对任一所述分区标识,当所述分区标识对应的已迁移分区数据统计值大于或等于所述待迁移分区数据统计值时,确定所述分区标识对应的待迁移数据不需要迁移。
写库子模块1254,用于当所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中。
在本申请的一个实施例中,待迁移数据的读取方式不同,所使用的写库方式不同,如果所述待迁移数据通过并行读取同一时间分片的数据获得,则通过静态插入方式写入所述分区中;如果所述待迁移数据通过其他读取方式获得,则通过动态插入方式复写入所述分区中。
在本申请的一个实施例中,写库子模块1254具体用于:
如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,则将包含所述分区标识的目标格式数据更新至待迁移分区列表中;
如果所述待迁移分区列表不为空,则从所述待迁移分区列表中读取目标格式数据写入与所述分区标识相匹配的分区中,直到所述待迁移分区列表为空。
在本申请的另一个实施例中,将待迁移数据成功写入相匹配的Hive分区后,将所述分区标识对应的已迁移分区数据统计值更新为所述分区标识对应的所述待迁移分区数据统计值。
本实施例提供的数据迁移装置,先梳理各个源数据库中属于同一个逻辑表的物理数据表,从而删除同一逻辑表对应的冗余物理数据表,然后,在单个源数据库内分逻辑表并行迁移,不同源数据库之间串行迁移,从而保证迁移性能和迁移准确性。其中,对于任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中的待迁移物理数据表迁移完,继续迁移下一个源数据库中的待迁移物理数据表。Spark计算引擎是基于内存计算的大数据并行计算框架,该方案充分利用Spark内存计算的优势,充分发挥了分布式数据库和系统的高效特点,通过多个节点在内存中并行运算,提高了数据迁移的效率。而且,该方案使用Spark计算引擎做数据清洗时,只需业务人员提供相应的SQL语句便能快速完成对数据的清洗处理,人工成本低。
本申请提供了一种电子设备,该电子设备包括处理器和存储器,该存储器内存储有可在处理器上运行的程序。该处理器运行存储器内存储的该程序时实现上述的数据迁移方法。本文中的电子设备可以是服务器集群中的任一服务器。
本申请还提供了一种计算设备可执行的存储介质,该存储介质中存储有程序,该程序由计算设备执行时实现上述的数据迁移方法。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
需要说明的是,本说明书中的各个实施例记载的技术特征可以相互替代或组合,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请各实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请各实施例中的装置及终端中的模块和子模块可以根据实际需要进行合并、划分和删减。
本申请所提供的几个实施例中,应该理解到,所揭露的终端,装置和方法,可以通过其它的方式实现。例如,以上所描述的终端实施例仅仅是示意性的,例如,模块或子模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个子模块或模块可以结合或者可以集成到另一个模块,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块或子模块可以是或者也可以不是物理上分开的,作为模块或子模块的部件可以是或者也可以不是物理模块或子模块,即可以位于一个地方,或者也可以分布到多个网络模块或子模块上。可以根据实际的需要选择其中的部分或者全部模块或子模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块或子模块可以集成在一个处理模块中,也可以是各个模块或子模块单独物理存在,也可以两个或两个以上模块或子模块集成在一个模块中。上述集成的模块或子模块既可以采用硬件的形式实现,也可以采用软件功能模块或子模块的形式实现。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种数据迁移方法,其特征在于,包括:
基于Spark计算引擎梳理各个源数据库中属于同一逻辑表的所有物理数据表,并删除冗余数据,得到同一个所述逻辑表对应的待迁移物理数据表;
对于任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于所述同一逻辑表的待迁移物理数据表。
2.根据权利要求1所述的方法,其特征在于,所述基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,包括:
对于并行迁移的不同逻辑表中的任一逻辑表,均执行以下步骤:
将所述源数据库中存储的属于所述任一逻辑表的各个待迁移物理数据表的配置信息存储至待迁移物理数据队列中;
当根据所述表配置信息确定所述待迁移物理数据表的总存储量超过预设阈值时,并行读取所述待迁移物理数据表中不同数据分片内的待迁移数据,其中,所述数据分片是将所述待迁移物理数据表中的数据按预设表字段划分得到;
当根据所述表配置信息确定所述待迁移物理数据表中存在存储量倾斜的数据分片时,将所述存储量倾斜的数据分片内的数据打散,并行读取所述数据分片内不同的待迁移数据;
将读取的待迁移数据迁移至目标数据库中的与所述待迁移物理数据表相匹配的目标数据表中,并重复以上步骤直到所述待迁移物理数据队列为空。
3.根据权利要求2所述的方法,其特征在于,将同一所述待迁移物理数据表中的数据集按照指定表字段进行分割得到至少一个数据块,且在所述目标数据库中目标数据表中为每个所述数据块设置一个分区,且每个分区具有一个分区标识;
所述将读取的待迁移数据迁移至目标数据库中的所述目标数据表中,包括:
将读取的待迁移数据转换为目标格式数据,所述目标格式数据中包括与各个所述数据块相匹配的分区标识;
分别统计每个所述分区标识对应的所述目标格式数据的数量,得到每个所述分区标识对应的待迁移分区数据统计值;
针对任一所述分区标识,如果所述分区标识对应的已迁移分区数据统计值大于或等于所述待迁移分区数据统计值,确定所述分区标识对应的待迁移数据不需要迁移;
如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中。
4.根据权利要求3所述的方法,其特征在于,如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中,包括:
如果所述分区标识对应的已迁移分区数据统计值小于所述待迁移分区数据统计值,则将包含所述分区标识的目标格式数据更新至待迁移分区列表中;
如果所述待迁移分区列表不为空,则从所述待迁移分区列表中读取目标格式数据写入与所述分区标识相匹配的分区中,直到所述待迁移分区列表为空。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在将包含所述分区标识的所述目标格式数据成功写入所述目标数据表中与所述分区标识相匹配的分区之后,将所述分区标识对应的已迁移分区数据统计值更新为所述分区标识对应的所述待迁移分区数据统计值。
6.根据权利要求3所述的方法,其特征在于,所述将包含所述分区标识的目标格式数据写入所述目标数据表中与所述分区标识相匹配的分区中,包括:
如果所述待迁移数据通过并行读取同一时间分片的数据获得,则通过静态插入方式写入所述分区中;
如果所述待迁移数据通过其他读取方式获得,则通过动态插入方式复写入所述分区中。
7.根据权利要求2所述的方法,其特征在于,所述并行迁移不同逻辑表中的待迁移物理数据表,还包括:
判断所述待迁移物理数据队列对应的逻辑表是否是首次迁移;
如果是首次迁移,在所述目标数据库中为所述逻辑表创建相匹配的目标数据表;
如果不是首次迁移,建立与所述待迁移物理数据表对应的源数据库之间的访问链接,通过所述访问链接从所述待迁移物理数据表中读取待迁移数据。
8.一种数据迁移装置,其特征在于,包括:
表梳理模块,用于基于Spark计算引擎梳理各个源数据库中属于同一逻辑表的所有物理数据表,并删除冗余数据,得到同一个所述逻辑表对应的待迁移物理数据表;
并行迁移模块,用于针对任一源数据库,基于Spark计算引擎并行迁移不同逻辑表中的待迁移物理数据表,直到所述源数据库中属于同一逻辑表的待迁移物理数据表迁移完,继续迁移下一个源数据库中属于所述同一逻辑表的待迁移物理数据表。
9.根据权利要求8所述的装置,其特征在于,所述并行迁移模块包括:
队列构建子模块,用于将所述源数据库中存储的属于所述任一逻辑表的各个待迁移物理数据表的配置信息存储至待迁移物理数据队列中;
多分片并行读取子模块,用于当根据所述表配置信息确定所述待迁移物理数据表的总存储量超过预设阈值时,并行读取所述待迁移物理数据表中不同数据分片内的待迁移数据,其中,所述数据分片是将所述待迁移物理数据表中的数据按预设表字段划分得到;
分片内并行读取子模块,用于当根据所述表配置信息确定所述待迁移物理数据表中存在存储量倾斜的数据分片时,将所述数倾斜的数据分片内的数据打散,并行读取所述数据分片内不同的待迁移数据;
数据入库子模块,用于将读取的待迁移数据迁移至目标数据库中的与所述待迁移物理数据表相匹配的目标数据表中,并重复以上步骤直到所述待迁移物理数据队列为空。
10.一种电子设备,其特征在于,包括存储器和处理器;
所述存储器内存储有程序,所述处理器用于调用所述程序以执行权利要求1-7任一项所述的数据迁移方法。
CN202011618158.7A 2020-12-31 一种数据迁移方法及装置 Active CN112650736B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011618158.7A CN112650736B (zh) 2020-12-31 一种数据迁移方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011618158.7A CN112650736B (zh) 2020-12-31 一种数据迁移方法及装置

Publications (2)

Publication Number Publication Date
CN112650736A true CN112650736A (zh) 2021-04-13
CN112650736B CN112650736B (zh) 2024-07-05

Family

ID=

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114077602A (zh) * 2022-01-13 2022-02-22 中兴通讯股份有限公司 数据迁移方法和装置、电子设备、存储介质
CN117851434A (zh) * 2024-03-07 2024-04-09 深圳市雁联计算系统有限公司 一种数据库并发移植的方法、系统及存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631907A (zh) * 2013-11-26 2014-03-12 中国科学院信息工程研究所 一种将关系型数据迁移至HBase的方法及系统
CN103793424A (zh) * 2012-10-31 2014-05-14 阿里巴巴集团控股有限公司 数据库数据迁移方法及系统
US20150019488A1 (en) * 2013-07-09 2015-01-15 Oracle International Corporation Automated database migration architecture
CN106909597A (zh) * 2016-06-30 2017-06-30 阿里巴巴集团控股有限公司 一种数据库迁移方法和装置
CN107301214A (zh) * 2017-06-09 2017-10-27 广州虎牙信息科技有限公司 在hive中数据迁移方法、装置及终端设备
CN107958057A (zh) * 2017-11-29 2018-04-24 苏宁云商集团股份有限公司 一种用于异构数据库中数据迁移的代码生成方法及装置
CN110209650A (zh) * 2019-05-05 2019-09-06 苏宁易购集团股份有限公司 数据规整迁移方法、装置、计算机设备和存储介质
WO2019219010A1 (zh) * 2018-05-14 2019-11-21 杭州海康威视数字技术股份有限公司 数据迁移方法、装置及计算机可读存储介质
CN110502505A (zh) * 2019-08-29 2019-11-26 中国农业银行股份有限公司 一种数据迁移方法及装置
CN111258985A (zh) * 2020-01-17 2020-06-09 中国工商银行股份有限公司 数据集群迁移方法及装置

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103793424A (zh) * 2012-10-31 2014-05-14 阿里巴巴集团控股有限公司 数据库数据迁移方法及系统
US20150019488A1 (en) * 2013-07-09 2015-01-15 Oracle International Corporation Automated database migration architecture
CN103631907A (zh) * 2013-11-26 2014-03-12 中国科学院信息工程研究所 一种将关系型数据迁移至HBase的方法及系统
CN106909597A (zh) * 2016-06-30 2017-06-30 阿里巴巴集团控股有限公司 一种数据库迁移方法和装置
CN107301214A (zh) * 2017-06-09 2017-10-27 广州虎牙信息科技有限公司 在hive中数据迁移方法、装置及终端设备
CN107958057A (zh) * 2017-11-29 2018-04-24 苏宁云商集团股份有限公司 一种用于异构数据库中数据迁移的代码生成方法及装置
WO2019219010A1 (zh) * 2018-05-14 2019-11-21 杭州海康威视数字技术股份有限公司 数据迁移方法、装置及计算机可读存储介质
CN110209650A (zh) * 2019-05-05 2019-09-06 苏宁易购集团股份有限公司 数据规整迁移方法、装置、计算机设备和存储介质
CN110502505A (zh) * 2019-08-29 2019-11-26 中国农业银行股份有限公司 一种数据迁移方法及装置
CN111258985A (zh) * 2020-01-17 2020-06-09 中国工商银行股份有限公司 数据集群迁移方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
达微: "Spark将Dataframe数据写入Hive分区表的方案", HTTPS://MP.WEIXIN.QQ.COM, pages 1 - 5 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114077602A (zh) * 2022-01-13 2022-02-22 中兴通讯股份有限公司 数据迁移方法和装置、电子设备、存储介质
CN117851434A (zh) * 2024-03-07 2024-04-09 深圳市雁联计算系统有限公司 一种数据库并发移植的方法、系统及存储介质
CN117851434B (zh) * 2024-03-07 2024-05-14 深圳市雁联计算系统有限公司 一种数据库并发移植的方法、系统及存储介质

Similar Documents

Publication Publication Date Title
EP3238106B1 (en) Compaction policy
US10176225B2 (en) Data processing service
Vora Hadoop-HBase for large-scale data
US8543596B1 (en) Assigning blocks of a file of a distributed file system to processing units of a parallel database management system
CN102542071B (zh) 一种分布式处理数据的系统及方法
CN108600321A (zh) 一种基于分布式内存云的图数据存储方法和系统
CN102129458B (zh) 关系型数据库的存储方法及装置
US20070100873A1 (en) Information retrieving system
US9389913B2 (en) Resource assignment for jobs in a system having a processing pipeline that satisfies a data freshness query constraint
CN104239377A (zh) 跨平台的数据检索方法及装置
CN109885642B (zh) 面向全文检索的分级存储方法及装置
CN111858759A (zh) 一种基于共识算法的htap数据库
CN114329096A (zh) 一种原生图数据库处理方法及系统
CN113821573A (zh) 海量数据快速检索服务构建方法、系统、终端及存储介质
CN115114294A (zh) 数据库存储模式的自适应方法、装置、计算机设备
CN117321583A (zh) 用于混合数据处理的存储引擎
Wouw et al. An empirical performance evaluation of distributed sql query engines
CN112241396B (zh) 基于Spark的对Delta进行小文件合并的方法及系统
CN113849478A (zh) 一种云原生大数据分析引擎
CN112650736B (zh) 一种数据迁移方法及装置
CN112650736A (zh) 一种数据迁移方法及装置
KR20160145250A (ko) 가상 머지를 지원하는 셔플 내장형 분산 스토리지 시스템 및 그 방법
WO2022001626A1 (zh) 注入时序数据的方法、查询时序数据的方法及数据库系统
Vilaça et al. On the expressiveness and trade-offs of large scale tuple stores
McGlothlin et al. Scalable queries for large datasets using cloud computing: a case study

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant