CN112925835A - 数据同步方法、装置和服务器 - Google Patents

数据同步方法、装置和服务器 Download PDF

Info

Publication number
CN112925835A
CN112925835A CN201911238217.5A CN201911238217A CN112925835A CN 112925835 A CN112925835 A CN 112925835A CN 201911238217 A CN201911238217 A CN 201911238217A CN 112925835 A CN112925835 A CN 112925835A
Authority
CN
China
Prior art keywords
data
metadata
partition
target
field
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.)
Pending
Application number
CN201911238217.5A
Other languages
English (en)
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.)
Beijing Kingsoft Cloud Network Technology Co Ltd
Beijing Kingsoft Cloud Technology Co Ltd
Original Assignee
Beijing Kingsoft Cloud Network Technology Co Ltd
Beijing Kingsoft Cloud Technology Co Ltd
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 Beijing Kingsoft Cloud Network Technology Co Ltd, Beijing Kingsoft Cloud Technology Co Ltd filed Critical Beijing Kingsoft Cloud Network Technology Co Ltd
Priority to CN201911238217.5A priority Critical patent/CN112925835A/zh
Publication of CN112925835A publication Critical patent/CN112925835A/zh
Pending legal-status Critical Current

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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication
    • 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/25Integrating or interfacing systems involving database management systems
    • G06F16/254Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses

Abstract

本发明提供了一种数据同步方法、装置和服务器,加载预先配置的配置信息;该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据;从该数据源中获取并缓存该元数据对应的目标数据;将该目标数据同步至预设的数据仓库中的,与该元数据相匹配的数据表中。该方法通过将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息写入配置信息,进而基于该配置信息进行数据同步,当数据源或者元数据需要更新时,只需要更新相应的配置信息,不需要工程师手动修改用于数据同步的相关代码语句;该方式减少了人工的干预;从而提高了数据同步的灵活性和适应性。

Description

数据同步方法、装置和服务器
技术领域
本发明涉及数据处理技术领域,尤其是涉及一种数据同步方法、装置和服务器。
背景技术
在数据仓库建设中,数据同步是一个重要的步骤。在数据同步的过程中,需要将来自业务系统、线上日志等多源异构的数据进行收集汇总,然后存储到数据仓库的ODS层的分区表;存储到数据仓库的数据用于支撑企业日常的全局应用的数据需求。相关技术中,可以采用Sqoop、Flume或Hive等组件完成上述数据同步的过程;具体可以根据业务系统需求,由工程师手动编写Sqoop、Flume或HQL语句实现数据同步,如果业务系统发生变化,还需要工程师修改用于数据同步的相关语句,因而该方式的人工干预较多,导致数据同步的灵活性和适应性较差。
发明内容
本发明的目的在于提供一种数据同步方法、装置和服务器,以提高数据同步的灵活性和适应性。
本发明提供的一种数据同步方法,所述方法包括:加载预先配置的配置信息;其中,所述配置信息包括数据源、以及所述数据源中需要进行同步的数据的元数据;从所述数据源中获取所述元数据对应的目标数据,缓存所述目标数据;将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中。
进一步的,从所述数据源中获取所述元数据对应的目标数据的步骤,包括:加载预先配置的Spark函数算子;通过所述函数算子,从所述数据源中抽取所述元数据对应的目标数据。
进一步的,缓存所述目标数据的步骤,包括:对所述目标数据进行预处理,将预处理后的所述目标数据以矩阵数据表的形式缓存在内存中;其中,所述预处理包括:将所述目标数据转换成预设的数据类型,和/或,将所述目标数据的元数据的名称转换成预设的名称。
进一步的,所述元数据包括数据表名称、字段和所述字段的字段属性;将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中的步骤,包括:如果预设的数据仓库中,不存在所述数据表名称对应的数据表,根据所述元数据创建数据表;将所述目标数据存储至创建的所述数据表中。
进一步的,将所述目标数据存储至创建的所述数据表中的步骤之前,所述方法还包括:如果存在所述数据表名称对应的数据表,且所述数据表中的字段与所述元数据中的字段不匹配,将所述数据表中的字段调整为所述元数据中的字段。
进一步的,将所述目标数据存储至创建的所述数据表中的步骤之前,所述方法还包括:如果所述数据表名称对应的数据表中,存在字段属性与所述元数据中字段属性不匹配的目标字段,将所述目标字段的字段属性调整为所述元数据中,所述目标字段的字段属性。
进一步的,将所述目标数据存储至创建的所述数据表中的步骤,包括:按照预设的分区规则,将所述目标数据划分为多个分区数据;采用并行的方式,将所述多个分区数据写入创建的所述数据表中。
进一步的,采用并行的方式,将所述多个分区数据写入创建的所述数据表中的步骤,包括:启动多个Spark执行器;多个所述执行器并行运行;其中,每个所述执行器读取该执行器对应的分区数据,将读取到的所述分区数据写入至创建的所述数据表中。
进一步的,将所述多个分区数据写入创建的所述数据表中的步骤之后,所述方法还包括:根据所述分区数据的数据量,将相邻的所述分区数据进行合并处理。
进一步的,根据所述分区数据的数据量,将相邻的所述分区数据进行合并处理的步骤,包括:根据所述数据表中所述多个分区数据的存储位置和数据量,对每个所述分区数据进行下述处理:如果当前分区数据的数据量小于预设的数据量阈值,将所述当前分区数据合并至所述当前分区数据的下一个分区数据中;将所述当前分区数据的下一个分区数据确定为新的当前分区数据。
本发明提供的一种数据同步装置,所述装置包括:加载模块,用于加载预先配置的配置信息;其中,所述配置信息包括数据源、以及所述数据源中需要进行同步的数据的元数据;获取模块,用于从所述数据源中获取所述元数据对应的目标数据,缓存所述目标数据;同步模块,用于将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中。
本发明提供的一种服务器,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现上述任一项所述的数据同步方法。
本发明提供的一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述任一项所述的数据同步方法。
本发明提供的数据同步方法、装置和服务器,首先加载预先配置的配置信息;其中,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据;然后从该数据源中获取并缓存该元数据对应的目标数据;将该目标数据同步至预设的数据仓库中的,与该元数据相匹配的数据表中。该方法通过将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息写入配置信息,进而基于该配置信息进行数据同步,当数据源或者元数据需要更新时,只需要更新相应的配置信息,不需要工程师手动修改用于数据同步的相关代码语句;该方式减少了人工的干预;从而提高了数据同步的灵活性和适应性。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据同步方法的流程图;
图2为本发明实施例提供的另一种数据同步方法的流程图;
图3为本发明实施例提供的另一种数据同步方法的流程图;
图4为本发明实施例提供的一种数据同步的工作流程示意图;
图5为本发明实施例提供的一种数据抽取的工作流程示意图;
图6为本发明实施例提供的一种创建ODS分区表的工作流程示意图;
图7为本发明实施例提供的一种数据同步装置的结构示意图;
图8为本发明实施例提供的一种服务器的结构示意图。
具体实施方式
下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,在数据仓库建设中,对数据同步的操作主要依赖于Sqoop、Flume或Hive三大组件完成,根据业务系统需求,由工程师手动编写Sqoop、Flume或HQL语句实现业务系统数据库的数据同步过程。
当采用Sqoop或Flume组件进行数据同步时,在数据同步过程中,存在中间结果从内存保存到磁盘,再从磁盘存储到数据仓库的操作,这样会增加磁盘的IO(Input Output,输入输出)负载,导致数据处理效率较低;另外,当业务系统增加或者数据库表结构发生变化时,需要工程师手动重新编写或修改用于数据同步的相关语句,无法动态响应业务系统的增加或数据字段的变化,因而存在一定的项目管理和维护的难度;上述方式中很多步骤需要人工参与,流程自动化程度较低,导致数据同步的灵活性和适应性较差。
基于此,本发明实施例提供了一种数据同步方法、装置和服务器,该技术可以应用于数据仓库建设中的数据同步,或者,其他需要数据同步的系统或应用中。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据同步方法进行详细介绍,如图1所示,该方法包括如下步骤:
步骤S102,加载预先配置的配置信息;其中,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据。
上述配置信息通常可以存储在配置文件中;上述数据源可以包括不同业务系统或线上日志等,比如,该数据源可以是关系型数据库、非关系型数据库、Kafka(一种高吞吐量的分布式发布订阅消息系统)或者ES(ElasticSearch,一种开源分布式搜索引擎)等;上述元数据可以理解为数据源中需要进行同步的数据的数据表名称、字段或该字段的字段属性等;在实际实现时,通常会将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息预先写入配置文件。
步骤S104,从上述数据源中获取上述元数据对应的目标数据,缓存该目标数据。
上述目标数据可以理解为元数据所对应的具体数值,比如,当元数据为字段时,如果字段为“年龄”,则年龄所对应的具体数值,如20、30等即为目标数据;根据上述配置信息,从数据源中获取并缓存需要进行同步的元数据所对应的目标数据。
步骤S106,将上述目标数据同步至预设的数据仓库中的,与上述元数据相匹配的数据表中。
上述数据仓库的数据是在对原有分散的数据库进行数据抽取,并对抽取到的数据经系统加工、汇总和整理得到的,主要供企业决策分析之用;数据仓库中通常包含多台服务器,是多台服务器的一个集群,通过该集群实现数据仓库的功能;比如,如果数据仓库中有10台服务器,可以通过这10台服务器实现数据仓库中数据的存储等;从该数据仓库中查询与上述元数据相匹配的数据表,并将上述目标数据同步更新至该数据表中;比如,当元数据为字段时,如果字段为“年龄”,目标数据为20、30,则从数据仓库中查询与元数据相匹配的数据表,并将上述缓存在内存中的目标数据20,30同步更新至该数据表中。
在实际实现时,上述与元数据相匹配的数据表通常可以理解为,数据仓库中存在的与上述数据表名称、字段和该字段的字段属性相同的数据表;如果数据仓库中不存在与该数据表名称相同的数据表,服务器通常会根据该元数据在数据仓库中创建对应的数据表;如果数据仓库中存在与该数据表名称相同的数据表,但是数据表中的字段或字段属性与元数据不匹配,服务器通常会自动调整数据表中的字段或字段属性,使其与元数据匹配。
本发明实施例提供的数据同步方法,首先加载预先配置的配置信息;其中,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据;然后从该数据源中获取并缓存该元数据对应的目标数据;将该目标数据同步至预设的数据仓库中的,与该元数据相匹配的数据表中。该方法通过将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息写入配置信息,进而基于该配置信息进行数据同步,当数据源或者元数据需要更新时,只需要更新相应的配置信息,不需要工程师手动修改用于数据同步的相关代码语句;该方式减少了人工的干预;从而提高了数据同步的灵活性和适应性。
本发明实施例还提供了另一种数据同步方法,该方法在上述实施例方法的基础上实现;该方法重点描述从数据源中获取元数据对应的目标数据,以及,缓存目标数据的具体过程,具体对应下述步骤S204至步骤S208,如图2所示,该方法包括如下步骤:
步骤S202,加载预先配置的配置信息;其中,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据。
步骤S204,加载预先配置的Spark函数算子。
上述Spark是一种专为大规模数据处理而设计的快速通用的计算引擎;上述Spark函数算子可以理解为基于Spark平台,能实现多源异构数据抽取的函数算子,可以将数据处理过程函数化;在实际实现时,通常会预先配置好适合的Spark函数算子,当需要进行数据同步处理时,加载该预先配置好的Spark函数算子,该Spark函数算子根据配置信息执行相应的操作,比如配置信息中包含了向指定数据库抽取相应的数据,则Spark函数算子根据配置信息,向该指定数据库抽取该数据。
相关技术中,从数据源中抽取数据的过程通常是通过编写代码的方式实现,如果从数据源中抽取数据的方式需要更新时,需要重新编写相关代码;而在本方案中,如果从数据源中抽取数据的方式需要更新时,通常不需要更新该Spark函数算子,只需要更新相应的配置信息即可,实现了将抽取数据的过程函数化,提高了Spark函数算子的通用性。
步骤S206,通过上述函数算子,从上述数据源中抽取上述元数据对应的目标数据。
在实际实现时,上述数据源通常会提供一个对外接口,比如,如果数据源为一指定数据库,该指定数据库会提供一个对外接口,上述函数算子通过该对外接口,从该指定数据库中抽取上述元数据对应的目标数据。
步骤S208,对上述目标数据进行预处理,将预处理后的该目标数据以矩阵数据表的形式缓存在内存中;其中,该预处理包括:将该目标数据转换成预设的数据类型,和/或,将目标数据的元数据的名称转换成预设的名称。
上述矩阵数据表可以理解为一种数据结构,通常是一种类似excel的二维表,该矩阵数据表中可以存放数值、字符串等;上述数据类型可以是int、double或float等;在实际实现时,该矩阵数据表可以以“DataFrame”来表示;配置信息中通常还包括对元数据或元数据中的目标数据进行统一处理的相关信息;当通过函数算子完成从数据源中抽取元数据对应的目标数据后,根据配置信息,对该目标数据进行预处理,以将不同数据源中不同的命名规范进行统一,其中包括对数据表的命名、字段的命名或字段属性等;由于不同的数据源对数据表的命名或字段的命名等通常会不一致,当需要同步至数据仓库中时,就要进行统一处理;比如,把一种指定字段统一转换为另一种指定字段;对于不同的字段属性,比如int、long、double等,通过对字体进行抽象处理等预处理过程,可以统一转换成同一种类型;将预处理后的目标数据以矩阵数据表的形式缓存在内存中。
上述预处理可以包括:将该目标数据转换成Spark支持的数据类型,如int或double等;或者,将目标数据的元数据的名称转换成预设的名称,如预设的名称要求采用大写、小写或者是否包含下划线等;或者,将该目标数据转换成Spark支持的数据类型的同时,将目标数据的元数据的名称转换成预设的名称。
步骤S210,将上述目标数据同步至预设的数据仓库中的,与上述元数据相匹配的数据表中。
上述数据同步方法,通过预先配置的Spark函数算子,从数据源中抽取元数据对应的目标数据,然后对该目标数据进行预处理,并将预处理后的目标数据以矩阵数据表的形式缓存在内存中。该方法通过将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息写入配置信息,进而基于该配置信息进行数据同步,如果业务系统发生变化,可以动态响应业务系统地变化,自适应调节需要同步的数据,当数据源或者元数据需要更新时,只需要更新相应的配置信息,不需要工程师手动修改用于数据同步的相关代码语句;该方式减少了人工的干预;从而提高了数据同步的灵活性和适应性。
并且,对目标数据进行预处理,解决了多源异构数据格式统一的问题,将预处理后的目标数据以矩阵数据表的形式缓存在内存中的方式,减少了中间结果从内存保存到磁盘的步骤,从而提升了计算效率。
本发明实施例还提供了另一种数据同步方法,该方法在上述实施例方法的基础上实现;该方法重点描述将目标数据同步至预设的数据仓库中的,与元数据相匹配的数据表中的具体过程,具体对应下述步骤S306至步骤S312,其中,元数据包括数据表名称、字段和字段的字段属性;在实际实现时,在数据库中,通常将数据表的“列”称为字段,每个字段包含指定专题的信息,是数据表中所有行共有的属性;字段属性可以理解为字段的数据类型,如int、double等;如图3所示,该方法包括如下步骤:
步骤S302,加载预先配置的配置信息;其中,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据。
步骤S304,从上述数据源中获取上述元数据对应的目标数据,缓存该目标数据。
步骤S306,判断预设的数据仓库中,是否存在上述数据表名称对应的数据表,如果不存在,执行步骤S308;如果存在,执行步骤S310。
在实际实现时,配置信息中通常还包括比对数据源和数据仓库中的元数据,以及根据比对结果更新数据表结构的相关信息;另外,还可以配置创建数据表,以及修改数据表的时机;通常会先根据该配置信息查询预设的数据仓库中是否存在元数据中的数据表名称,以判断数据仓库中是否存在上述数据表名称对应的数据表。
步骤S308,如果预设的数据仓库中,不存在上述数据表名称对应的数据表,根据上述元数据创建数据表。
通常会在配置信息中记录从指定数据源中获取元数据对应的目标数据,并将该目标数据写入数据仓库中,与该元数据相匹配的数据表中,如果数据仓库中查询不到上述数据表名称,即该数据仓库中不存在该数据表,通常可以认为这是第一次创建数据表,这时可以根据元数据生成相应的ODS(Operational Data Store,可操作的数据存储)分区表创建语句,以在数据仓库的ODS层中创建该数据表。
步骤S310,判断数据表中的字段与元数据中的字段是否匹配,如果不匹配,执行步骤S312;如果匹配,执行步骤S314。
步骤S312,如果存在上述数据表名称对应的数据表,且该数据表中的字段与上述元数据中的字段不匹配,将该数据表中的字段调整为该元数据中的字段。
如果数据源中的元数据的字段发生变更,比如增加了新字段或者修改了字段等,这时会生成相应的ODS分区表结构修改语句,将数据表中的字段自动调整为元数据中的字段;作为示例,比如元数据的字段中,将“年龄”,修改为“岁数”,即元数据中的字段发生了变化,服务器读取到该变化字段后,会自动修改数据表中的字段;或者,在元数据中,字段“年龄”后面增加了新字段“性别”,服务器会读取到数据仓库的数据表中的字段缺少了该新字段,这时会生成相应的ODS分区表结构修改语句,在数据表中自动增加该新字段等,以使数据表中的字段与元数据中的字段相匹配,实现自适应调整的过程。
而在现有的相关技术中,如果出现数据表中的字段与元数据中的字段不匹配,对于数据仓库的数据表中没有的字段,服务器会自动删掉该字段,导致数据仓库中的数据信息缺失。
步骤S314,判断上述数据表名称对应的数据表中,是否存在字段属性与元数据中字段属性不匹配的目标字段,如果存在,执行步骤S316;如果不存在,执行步骤S318。
步骤S316,如果上述数据表名称对应的数据表中,存在字段属性与上述元数据中字段属性不匹配的目标字段,将该目标字段的字段属性调整为该元数据中,该目标字段的字段属性。
上述目标字段可以理解为,元数据中字段的字段属性发生变化的字段;如果元数据中字段的字段属性发生变更,比如,将字段属性由整数类型中的long,修改为整数类型中的short等,这时会生成相应的ODS分区表结构修改语句,将数据表中的字段属性自动调整为元数据中的字段属性,以使数据表中,该目标字段的字段数据与元数据中该目标字段的字段属性相匹配,实现自适应调整的过程。
步骤S318,将上述目标数据存储至创建的上述数据表中。具体的,该步骤可以通过以下步骤实现:
步骤30,按照预设的分区规则,将上述目标数据划分为多个分区数据。
上述分区规则可以根据实际需求或者数据量大小等进行设定;比如,如果按照时间进行分区,可以以“天”为单位,同一天的目标数据写入同一个分区中;按照所设定的分区规则,可以将目标数据划分为多个分区,进而得到多个分区数据。
步骤31,采用并行的方式,将上述多个分区数据写入创建的上述数据表中。
在实际实现时,为了增加任务的并行度,提高数据同步的效率,通常会采用并行的处理方式,即将多个分区数据同时并行写入所创建的数据表中;比如,对于一个数据表,如果该数据表是以“日期”为单位进行分区,每天可能都会有很多目标数据写入该数据表中,将同一日期的目标数据写入同一个分区中,不同日期的目标数据可以同时并行写入所创建的数据表的不同分区中,该数据表中通常包含所有的目标数据,当需要查询指定日期的目标数据时,从该数据表中查询到对应的分区,并在该分区内进行检索即可。具体的,步骤31可以通过以下步骤40和步骤41实现:
步骤40,启动多个Spark执行器。
上述Spark执行器通常用于提供分布式计算及数据存储功能,在实际实现时,可以用Spark Executor来表示;当数据表结构调整完成后,根据目标数据的规模,启动相应数据量Spark执行器进行分布式写入;比如,可以根据上述对目标数据所划分的分区数量,启动相同数量的Spark执行器。
步骤41,多个上述执行器并行运行;其中,每个该执行器读取该执行器对应的分区数据,将读取到的分区数据写入至创建的上述数据表中。
在实际实现时,所启动的多个执行器可以并行运行,每个执行器读取其中一个分区中的分区数据,并将所读取的分区数据写入所创建的数据表中,即可以写入到数据仓库ODS层中所创建的分区表。
步骤32,根据上述分区数据的数据量,将相邻的该分区数据进行合并处理。
在实际实现时,当多个分区数据写入创建的上述数据表中后,可以确定出每个分区数据的数据量大小,不同分区数据的数据规模通常也会不同,如果对目标数据分区后,产生过多的小文件,会影响数据查询和存储效率,为避免出现该问题,通常会将相邻的分区数据进行合并处理。具体的,该步骤32可以通过以下步骤50至步骤51实现:
根据上述数据表中多个分区数据的存储位置和数据量,对每个分区数据进行下述处理:
步骤50,如果当前分区数据的数据量小于预设的数据量阈值,将当前分区数据合并至当前分区数据的下一个分区数据中。
上述数据量阈值可以理解为所设定的最小数据量的大小,比如,64M或者128M等;将当前分区数据的数据量与所设定的数据量阈值进行比较,如果当前分区数据的数据量小于该数据量阈值,则将该当前分区数据合并至相邻的下一个分区数据中;在实际实现时,数据量阈值可以通过HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)block size来确定,block可以理解为“最小读写单位”,在HDFS文件系统中的block size通常默认为128M,当然也可以根据需求进行设定;首先判断当前分区n的数据的数据量是否小于HDFS block size,如果当前分区n的数据的数据量大于HDFS block size,则当前分区n的数据不需要做合并处理,游标指向下一个分区,如果当前分区n的数据的数据量小于HDFSblock size,则计算当前分区n的数据的数据量加上相邻分区n+1的数据的数据量后,是否小于HDFS block size,如果合并后的数据量大于HDFS block size,则将当前分区n的数据与相邻分区n+1的数据进行合并。
步骤51,将上述当前分区数据的下一个分区数据确定为新的当前分区数据。
将合并后的分区数据确定为新的当前分区数据。继续执行上述步骤50的过程,即继续执行如果合并后的新的当前分区数据的数据量小于数据量阈值,如HDFS block size,则将新的当前分区数据合并至该新的当前分区数据的下一个分区数据中,重复上述步骤,直到将所有分区遍历一遍;在实际实现时,对于一个数据表,如果该数据表是以“日期”为单位进行分区,由于不同分区数据的数据规模不一致,有的分区数据的数据量比较小,通过上述合并处理,可能会把相邻几天的数据合并到一起。
上述数据同步方法,如果预设的数据仓库中,不存在所述数据表名称对应的数据表,根据所述元数据创建数据表;如果数据表中的字段或字段属性与元数据中的字段或字段属性不匹配,可以自动调整该数据表;可以按照预设的分区规则,将所述目标数据划分为多个分区数据;采用并行的方式,将所述多个分区数据写入创建的所述数据表中。该方法通过将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息写入配置信息,进而基于该配置信息进行数据同步,如果业务系统发生变化,可以动态响应业务系统地变化,自适应调节需要同步的数据,当数据源或者元数据需要更新时,只需要更新相应的配置信息,不需要工程师手动修改用于数据同步的相关代码语句;该方式减少了人工的干预;从而提高了数据同步的灵活性和适应性。
并且,以矩阵数据表为中心,进行数据流转和转换,屏蔽了底层多源异构数据库系统的差异性,基于内存计算的方式,避免了额外的磁盘IO开销;通过分布式并行计算,提升了计算效率;通过将处理过程函数化配置化,提高了数据同步的可扩展性。
基于上述实施例,为了进一步理解上述数据同步方法,下面提供一种数据同步的工作流程示意图,如图4所示,以说明上述数据同步过程。
首先加载配置信息,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据,元数据包括数据表名称、字段和字段的字段属性;具体的,该数据源可以为多源异构数据源;数据抽取模块根据该配置信息,从多源异构数据源中抽取该元数据对应的目标数据,并存入内存临时表,该内存临时表可以以DataFrame(矩阵数据表)的形式缓存在内存中;然后从该内存临时表和数据仓库的ODS分区表(即,数据仓库的数据表;由于数据仓库中的数据表通常存储在数据仓库的ODS层,因此也可以称为ODS分区表)中分别读取该元数据,进行元数据比对,并将比对结果反馈至数据仓库的ODS分区表,以当比对结果显示元数据不一致时,根据该比对结果创建ODS分区表。
为了增加任务的并行度,提高数据同步的效率,将内存临时表中的目标数据以分布式数据写入的方式写入所创建的ODS分区表中;为避免过多的小文件影响数据查询和存储效率,通常会根据所加载的HDFS配置信息,对分区表小文件优化处理,一般HDFS配置信息中包含数据量阈值,根据该数据量阈值对相邻分区的小文件进行合并处理,得到同步及优化后的ODS分区表。
基于上述内容,下面对图4中的数据抽取模块进行详细介绍,参见图5所示的一种数据抽取的工作流程示意图;该示意图中,多元异构数据源包括关系型数据库、非关系型数据库和Kafka、ES;首先加载配置信息,根据该配置信息对上述关系型数据库、非关系型数据库和Kafka、ES进行数据提取,对提取出的目标数据进行格式化处理,以将不同数据源中不同的命名规范进行统一;将格式化处理后的目标数据存入内存临时表,该内存临时表可以以DataFrame(矩阵数据表)的形式缓存在内存中。
基于上述内容,下面对图4中根据比对结果创建ODS分区表的过程进行详细介绍,参见图6所示的一种创建ODS分区表的工作流程示意图;从DataFrame(矩阵数据表)和数据仓库的ODS分区表中分别读取该元数据,并进行元数据比对,如果比对结果显示元数据一致,即元数据中的数据表名称、字段和该字段的字段属性都相同,则可以将DataFrame(矩阵数据表)中的目标数据以分布式数据写入的方式写入对应的ODS分区表中;如果比对结果显示元数据不一致,比如,当数据仓库中不存在与数据表名称相匹配的ODS分区表时,可以根据该元数据新建ODS分区表;如果数据仓库中存在与该数据表名称相同的ODS分区表,但是ODS分区表中的字段或字段属性与元数据不匹配,服务器通常会自动调整ODS分区表中的字段或字段属性,使其与元数据匹配;将DataFrame(矩阵数据表)中的目标数据以分布式数据写入的方式写入新建或调整后的ODS分区表中。
对应于上述方法实施例,参见图7所示的一种数据同步装置的结构示意图,所述装置包括:加载模块70,用于加载预先配置的配置信息;其中,所述配置信息包括数据源、以及所述数据源中需要进行同步的数据的元数据;获取模块71,用于从所述数据源中获取所述元数据对应的目标数据,缓存所述目标数据;同步模块72,用于将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中。
本发明实施例提供的数据同步装置,首先加载预先配置的配置信息;其中,该配置信息包括数据源、以及该数据源中需要进行同步的数据的元数据;然后从该数据源中获取并缓存该元数据对应的目标数据;将该目标数据同步至预设的数据仓库中的,与该元数据相匹配的数据表中。该装置通过将数据源、以及该数据源中需要进行同步的数据的元数据等配置信息写入配置信息,进而基于该配置信息进行数据同步,当数据源或者元数据需要更新时,只需要更新相应的配置信息,不需要工程师手动修改用于数据同步的相关代码语句;该方式减少了人工的干预;从而提高了数据同步的灵活性和适应性。
进一步的,该获取模块71还用于:加载预先配置的Spark函数算子;通过所述函数算子,从所述数据源中抽取所述元数据对应的目标数据。
进一步的,该获取模块71还用于:对所述目标数据进行预处理,将预处理后的所述目标数据以矩阵数据表的形式缓存在内存中;其中,所述预处理包括:将所述目标数据转换成预设的数据类型,和/或,将所述目标数据的元数据的名称转换成预设的名称。
进一步的,所述元数据包括数据表名称、字段和所述字段的字段属性;该同步模块72还用于:如果预设的数据仓库中,不存在所述数据表名称对应的数据表,根据所述元数据创建数据表;将所述目标数据存储至创建的所述数据表中。
进一步的,该同步模块72还用于:如果存在所述数据表名称对应的数据表,且所述数据表中的字段与所述元数据中的字段不匹配,将所述数据表中的字段调整为所述元数据中的字段。
进一步的,该同步模块72还用于:将所述目标数据存储至创建的所述数据表中的步骤之前,所述方法还包括:如果所述数据表名称对应的数据表中,存在字段属性与所述元数据中字段属性不匹配的目标字段,将所述目标字段的字段属性调整为所述元数据中,所述目标字段的字段属性。
进一步的,该同步模块72还用于:按照预设的分区规则,将所述目标数据划分为多个分区数据;采用并行的方式,将所述多个分区数据写入创建的所述数据表中。
进一步的,该同步模块72还用于:启动多个Spark执行器;多个所述执行器并行运行;其中,每个所述执行器读取该执行器对应的分区数据,将读取到的所述分区数据写入至创建的所述数据表中。
进一步的,该同步模块72还用于:根据所述分区数据的数据量,将相邻的所述分区数据进行合并处理。
进一步的,该同步模块72还用于:根据所述数据表中所述多个分区数据的存储位置和数据量,对每个所述分区数据进行下述处理:如果当前分区数据的数据量小于预设的数据量阈值,将所述当前分区数据合并至所述当前分区数据的下一个分区数据中;将所述当前分区数据的下一个分区数据确定为新的当前分区数据。
本发明实施例所提供的数据同步装置,其实现原理及产生的技术效果和前述数据同步方法实施例相同,为简要描述,数据同步装置实施例部分未提及之处,可参考前述数据同步方法实施例中相应内容。
本发明实施例还提供了一种服务器,参见图8所示,该服务器包括处理器130和存储器131,该存储器131存储有能够被处理器130执行的机器可执行指令,该处理器130执行机器可执行指令以实现上述数据同步方法。
进一步地,图8所示的服务器还包括总线132和通信接口133,处理器130、通信接口133和存储器131通过总线132连接。
其中,存储器131可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口133(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线132可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器130可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器130中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器130可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器131,处理器130读取存储器131中的信息,结合其硬件完成前述实施例的方法的步骤。
本发明实施例还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述数据同步方法,具体实现可参见方法实施例,在此不再赘述。
本发明实施例所提供的数据同步方法、装置和服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (13)

1.一种数据同步方法,其特征在于,所述方法包括:
加载预先配置的配置信息;其中,所述配置信息包括数据源、以及所述数据源中需要进行同步的数据的元数据;
从所述数据源中获取所述元数据对应的目标数据,缓存所述目标数据;
将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中。
2.根据权利要求1所述的方法,其特征在于,从所述数据源中获取所述元数据对应的目标数据的步骤,包括:
加载预先配置的Spark函数算子;
通过所述函数算子,从所述数据源中抽取所述元数据对应的目标数据。
3.根据权利要求1所述的方法,其特征在于,缓存所述目标数据的步骤,包括:
对所述目标数据进行预处理,将预处理后的所述目标数据以矩阵数据表的形式缓存在内存中;其中,所述预处理包括:将所述目标数据转换成预设的数据类型,和/或,将所述目标数据的元数据的名称转换成预设的名称。
4.根据权利要求1所述的方法,其特征在于,所述元数据包括数据表名称、字段和所述字段的字段属性;
将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中的步骤,包括:
如果预设的数据仓库中,不存在所述数据表名称对应的数据表,根据所述元数据创建数据表;
将所述目标数据存储至创建的所述数据表中。
5.根据权利要求4所述的方法,其特征在于,将所述目标数据存储至创建的所述数据表中的步骤之前,所述方法还包括:
如果存在所述数据表名称对应的数据表,且所述数据表中的字段与所述元数据中的字段不匹配,将所述数据表中的字段调整为所述元数据中的字段。
6.根据权利要求5所述的方法,其特征在于,将所述目标数据存储至创建的所述数据表中的步骤之前,所述方法还包括:
如果所述数据表名称对应的数据表中,存在字段属性与所述元数据中字段属性不匹配的目标字段,将所述目标字段的字段属性调整为所述元数据中,所述目标字段的字段属性。
7.根据权利要求4所述的方法,其特征在于,将所述目标数据存储至创建的所述数据表中的步骤,包括:
按照预设的分区规则,将所述目标数据划分为多个分区数据;
采用并行的方式,将所述多个分区数据写入创建的所述数据表中。
8.根据权利要求7所述的方法,其特征在于,采用并行的方式,将所述多个分区数据写入创建的所述数据表中的步骤,包括:
启动多个Spark执行器;
多个所述执行器并行运行;其中,每个所述执行器读取该执行器对应的分区数据,将读取到的所述分区数据写入至创建的所述数据表中。
9.根据权利要求7所述的方法,其特征在于,将所述多个分区数据写入创建的所述数据表中的步骤之后,所述方法还包括:根据所述分区数据的数据量,将相邻的所述分区数据进行合并处理。
10.根据权利要求9所述的方法,其特征在于,根据所述分区数据的数据量,将相邻的所述分区数据进行合并处理的步骤,包括:
根据所述数据表中所述多个分区数据的存储位置和数据量,对每个所述分区数据进行下述处理:
如果当前分区数据的数据量小于预设的数据量阈值,将所述当前分区数据合并至所述当前分区数据的下一个分区数据中;
将所述当前分区数据的下一个分区数据确定为新的当前分区数据。
11.一种数据同步装置,其特征在于,所述装置包括:
加载模块,用于加载预先配置的配置信息;其中,所述配置信息包括数据源、以及所述数据源中需要进行同步的数据的元数据;
获取模块,用于从所述数据源中获取所述元数据对应的目标数据,缓存所述目标数据;
同步模块,用于将所述目标数据同步至预设的数据仓库中的,与所述元数据相匹配的数据表中。
12.一种服务器,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现权利要求1-10任一项所述的数据同步方法。
13.一种机器可读存储介质,其特征在于,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现权利要求1-10任一项所述的数据同步方法。
CN201911238217.5A 2019-12-05 2019-12-05 数据同步方法、装置和服务器 Pending CN112925835A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911238217.5A CN112925835A (zh) 2019-12-05 2019-12-05 数据同步方法、装置和服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911238217.5A CN112925835A (zh) 2019-12-05 2019-12-05 数据同步方法、装置和服务器

Publications (1)

Publication Number Publication Date
CN112925835A true CN112925835A (zh) 2021-06-08

Family

ID=76161206

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911238217.5A Pending CN112925835A (zh) 2019-12-05 2019-12-05 数据同步方法、装置和服务器

Country Status (1)

Country Link
CN (1) CN112925835A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114490842A (zh) * 2021-12-28 2022-05-13 航天科工智慧产业发展有限公司 一种多源数据的接口数据查询方法和数据查询引擎
CN113672683B (zh) * 2021-08-19 2024-03-29 上海沄熹科技有限公司 基于Spark SQL的分布式数据库元数据同步装置及方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130166879A1 (en) * 2010-08-30 2013-06-27 Ninghui Sun Multiprocessor system and synchronous engine device thereof
CN105718468A (zh) * 2014-12-02 2016-06-29 阿里巴巴集团控股有限公司 一种数据仓库ods层的建立方法和装置
CN108009261A (zh) * 2017-12-12 2018-05-08 北京奇艺世纪科技有限公司 一种数据同步方法、装置及电子设备
CN109885581A (zh) * 2019-03-14 2019-06-14 苏州达家迎信息技术有限公司 数据库的同步方法、装置、设备及存储介质
CN110347693A (zh) * 2019-07-11 2019-10-18 招商局金融科技有限公司 数据同步方法、装置及存储介质
CN110457397A (zh) * 2019-08-16 2019-11-15 深圳前海微众银行股份有限公司 一种数据同步的方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130166879A1 (en) * 2010-08-30 2013-06-27 Ninghui Sun Multiprocessor system and synchronous engine device thereof
CN105718468A (zh) * 2014-12-02 2016-06-29 阿里巴巴集团控股有限公司 一种数据仓库ods层的建立方法和装置
CN108009261A (zh) * 2017-12-12 2018-05-08 北京奇艺世纪科技有限公司 一种数据同步方法、装置及电子设备
CN109885581A (zh) * 2019-03-14 2019-06-14 苏州达家迎信息技术有限公司 数据库的同步方法、装置、设备及存储介质
CN110347693A (zh) * 2019-07-11 2019-10-18 招商局金融科技有限公司 数据同步方法、装置及存储介质
CN110457397A (zh) * 2019-08-16 2019-11-15 深圳前海微众银行股份有限公司 一种数据同步的方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113672683B (zh) * 2021-08-19 2024-03-29 上海沄熹科技有限公司 基于Spark SQL的分布式数据库元数据同步装置及方法
CN114490842A (zh) * 2021-12-28 2022-05-13 航天科工智慧产业发展有限公司 一种多源数据的接口数据查询方法和数据查询引擎

Similar Documents

Publication Publication Date Title
CN107544984B (zh) 一种数据处理的方法和装置
US9953102B2 (en) Creating NoSQL database index for semi-structured data
US10956422B2 (en) Integrating event processing with map-reduce
RU2663358C2 (ru) Устройство и способ кластерного хранения
US20170083573A1 (en) Multi-query optimization
CN109376196B (zh) 一种redo日志批量同步方法及装置
CN114722119A (zh) 数据同步方法及系统
US20220121652A1 (en) Parallel Stream Processing of Change Data Capture
CN112925835A (zh) 数据同步方法、装置和服务器
CN111680017A (zh) 一种数据同步的方法及装置
CN111651519A (zh) 数据同步方法、数据同步装置、电子设备及存储介质
CN115292414A (zh) 一种业务数据同步到数仓的方法
CN114385760A (zh) 增量数据实时同步的方法、装置、计算机设备及存储介质
CN113342834A (zh) 一种解决大数据系统中历史数据变化的方法
CN107577809A (zh) 离线小文件处理方法及装置
CN103809915A (zh) 一种磁盘文件的读写方法和装置
CN115757481A (zh) 数据迁移方法、装置、设备和存储介质
CN115809311A (zh) 知识图谱的数据处理方法、装置及计算机设备
CN114490865A (zh) 数据库同步方法、装置、设备及计算机存储介质
US10762084B2 (en) Distribute execution of user-defined function
CN113568966A (zh) 用于ods层和dw层之间的数据处理方法与系统
CN112395291A (zh) 一种根据数据资产动态生成宽表的方法及系统
CN110851515A (zh) 一种基于Spark分布式环境下的大数据ETL模型执行方法及介质
CN111274316A (zh) 多级数据流转任务的执行方法及装置、电子设备、存储介质
CN111198893A (zh) 一种数据更新方法、装置、可读介质及电子设备

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