一种数据迁移方法和装置的制造方法

文档序号:9929569阅读:335来源:国知局
一种数据迁移方法和装置的制造方法
【技术领域】
[0001 ]本公开涉及计算机技术,特别涉及一种数据迀移方法和装置。
【背景技术】
[0002]Hadoop是一个能够对大量数据进行分布式处理的软件框架,是一个能够让用户轻松架构和使用的分布式计算平台,用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序,在大数据处理中得到广泛应用。随着大数据应用需求的不断扩张,Hadoop也进行了一系列的版本变革以解决庞大的需求变更造成的技术瓶颈。不过,Hadoop各个版本之间通常是不互相兼容的,因此数据迀移就成为版本升级过程中必不可少的操作。例如,HIVE(hive是基于Hadoop的一个数据仓库工具)和HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)之间的数据迀移是经常遇到的一个场景。
[0003]在跨集群的HIVE与HDFS之间的数据迀移场景中,当前的数据迀移方式是,利用Hadoop自身的工具将一个Hadoop集群的数据导出到本地,然后再导入到另一个Hadoop集群的HDFS或者HIVE中。这种迀移方式中,用户需要操作两次才能实现最终的数据迀移,整个过程相当于进行了两次完整的数据迀移,使得数据迀移的效率降低;并且,该方式需要将数据导出到本地,占用本地磁盘空间,磁盘I/O的操作相当耗时,也降低了迀移效率。

【发明内容】

[0004]有鉴于此,本公开提供一种数据迀移方法和装置,以提高Hadoop跨集群的数据迀移的效率。
[0005]具体地,本公开是通过如下技术方案实现的:
[0006]第一方面,提供一种数据迀移方法,所述数据迀移方法通过数据迀移工具执行,所述方法包括:
[0007]通过第一类加载器加载第一集群的数据源,通过第二类加载器加载第二集群的数据源;所述第一类加载器和第二类加载器均继承所述数据迀移工具的加载器;
[0008]在所述数据迀移工具中,第一线程通过所述第一类加载器读取第一集群的数据源的数据,将所述数据放入数据队列;
[0009]在所述数据迀移工具中,第二线程通过所述第二类加载器将所述数据队列中的数据写入第二集群的数据源。
[0010]第二方面,提供一种数据迀移装置,包括:
[0011 ]加载器配置模块,用于通过第一类加载器加载第一集群的数据源,通过第二类加载器加载第二集群的数据源;所述第一类加载器和第二类加载器均继承所述数据迀移工具的加载器;
[0012]数据读取模块,用于在所述数据迀移工具中,第一线程通过所述第一类加载器读取第一集群的数据源的数据,将所述数据放入数据队列;
[0013]数据写入模块,用于在所述数据迀移工具中,第二线程通过所述第二类加载器将所述数据队列中的数据写入第二集群的数据源。
[0014]本公开实施例的数据迀移方法和装置,通过第一类加载器和第二类加载器分别加载两个集群的数据目录,第一类加载器从第一集群数据目录读取的数据,可以被第二类加载器获取并将数据写入第二集群的数据目录,从而通过该JVM就可以实现两个集群之间的数据迀移,相对于两次操作迀移数据的方式,提高了 Hadoop跨集群的数据迀移的效率。
【附图说明】
[0015]图1是本公开实施例提供的一种数据迀移方法的原理图;
[0016]图2是本公开实施例提供的一种数据迀移方法的流程图;
[0017]图3是本公开实施例提供的一种数据迀移的过程示意图;
[0018]图4是本公开实施例提供的另一种数据迀移的过程示意图;
[0019]图5是本公开实施例提供的又一种数据迀移的过程示意图;
[0020]图6是本公开实施例提供的一种数据迀移装置的结构示意图。
【具体实施方式】
[0021]为了克服当前的数据迀移中,由于采用两个迀移工具操作两次才能实现数据迀移导致的迀移效率低的问题,本申请实施例提供的数据迀移方法,将在一个数据迀移工具中实现数据迀移,以提高跨集群的数据迀移的效率。
[0022]图1示例了本申请的数据迀移方法的原理,如图1所示,假设第一集群11和第二集群12是两个不同的Hadoop集群,例如,第一集群11可以是CDH5.2.0,第二集群12可以是Hadoop 2.6.0;或者,第一集群11是Hadoop I.χ,第二集群12是Hadoop 2.χ;或者,还可以第一集群11是HDP,第二集群12是Hadoop,等,不再详举,这些例子中,第一集群11和第二集群12的数据迀移即为跨集群的数据迀移。
[0023]跨集群的数据迀移的场景,可以是HIVE与HDFS之间的数据迀移,例如,将CDH5.2.0的HIVE中的数据迀移至Hadoop 2.6.0中的HDFS,或者,也可以是将Hadoop 2.6.0中的HDFS中的数据迀移至CDH 5.2.0的HIVE。即数据迀移可以是HIVE与HDFS之间任一方向的迀移。
[0024]请继续参见图1,本申请提供了一个数据迀移工具13,将在该数据迀移工具13中实现跨集群的数据迀移的过程。例如,该数据迀移工具13可以是JVM(Java Virtual Machine,Java虚拟机)。在该JVM中,可以根据类加载器的双亲委派机制,创建两个类加载器,实现对两个集群的数据操作。图2示例了该数据迀移方法的流程:
[0025]在步骤201中,通过第一类加载器加载第一集群的数据源,通过第二类加载器加载第二集群的数据源;第一类加载器和第二类加载器均继承数据迀移工具的加载器。
[0026]例如,可以先进行JVM的初始化,加载该JVM工具本身所需的Jar包。
[0027]本步骤中,可以创建两个类加载器,结合图1的示例,一个称为第一类加载器14,另一个称为第二类加载器15。
[0028]其中,第一类加载器14继承当前JVM的加载器,例如,当第一集群11是⑶H5.2.0时,该第一类加载器14可以命名为⑶H 5.2.0Class Loader,用该第一类加载器14加载第一集群11的数据源,例如,加载CDH Lib所在的目录,包括HIVE JDBC驱动Jar。
[0029]第二类加载器15同样继承JVM的加载器,例如,当第二集群12是Hadoop 2.6.0时,该第二类加载器15可以命名为Hadoop 2.6.0Class Loader,用该第二类加载器15加载第二集群12的数据源,例如,加载Hadoop Lib所在的目录。上述的第一类加载器14和第二类加载器15继承了相同的加载器,即为双亲委派机制。
[0030]在步骤202中,在数据迀移工具中,第一线程通过第一类加载器读取第一集群的数据源的数据,将数据放入数据队列。
[0031]例如,在JVM中可以创建一个新的线程,将该线程可以称为第一线程。该第一线程用于从第一集群中读取数据,可以将该第一线程的Context Class Loader设置为CDH5.2.0Class Loader,使得第一线程可以通过第一类加载器CDH 5.2.0Class Loader读取第一集群中的数据。
[0032]本步骤中,第一线程读取的数据可以放入数据队列中,参见图1所示,示例了其中的一个数据队列16,第一线程读取的数据放入该队列中。
[0033]在步骤203中,在数据迀移工具中,第二线程通过第二类加载器将数据队列中的数据写入第二集群的数据源。
[0034]例如,在JVM中可以再创建一个新的线程,将该线程可以称为第二线程。该第二线程用于向第二集群中写入数据,可以将该第二线程的Context Class Loader设置为Hadoop2.6.0Class Loader。本步骤中,Hadoop 2.6.0Class Loader可以从数据队列16中读取出第一线程放入的数据,并将数据写入第二集群。
[0035]在本例子的数据迀移方法中,通过第一类加载器和第二类加载器分别加载两个集群的数据目录,例如,Hadoop Lib所在的目录,数据目录相当于集群数据的存放位置,在本例子中也可以称为数据源,第一类加载器从第一集群数据目录读取的数据,可以被第二类加载器获取并将数据写入第二集群的数据目录,从而通过该JVM就可以实现两个集群之间的数据迀移,相对于两次操作迀移数据的方式,提高了数据迀移的效率。用户只要提供两个集群对应的版本号相应的LIB,即可通过上述的方案实现在一个进程中完成两个集群的HIVE和HDFS之间的数据迀移,屏蔽了不同版本集群的实现差异,
[0036]此外,在步骤203中第二线程向第
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1