一种基于map reduce的增量数据同步的方法和装置
【技术领域】
本发明涉及数据仓库领域,特别是涉及一种基于map reduce的增量数据同步的方法和装置。
【背景技术】
数据迁移同步过程中,增量数据同步是一种常见的数据同步方式。在增量数据同步的过程中,从数据源有效捕获增量数据,根据增量数据对增量目的进行同步,是数据处理生产环境中的必备方案。
目前效率较高的增量比对同步方法中,必须对增量源和增量目的根据相同的唯一特征标识进行相同的顺序排列,然后按照排序后的顺序获取增量源和增量目的的对应关系,进而获取差异数据。但是,在增量源和增量目的数据规模较大的情况下,进行超大规模数据的排序是一个比较耗时的操作,并且排序后比对差异的过程一般也只能在单线程中处理。同时,在进行增量同步时,需要对于非增加或非删除操作进行全部或部分字段内容的比较,以判断增量源和增量目的中的字段内容是否相同,从而判断是否对增量目的执行更新操作,这一操作也影响了增量同步的效率。
鉴于此,如何克服该现有技术所存在的缺陷,解决现有增量比对同步方法效率较低的现象,是本技术领域待解决的问题。
【发明内容】
针对现有技术的以上缺陷或改进需求,本发明解决了现有增量比对同步方法中因需要进行大规模数据的排序和单线程比对而导致的增量比对和同步效率较低的问题。
本发明实施例采用如下技术方案:
第一方面,本发明提供了一种ETL增量数据同步的方法,具体为:Mapper阶段,按照预设分片分别读取增量源数据和增量目的数据;对每一个增量源数据和/或每一个增量目的数据进行清洗转换;将增量源数据和增量目的数据分别映射为相应的key/value结构,写入map reduce的context,其中key为增量源或增量目各自的唯一标识符序列化后的数据;Reducer阶段,从context中接收每一对key/value结构归约后生成的key/values结构;根据key/values结构的类型判断需进行的同步操作;根据需进行的同步操作对增量数据进行同步。
优选的,将每一组对应的增量源数据和增量目的数据分别映射为相应的key/value结构,具体包括:将增量源数据和增量目的进行清洗转换后的数据分别进行序列化;将序列化后的增量源数据的开头添加增量源标志,序列化后的增量目的数据的开头添加增量目的标志;将序列化并添加位置标志的增量源和增量目的数据分别作为各自key/value结构的value,增量源或增量目各自的唯一标识符序列化后的数据作为各自key/value结构的key。
优选的,根据每一个key/values结构的类型判断需进行的同步操作,包括:判断key/values结构中value的数量是否为两个;若为两个value,判断两个value的需同步的值是否相同,若相同,无需进行同步操作,若不同,需进行数据更新操作;若为一个value,判断value的位置标志,若位置标志为增量源,需进行数据插入操作,若位置标志为增量目的,需进行数据删除操作。
优选的,根据需进行的同步操作对增量数据进行同步,包括:当需进行的同步操作为插入操作时,获取增量源对应的value,反序列化出增量源的原始数据,根据反序列化后的key将增量源的原始数据插入至增量目的;当需进行的同步操作为删除操作时,根据反序列化后的key删除增量目的对应的原始数据;当需进行的同步操作为更新操作时,获取增量源的value,反序列化出增量源的原始数据,根据增量源的原始数据和反序列化后的key将增量源的原始数据更新至增量目的。
优选的,按照预设分片读取增量源数据和增量目的数据时,每个预设分片的读取任务分配给不同的mapper节点并发执行。
优选的,每个mapper节点生成各自分片对应的mapper graph,每个读取增量源的数据的mapper graph包括数据读取组件、数据清洗转换组件和增量比对组件。
优选的,增量比对组件包括增量比对reduce sink组件和增量比对reduce source组件,其中,增量比对reduce sink组件在mapper阶段执行,增量比对reduce source组件在reducer阶段执行。
优选的,根据key/values结构的类型判断需进行的同步操作时,每一组key/values结构的数据装载任务分配给不同的reducer节点并发执行。
优选的,各reducer节点生成每个key/values结构对应的reducer graph,每个reducer graph包括增量比对reduce source组件和数据装载组件,增量比对reducesource组件根据每一个key/values结构的类型判断需进行的同步操作完成后,向数据装载组件发送带有同步操作类型标志的同步数据,由增量目的数据装载组件完成数据同步。
另一方面,本发明提供了一种基于map reduce的增量数据同步的装置,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成权利要求1-9任一的基于map reduce的增量数据同步的方法。
与现有技术相比,本发明实施例的有益效果在于:本发明利用hadoop map reduce框架对大规模数据进行同步处理,mapper阶段并行读取分片数据源、对数据清洗转换,使用mapper的特性避免了大规模数据排序操作,提高数据同步效率,reducer阶段通过对mapper阶段映射后的数据进行并行比对和并行同步,提高了数据比对和同步效率。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于map reduce的增量数据同步的方法流程图;
图2为本发明实施例提供的另一种基于map reduce的增量数据同步的方法流程图;
图3为本发明实施例提供的另一种基于map reduce的增量数据同步的方法流程图;
图4为本发明实施例提供的另一种基于map reduce的增量数据同步的方法流程图;
图5为本发明实施例提供的另一种基于map reduce的增量数据同步的方法模块示意图;
图6为本发明实施例提供的一种基于map reduce的增量数据同步的装置结构示意图;
其中,附图标记如下:
21:处理器;22:存储器。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。下面就参考附图和实施例结合来详细说明本发明。
实施例1:
在进行ETL数据的增量同步时,需要对增量源和增量目的中相应的数据进行逐一对比,为了将增量源和增量目的中的数据进行对应,需要先对数据进行排序,在通常的使用场景中,需要同步的增量数据规模非常大,排序需消耗的时间和资源也较多。而且,排序后的对比过程一般为单线程处理,效率较低。
Hadoop map reduce是面向大数据并行处理的计算模型、框架和平台,它可以用于大规模数据集(大于1TB)的并行运算,允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群,提供了一个庞大但设计精良的并行计算软件框架将并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,同时提供了抽象的操作和并行编程接口以简单方便地完成大规模数据的编程和计算处理。因此,为了减少排序和对比过程的时间,可以将增量源和增量目的根据数据特征进行封装,并利用Hadoop的mapreduce过程避免大规模数据排序,并将对比和更新的步骤并发执行,以提高数据同步的效率。
如图1所示,本发明实施例提供的基于map reduce的增量数据同步的方法具体步骤如下。其中,mapper阶段执行步骤101-步骤103,reducer阶段执行步骤104-步骤106:
步骤101:按照预设分片分别读取增量源数据和增量目的数据。
本发明实施例中,增量源与增量目的一般为数据库的表,进行数据同步时,将增量源表中发生变化的数据更新至增量目的。由于每个数据库的行之间都相互独立,因此可以将需同步的数据分为多个部分并发进行比较和同步,以提高数据同步效率。在本实施例一般使用的数据库场景中,增量源和增量目的如果是分区表,可以直接以分区表作为预设分片对增量源和增量目的的数据进行分片读取,每一个分片的数据为一个split,不同split中的数据在不同的mapper任务中读取、清洗转换,序列化后的key/value写入context;并在reducer任务中的对比线程和写入线程中完成数据同步。在本实施例的非数据库实施场景中,可以根据场景相应的预设分片方式进行分片,如文件目录、数据存储结构、存储单元等。
进一步的,在数据库使用场景中,若数据库的表不是分区表,需要通过其它方式划分预设分片,例如,可以按照某一索引字段进行一定的范围划分获取split。
步骤102:对每一个增量源数据和/或每一个增量目的数据进行清洗转换。
在本实施例的具体实施场景中,增量源与增量目的在数据结构上可能存在不一致,如在数据库场景中,表的字段名、字段个数、字段数据类型等属性可能不同,在文件同步场景中,文件头、文件格式等可能不同。将每一个增量源和每一个增量目的中包含的数据进行清洗转换,包括去除每一个增量源不需要同步的数据,以及其他相应的转换。清洗和转换步骤从增量源中清洗掉不需要同步的数据,仅保留增量目的需要的数据,并同时进行数据类型的转换;另外,增量比对过程中,需要通过增量目的与增量源字段匹配映射关系,将对应的增量源和增量目的数据结构调整为一致,以确保写入增量目的数据正确。当增量目的与增量源数据结构不完全相同时,如字段名,字段个数,字段顺序等不完全相同时,需进行增量目的与增量源字段的匹配映射。增量源数据调整为与增量目的相同的结构后,方可进行后续同步操作。
步骤103:将每一组对应的增量源数据和增量目的数据分别映射为相应的key/value结构,写入map reduce的context,其中key为增量源或增量目各自的唯一标识符序列化后的数据。
在进行数据的增量同步时,为了利用map reduce的特性,需要在mapper阶段将增量源数据和增量目的数据分别映射为key/value结构并写入context后,才能够在reducer阶段通过hadoop后台的归并排序将相同的key对应的value放入同一个values中进行比对,而无需进行额外的数据排序和key匹配操作,避免了大量数据排序和key匹配导致的同步效率降低。具体的,key可以使用增量源和增量目的原有的唯一标识符,如数据库的键值、唯一连接列、文件的id等。value与增量源和增量目的原始数据相对应。
在本实施例的具体使用场景中,如图2所示,可以通过下述步骤将增量源数据或增量目的数据映射为key/value结构:
步骤201:分别将增量源或增量目的的数据全部或部分序列化。
在实际使用场景中,增量源和增量目的具有不同的数据结构,为了便于进行对比,可以将增量源和增量目的中的数据序列化。进行序列化时,可以全部序列化,也可以仅将需要对比的部分数据序列化。进一步的,若需对比的数据具有其它易进行对比的方式,也可以根据具体场景使用其它方式,例如,需对比数据为文件时,可以使用文件的MD5校验码作为value,减少对比的数据量,提高对比效率。
步骤202:将序列化后的增量源数据的开头添加增量源标志,序列化后的增量目的数据的开头添加增量目的标志。
构建key/value结构时,为了对value的来源位置进行区分,便于后续比对,以及后续对需进行的操作类型进行判断,因此需要在每个value前增加位置标志。具体的,位置标志可以简单的使用标志量tag进行指示,如tag=0时表示该value为增量源数据,tag=1时表示该value为增量目的数据。在后续的比对中,可以根据位置标志确认数据来源,以匹配相应的同步操作。
步骤203:将序列化并添加位置标志的增量源和增量目的数据分别作为各自key/value结构的value;
步骤204:增量源或增量目各自的唯一标识符序列化后的数据作为各自key/value结构的key。
经过步骤201和步骤202后,实际使用的value具体为:增量源value=增量源位置标志+序列化后的增量源数据,或增量目的value=增量目的位置标志+序列化后的增量目的数据。进行映射后,增量源的key/value结构为{key;增量源value},增量目的的key/value结构为{key;增量目的value}。其中,互相对应的增量源数据和增量目的数据的key相同,例如,在数据库环境中,具有相同的唯一连接列的增量源数据和增量目的数据的key对应相同的唯一连接列序列化后的数据。具有相同key的数据在reducer阶段会归并至同一个key/values结构中。
步骤104:从context中接收每一对key/value结构归约后生成的key/values结构。
在步骤103中将对应的增量源和增量目的组织为key/value结构并写入mappercontext后,map reduce会自动将将key相同的key/value归并为key/values结构写入reducer context中,因此在reducer阶段,从context中取出的数据即为已归并好的key/values结构。当数据同时存在于增量源和增量目的中时,key/values结构中包含两个value,即{key;增量源value;增量目的value};数据仅存在于增量源时,key/values结构仅包含一个value,即{key;增量源value};数据仅存在于增量目的中时,key/values结构为也仅包含一个value,即{key;增量目的value}。Reducer阶段从reducer context接收的各组key/values结构互相独立,因此可以对所有的key/values结构并行进行对比,提高对比效率。同时,由于map reduce中能够快速自动实现大规模数据的归并排序,因此无需使用者对数据进行额外的组合和排序,省去了现有增量数据同步方法中对数据排序的操作,节省了大规模数据排序花费的时间,提高了数据同步效率。
步骤105:根据key/values结构的类型判断需进行的同步操作。
在本实施例的具体实施场景中,如图3所示,根据从reducer context接收的key/values结构中values的特征,可以方便的通过下述步骤具体判断需进行的同步操作:
步骤301:判断key/values结构中values的数量是否为两个。
步骤302:若values的数量为两个,说明数据同时存在于增量源和增量目的中,需要进一步判断两个value的值是否相同。
步骤303:若两个value值相同,说明增量源和增量目的数据相同,无需进行同步操作。
步骤304:若两个value值不同,说明增量源和增量目的数据不同,需进行数据更新操作,将增量源中的数据写入增量目的中。
步骤305:若value的数量不为两个,说明数据仅存在于增量源中或仅存在于增量目的中,需要判断value的位置标志,确认value为增量源还是增量目的。
步骤306:若位置标志为增量源,说明数据仅存在于增量源中不存在于增量目的中,即增量源中新增的数据,需进行数据插入操作。
步骤307:若位置标志为增量目的,说明数据仅存在于增量目的中不存在于增量源中,即增量源中已被删除的数据,需进行数据删除操作。
步骤106:根据需进行的同步操作对增量数据进行同步。
在步骤105中确定每一组key/values结构中的数据需进行的操作后,可以根据每一组key/valuse结构进行同步的增量目的,如图4所示,可以使用如下步骤对key所对应的增量目的进行操作:
步骤401:当需进行的同步操作为插入操作时,获取增量源对应的value,反序列化出增量源的原始数据,根据反序列化后的key将增量源的原始数据插入至增量目的。
步骤402:当需进行的同步操作为删除操作时,根据反序列化后的key删除增量目的对应的原始数据。
步骤403:当需进行的同步操作为更新操作时,分别获取增量源和增量目的对应的value,反序列化出增量源的原始数据,根据增量源的原始数据和反序列化后的key将增量源的原始数据更新至增量目的。
由于key/value结构中已包含了增量源的数据,因此进行同步时不需要再次从增量源获取数据,只需使用增量源value中保存的数据进行同步。由于value中的数据为序列化后的数据,无法直接作为同步数据使用,因此在使用时需要先进行反序列化,将value中序列化后的数据还原为原始数据使用。由于key为增量源和增量目的的唯一标识,因此在进行同步时,可以通过key以及反序列化后的数据同步到增量目的,不需再进行顺序查找和对比。使用key/value结构避免了单节点的单线程排序和比对同步,提高数据同步效率。在本实施例的具体使用场景中,当增量源和增量目的为数据库时,由于key的值为序列化后的唯一连接列,因此,在进行数据同步操作时,可以直接使用反序列化后的key作为SQL语句的位置参数提交相应的操作,而不需要查找插入或删除的位置,利用数据库的机制提高数据同步的效率。
通过步骤101-步骤105,以及各步骤相应的优化和扩展方法,可以快速简便的实现增量数据的同步,提高增量数据的同步效率。
实施例2:
在实施例1的具体使用场景中,为了适应大数据场景下超大数据量的整理同步需求,提高方法的平台通用性,提高方案实施的便捷性,以及便于在分布式系统中使用,本发明实施例选择map reduce作为并发执行的具体实施方式。
在本实施例的具体使用场景中,如图5所示的hadoop map reduce框架的技术细节,实施例1中步骤101-步骤105,以及相应的具体实施步骤和优化方法由map reducejob并发执行。其中,map阶段包括步骤101-1步骤103,reduce阶段包括步骤104-步骤106。
可以使用如下方式进行具体执行,如图5,根据split中的属性信息以及Jobconfiguration中设置的流程信息,可以将map和reduce中的执行步骤进一步划分为多个节点组件,每个节点组件独立执行相应的功能。其中,数据读取增量表源节点和数据读取增量表目的节点执行步骤101,数据清洗转换节点执行步骤102,增量比对节点执行步骤104,数据装载节点执行步骤105。在数据库使用场景中,还可以包括列转换组件节点,以实现步骤102数据清洗转换过程中增量源和增量目的不同列的列转换。根据清洗转换需求的不同,可以使用多个不同功能的清洗转换节点执行步骤104,对增量源数据进行多次清洗转换。步骤103中key/value结构生成步骤可以包括在增量对比节点中。
进一步的,增量比对节点被分解为reduce sink和reduce source。reduce sink作为mapper graph的目的组件向mapper的contxt写入KEYOUT/VALUEOUT pair,运行在Mapper任务中。reduce source作为reducergraph的源组件从reducer的contxt读取KEYIN、Iterable<VALUEIN>,在Reducer任务运行。
(一)配置Job configuration
根据map reduce的使用规则,在执行map和reduce过程之前,需要对各阶段所使用的属性值进行配置,在后续InputFormat、mapper、reducer等各个阶段需要使用的属性,统一定义在Job configuration中。在本实施例中,根据具体使用场景的参数对Jobconfiguration中的各参数进行设置。
(二)重定义InputFormat
Map reduce框架一般对文本文件数据源有很好的支撑,但对于数据库或其他非文本文件场景中的InputFormat不能很好的支持,也没有比较完善的实现。为了保证输入文件按照不同场景中使用的格式被读取,需要根据实际场景重写相应的InputFormat,根据具体场景的数据类型实现getSplits,获取增量数据源与增量目的分片split。本实施例提供的方法中,获取的数据不需要返回给其它模块,因此忽略createRecordReader的实现,定义一个Dummy RecordReader,不做实际的数据读取动作。重定义InputFormat为CustomInputFormat的具体方法如下:
(1)CustomInputFormat重写getSplits。
Job configuration设置有增量源和增量目的信息,根据预设分片对增量源和增量目的分别进行分片。在数据库的实施场景中,增量源、增量目的如果是分区表,直接将分区作为预设分片得到split,非分区表需要如实施例1中的方法自定义预设分片。每个split包含表信息、预设分片信息、增量源或增量目的位置标志等等。split必须提供详细的信息给mapper,mapper才能运行split对应的mapper graph准确读取自己分区的表数据,并且在步骤203中为每个获取到的value打上相应的位置标志。
(2)CustomInputFormat重写createRecordReader
直接在mapper中重定义读取分区表数据,不需要使用recordReader来读取split对应的分区表。由于CustomInputFormat执行后需要向系统返回读取值才能正确执行,而本实施例进行数据读取后不需要输出返回值,因此需要在CustomInputFormat重写createRecordReader,令createRecordReader返回一个虚拟的record reader(dummyrecordreader)作为返回值,不做实际的数据读取动作,以保证map reduce Job可以正常提交运行,数据读取在mapper graph的数据读取source节点组件进行。
(三)重定义mapper
重定义CustomMapper为Job的mapper class。CustomMapper重定义setup、run以及cleanup。CustomInputFormat获取的每一个split各自对应一个mapper任务。如图5,增量数据源和增量数据目的的读取可以分别切分为多个分片,在图5中以split-1至split-n表示,并在步骤101的数据读取步骤中将每个预设分片的读取任务分配给不同的mapper节点并发执行。在具体实施中,map reduce能够根据分片数量自动生成相同数量的mapper节点,因此可以尽可能获取增量源和增量目的更多的分片splits,,以提高mapper任务并发度,从而提高流程执行的效率。
(1)重定义setup
setup进行增量数据读取前的一些初始化工作。setup操作后,调用run操作运行mapper graph。
(2)重定义run
一般map reduce Job的mapper class只需重定义map函数。这里不实现map函数,直接在run函数中运行mapper graph,实现增量数据源的读取,最终以KEYOUT/VALUEOUTpair的形式,即key/value结构写入context。不需要如常规的增量同步方法将需要把增量源和增量目的进行排序后再进行比对,只需往mapper context写入每一组key/value。
为了便于执行,根据split以及configuration中设置的被分解流程信息,获取数据源以及数据源下游截止到增量比对组件reduce sink的所有节点组件,这些组件生成split对应的mapper graph,mapper graph的数据源读取各自split对应数据。如图5,mapper中各个mapper graph的数据源分别对应CustomInputFormat切分后每个split对应的数据源。数据读取节点读取数据后,把数据发送给后续下游节点继续处理。
经步骤101读取到并经步骤102清洗转换的增量源的数据,以及经步骤101读取到的增量目的的数据,被发送到mapper graph的增量比对reduce sink节点,mapper graph的增量比对reduce sink节点获取上游节点的数据,再根据配置信息进行数据的序列化,序列化增量比对的连接列数据作为mapper context输出的KEYOUT;根据增量比对的配置,对接收到的数据全部或部分序列化为字节流数组,字节数组头第一个字节标志位再添加相应的位置标志tag,其中,tag=0表示增量源数据,tag=1表示增量目的数据,带有tag的序列化字节流作为mapper context输出VALUEOUT。
(3)重定义cleanup
在(2)中的mapper graph运行结束后,mapper任务进行cleanup操作,cleanup进行数据读取完成后的资源释放操作,cleanup操作结束后map过程结束。
(四)重定义reducer
同mapper一样,重定义CustomReducer为Job的reducer class。CustomReducer重定义setup、run以及cleanup。mapper分布式运行任务的数量由CustomInputFormat决定,reducer分布式运行任务的数量需要在job作业提交前在configuration根据用户设置的NumReduceTasks参数确定。为了尽可能利用hadoop yarn容器中可利用的空闲资源,NumReduceTasks的数值一般与空闲的hadoop yarn容器数量相同,或少于hadoop yarn容器数量,以提高增量比对同步的效率。
(1)重定义setup
setup进行比对差异数据入库前的相关初始化工作。setup操作后,调用run操作运行reducer graph。
(2)重定义run
如图5所示,每一个reducer任务运行增量比对reduce source、数据装载(增量表目的)组成的reducer graph。reduce source从context循环fetch接收每一个KEYIN/Iterable<VALUEIN>数据对作为key/values。每一个key/values执行如下处理方式之一。进一步的,reduce阶段的步骤104完成后,向执行同步操作的节点发送带有同步操作类型标志同步数据,以便于后续增量目的数据装载节点执行相应的操作。
处理方式一:values只有一个value,根据第一个字节标志位tag判断。tag=0,表示增量源数据,反序列化原始记录数据,向下游节点发送标志为“I”增量数据消息,表示insert操作;tag=1,表示增量目的数据,增量源没有,向下游节点发送标志为“D”增量数据消息,表示delete操作。这些增量数据消息需要根据增量比对组件配置的信息生成,比如增量源与增量目的的列对应关系等等。
处理方式二:values有两个value,根据标志位tag,以及增量比对的配置,对增量源和增量目的中的value进行对比,若不相等,反序列化出增量源记录数据和增量目的记录数据(根据实际应用需求,提高性能,增量目的记录可不进行反序列化),向下游发送标志为“UN”增量数据消息以及标志为“UO”增量数据消息,表示update操作,“UN”为源端的数据,“UO”为目的端的数据;若value相等,无增量数据发生,不需要进行数据同步操作。
context无数据可对比时,说明全部增量数据对比完成,向下游发送Finish消息,增量比对组件运行完成。
如图5,数据装载(增量表目的)接收上游发送的数据,按照标志为进行处理。标志为“I”增量数据消息插入到增量表目的;标志为“D”增量数据消息时,需要从目的删除;标志为“UN”和“UO”的两条增量数据消息,增量表目的做更新操作。接收到Finish消息,数据装载(增量表目的)运行完成。
(3)重定义cleanup
在(2)中的reducer任务运行完成后,调用cleanup进行差异数据入库完成后的资源释放操作。
(五)重定义OutputFormat
在本实施例中,mapreduce使用的context无需输出,为了保证流程正确,需要在Job configuation进行OutputFormat的dummy操作,定义DummyOutputFormat,进行虚拟输出,否则Job提交不成功。
(六)重定义提交job
完成Job configuation配置,以及map函数和reduce函数的重定义后,即可通过mapreduce的job提交接口向系统提交mapreduce任务,并启动执行。即使用setInputFormatClass、setMapperClass、setReducerClass、setNumReduceTasks、setOutputFormatClass等接口函数对重定义的CustomInputFormat、CustomMapper、CustomReducer、DummyOutputFormat函数进行提交,并提交NumReduceTasks参数等相关参数。
提交job后,mapreduce即可根据重定义的mapper和reducer并发执行步骤101-105中各步骤及实施例1中的各种扩展和优化方法,利用mapreduce的特性高效便捷的完成增量数据的获取、比对和同步任务。
实施例3:
在上述实施例1至实施例2提供的基于map reduce的增量数据同步的方法的基础上,本发明还提供了一种可用于实现上述方法的基于map reduce的增量数据同步的装置,如图6所示,是本发明实施例的装置架构示意图。本实施例的基于map reduce的增量数据同步的装置包括一个或多个处理器21以及存储器22。其中,图6中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图6中以通过总线连接为例。
存储器22作为一种基于map reduce的增量数据同步方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1至实施例2中的基于map reduce的增量数据同步方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行基于map reduce的增量数据同步的装置的各种功能应用以及数据处理,即实现实施例1至实施例2的基于map reduce的增量数据同步的方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1至实施例2中的基于map reduce的增量数据同步的方法,例如,执行以上描述的图1-图5所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。