一种控制数据传输的方法和连接器
技术领域
本发明涉及数据传输领域,特别涉及一种控制数据传输的方法和连接器。
背景技术
随着企业要存储和分析处理的数据量越来越大,Hadoop越来越受到重视,Hadoop是一个分布式系统基础架构,是Apache软件基金会的开源项目。由于Hadoop在可伸缩性、健壮性、计算性能和成本上具有无可替代的优势,事实上已成为当前主流的大数据存储和分析平台。存储由HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系统)实现,处理由MapReduce实现。
关系型数据库和Hadoop可以通过连接器进行数据相互转移,通过连接器可以将一个关系型数据库中的数据导进到Hadoop的HDFS或HBase(HadoopDatabase,Hadoop数据库)中,也可以将HDFS或HBase的数据导进到关系型数据库中。
Sqoop是Cloudera公司提供的一种开源连接器,利用Sqoop我们可以通过命令行来进行数据的导入或导出,以下为Sqoop进行数据导入及导出的原理:
(一)Sqoop从关系型数据库向Hadoop导入数据
Sqoop是通过一个MapReduce作业从关系型数据库向Hadoop导入表,其中,每一个MapReduce作业可以包括多个Map任务,这个MapReduce作业从关系型数据库的表中抽取记录,然后将记录写入HDFS。
图1演示了Sqoop是如何与源数据库及Hadoop进行交互的。在导入开始之前,Sqoop首先检查关系型数据库中将要导入的表,它检索出表中所有的列以及列的SQL(StructuredQueryLanguage,结构化查询语言)数据类型,这些SQL类型被映射到Java数据类型,在MapReduce作业中将使用这些对应的Java类型来保存字段的值,Sqoop的代码生成器使用这些信息来创建对应表的类,这些类用于保存从表中抽取的记录,然后通过一个MapReduce作业的多个Map任务将关系型数据库中的数据导入到Hadoop的HDFS中。
(二)Sqoop从Hadoop向关系型数据库导入数据
参见图2,在导入开始之前,Sqoop同样需要检查关系型数据库中的表,然后根据关系型数据库中目标表的定义生成一个Java类,这个生成的类能够从文本文件中解析记录,并能够向目标表中插入相应类型的值。接着会启动一个MapReduce作业,通过MapReduce作业中的多个Map任务从Hadoop中的HDFS中读取源数据文件,然后使用生成的类解析记录,并且执行选定的导出方法,将Hadoop的HDFS中的数据导入到关系型数据库中。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
现有的连接器在Hadoop与关系型数据库之间传输数据时会给关系型数据库带来很大负载,而这些关系型数据库可能同时承载着其它业务,因此,连接器的数据传输出会对关系型数据库的其他业务造成一定的影响,特别是在进行频繁传输数据的场景。
发明内容
为了减小了连接器在Hadoop与关系型数据库之间数据传输时对关系型数据库的其它业务造成的影响,本发明实施例提供了一种控制数据传输的方法和连接器。所述技术方案如下:
一方面,提供了一种控制数据传输的方法,所述方法包括:
连接器接收用户的输入信息;
所述连接器获取所述输入信息中指定的关系型数据库的信息,并生成数据传输任务;
所述连接器将所述数据传输任务发送给指定的Hadoop,开始在所述Hadoop和所述关系型数据库之间进行数据传输;
所述连接器接收到所述关系型数据库所在的服务器上的监测代理发送的负载信息或探测得到所述服务器的负载信息;
所述连接器根据所述负载信息判断所述服务器是否为超负荷状态;
如果是,则停止所述数据传输;否则,继续所述数据传输;
其中,所述Hadoop与关系型数据库之间的数据传输,包括:将关系型数据库中的数据导入到Hadoop中,或者将Hadoop中的数据导入到关系型数据库中。
其中,所述连接器根据所述负载信息判断所述服务器是否为超负荷状态,包括:
所述连接器将所述负载信息与预设的第一阈值进行比较;
如果所述负载信息大于或等于所述第一阈值,则确定所述服务器已达到超负荷状态;
如果所述负载信息小于所述第一阈值,则确定所述服务器未达到超负荷状态。
其中,确定所述服务器未达到超负荷状态之后,还包括:
所述连接器将所述负载信息与预设的第二阈值进行比较;
如果所述负载信息大于或等于所述第二阀值,则降低所述数据传输的速度;
如果所述负载信息小于所述第二阀值,则提高所述数据传输的速度。
其中,任意一项以上所述的方法,所述负载信息包括以下至少一种:所述服务器的中央处理器负载信息、输入输出负载信息和当前内存占用信息。
另一方面,提供了一种连接器,所述连接器用于:
接收用户的输入信息;
获取所述输入信息中指定的关系型数据库的信息,并生成数据传输任务;
将所述数据传输任务发送给指定的Hadoop,开始在所述Hadoop和所述关系型数据库之间进行数据传输;
所述连接器包括:获取模块和控制模块;
所述获取模块,用于接收到所述关系型数据库所在的服务器上的监测代理发送的负载信息或探测得到所述服务器的负载信息;
所述控制模块,包括:
判断单元,用于根据所述负载信息判断所述服务器是否为超负荷状态;
执行单元,用于如果所述判断单元的结果为是,则停止所述数据传输;否则,继续所述数据传输;
其中,所述Hadoop与关系型数据库之间的数据传输,包括:将关系型数据库中的数据导入到Hadoop中,或者将Hadoop中的数据导入到关系型数据库中。
其中,所述判断单元用于:
将所述负载信息与预设的第一阈值进行比较;
如果所述负载信息大于或等于所述第一阈值,则确定所述服务器已达到超负荷状态;
如果所述负载信息小于所述第一阈值,则确定所述服务器未达到超负荷状态。
其中,所述判断单元还用于:
当所述服务器未达到超负荷状态之后,将所述负载信息与预设的第二阈值进行比较;
如果所述负载信息大于或等于所述第二阀值,则降低所述数据传输的速度;
如果所述负载信息小于所述第二阀值,则提高所述数据传输的速度。
其中,任意一项以上所述的连接器,所述负载信息包括以下至少一种:所述服务器的中央处理器负载信息、输入输出负载信息和当前内存占用信息。
本发明实施例提供的技术方案带来的有益效果是:
通过当Hadoop与关系型数据库进行数据传输时,连接器获取关系型数据库所在的服务器的负载信息,然后根据负载信息控制数据传输,减小了连接器在数据传输时对关系型数据库的其他业务造成的影响。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术提供的利用Sqoop将关系型数据库中的数据导入Hadoop的示意图;
图2是现有技术提供的利用Sqoop将Hadoop中的数据导入关系型数据库的示意图;
图3是本发明提供的将关系型数据库中的数据导入Hadoop的数据流向图;
图4是本发明提供的将Hadoop中的数据导入关系型数据库的数据流向图;
图5是本发明实施例一提供的一种控制数据传输的方法的流程图;
图6是本发明实施例二提供的一种控制数据传输的方法的流程图;
图7是本发明实施例二提供的一种连接器控制数据传输的示意图;
图8是本发明实施例三提供的一种控制数据传输的方法的流程图;
图9是本发明实施例三提供的一种连接器控制数据传输的示意图;
图10是本发明实施例四提供的一种连接器的结构图;
图11是本发明实施例四提供的一种控制模块的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
Hadoop与关系型数据库之间的数据传输,包括将关系型数据库中的数据导入到Hadoop中,或者将Hadoop中的数据导入到关系型数据库中。其中,参见图3,关系型数据库中的数据通过Map任务导入到Hadoop中的HDFS中,每一个Map任务负责将关系型数据库中一张数据库表(或者一张数据库表的一部分)导入到HDFS中,Hadoop可以同时执行多个Map任务;参见图4,Hadoop中的数据同样通过多个Map任务导入到关系型数据库中,每一个Map任务负责一张数据库表(或者一张数据库表的一部分)的传输,Hadoop可以同时执行多个Map任务。
实施例一
参见图5,本实施例提供了一种控制数据传输的方法,所述方法包括:
步骤101:当Hadoop与关系型数据库进行数据传输时,连接器获取关系型数据库所在的服务器的负载信息;
步骤102:连接器根据负载信息控制数据传输。
本实施例提供的控制数据传输的方法,通过当Hadoop与关系型数据库进行数据传输时,连接器获取关系型数据库所在的服务器的负载信息,然后根据负载信息控制数据传输,减小了连接器在数据传输时对关系型数据库的其它业务造成的影响。
实施例二
本发明实施例提供了一种控制数据传输的方法,参见图6,所述方法包括:
步骤201:连接器接收用户的输入信息;
连接器接收到用户进行数据传输的命令,包括:将指定的Hadoop中的数据导入到指定的关系型数据库中,或者,将指定的关系型数据库中的数据导入到指定的Hadoop中,。
步骤202:连接根据输入信息获取输入信息中指定的关系型数据库的信息,并生成数据传输任务;
连接器可以通过JDBC访问存储在关系型数据库中的数据,并检查数据的性质和类型。
例如,将关系型数据库中的数据导入到Hadoop时,连接器首先使用JDBC检查将要导入的数据表,检索到数据表中所有的列以及列的SQL类型;将Hadoop中的数据导入到关系型数据库时,连接器首先需要检查关系型数据库的性质和类型,根据关系型数据库中的表的定义生成相应的类。
步骤203:连接器将数据传输任务发送给Hadoop,开始在指定的Hadoop和指定的关系型数据库之间进行数据传输;
连接器将数据传输任务发送给Hadoop,Hadoop根据数据传输任务生成对应的MapReduce作业,其中,一个数据传输任务得到一个MapReduce作业,每一个MapReduce作业则由多个map任务以并行的方式完成,每一个Map任务负责传输一张数据库表(或者一张数据库表的一部分),而一个Hadoop服务器可以同时执行多个Map任务。
步骤204:连接器接收到关系型数据库所在的服务器上的监测代理发送的负载信息:
负载信息可以包括以下至少一种:服务器的中央处理器负载信息、输入输出负载信息和当前内存占用信息,若服务器的负载信息包括多种的负载信息时,可将所有种类的负载信息中当前值最大的一个作为当前服务器的负载信息,例如,服务器的负载信息包括以下三种:服务器的中央处理器负载信息、输入输出负载信息和当前内存占用信息,且三种负载信息的当前值分别为:百分之十、百分之二十和百分之三十,则当前服务器的负载信息为百分之三十。可以在关系型数据上的服务器上部署监测代理,周期性获取服务器的负载信息,然后由监测代理将负载信息发送连接器。
参见图7,连接器首先获取关系型数据库信息,检查关系型数据库数据的性质和类型,然后提交作业给Hadoop,Hadoop通过执行多个Map任务进行数据传输,每一个Map任务负责一张数据库表(或者一张数据库表的一部分)的传输,连接器接收到关系型数据库所在的服务器上的监测代理发送的负载信息,然后根据负载信息控制每一个Map任务来实现数据传输的控制。
步骤205:连接器根据负载信息判断所述服务器是否为超负荷状态,若是,则执行步骤206,否则,执行步骤207;
其中,连接器根据负载信息采用以下具体方式判断服务器是否为超负荷状态:
连接器将负载信息与预设的第一阈值进行比较;
如果负载信息大于或等于第一阈值,则确定服务器已达到超负荷状态;
如果负载信息小于第一阈值,则确定服务器未达到超负荷状态。
用户可以对第一阀值指定任意的数值。例如,用户可以将第一阀值设为90%,如果服务器的负载信息大于或等于90%,确定服务器已达到超负荷状态;如果负载信息小于90%,则确定服务器未达到超负荷状态。
步骤206:停止数据传输,流程结束;
步骤207:继续数据传输,流程结束;
其中,步骤207还可以包括:
连接器将所述负载信息与预设的第二阈值进行比较,若负载信息大于或等于所述第二阀值,降低数据传输的速度,若负载信息小于所述第二阀值,提高数据传输的速度。
记录服务器不同时刻的负载信息,然后对记录得到的所有不同时刻的负载信息进行统计分析,根据统计分析的结果得到第二阀值。此外,第二阀值也可以由用户进行指定,用户可以根据实际情况对第二阀值设置具体的数值。
例如,当前数据传输的速度为V1,将负载信息与第二阀值相比较,若负载信息大于第二阀值,可以将当前数据传输的速度从V1降至V2,且V2=90%V1,若当数据传输的速度为V2时服务器的负载信息仍大于或等于第二阀值,则继续降低数据传输的速度;若负载信息小于第二阀值,可以将当前数据传输的速度从V1提高至V3,且V3=110%V1,若当数据传输的速度为V3时服务器的负载信息仍小于第二阀值,则继续提高数据传输的速度。
本实施例提供的控制数据传输的方法,通过当Hadoop与关系型数据库进行数据传输时,连接器获取关系型数据库所在的服务器的负载信息,然后根据负载信息控制数据传输,减小了连接器在数据传输时对关系型数据库的其他业务造成的影响。
实施例三
参见图8,本实施例提供了一种控制数据传输的方法,所述方法包括:
步骤301~303与步骤201~203相同;
步骤304:连接器探测得到关系型数据库所在的服务器的负载信息;
负载信息可以包括以下至少一种:服务器的中央处理器负载信息、输入输出负载信息和当前内存占用信息,若服务器的负载信息包括多种的负载信息时,可将所有种类的负载信息中当前值最大的一个作为当前服务器的负载信息,例如,服务器的负载信息包括以下三种:服务器的中央处理器负载信息、输入输出负载信息和当前内存占用信息,且三种负载信息的当前值分别为:百分之十、百分之二十和百分之三十,则当前服务器的负载信息为百分之三十。连接器可以周期性的探测得到服务器的负载信息。
参见图9,连接器首先获取关系型数据库信息,检查关系型数据库数据的性质和类型,然后提交作业给Hadoop,Hadoop通过执行多个Map任务进行数据传输,每一个Map任务负责一张数据库表(或者一张数据库表的一部分)的传输,连接器探测得到关系型数据库所在的服务器的负载信息,然后根据负载信息控制每一个Map任务来实现数据传输的控制。
步骤305:连接器根据负载信息判断所述服务器是否为超负荷状态,若是,则执行步骤306,否则,执行步骤307;
其中,连接器根据负载信息采用以下具体方式判断服务器是否为超负荷状态:
连接器将负载信息与预设的第一阈值进行比较;
如果负载信息大于或等于第一阈值,则确定服务器已达到超负荷状态;
如果负载信息小于第一阈值,则确定服务器未达到超负荷状态。
用户可以对第一阀值指定任意的数值。例如,用户可以将第一阀值设为90%,如果服务器的负载信息大于或等于90%,确定服务器已达到超负荷状态;如果负载信息小于90%,则确定服务器未达到超负荷状态。
步骤306:停止数据传输,流程结束;
步骤307:继续数据传输,流程结束;
其中,步骤307还可以包括:
连接器将负载信息与预设的第二阈值进行比较,若负载信息大于或等于第二阀值,降低数据传输的速度,若负载信息小于第二阀值,提高数据传输的速度。
记录服务器不同时刻的负载信息,然后对记录得到的所有不同时刻的负载信息进行统计分析,根据统计分析的结果得到第二阀值。此外,第二阀值也可以由用户进行指定,用户可以根据实际情况对第二阀值设置具体的数值。
例如,当前数据传输的速度为V1,将负载信息与第二阀值相比较,若负载信息大于第二阀值,可以将当前数据传输的速度从V1降至V2,且V2=90%V1,若当数据传输的速度为V2时服务器的负载信息仍大于或等于第二阀值,则继续降低数据传输的速度;若负载信息小于第二阀值,可以将当前数据传输的速度从V1提高至V3,且V3=110%V1,若当数据传输的速度为V3时服务器的负载信息仍小于第二阀值,则继续提高数据传输的速度。
本实施例提供的控制数据传输的方法,通过当Hadoop与关系型数据库进行数据传输时,连接器获取关系型数据库所在的服务器的负载信息,然后根据负载信息控制数据传输,减小了连接器在数据传输时对关系型数据库的其他业务造成的影响。
实施例四
参见图10,本发明实施例提供了一种连接器,该连接器包括:获取模块401和控制模块402;
获取模块401,用于当Hadoop与关系型数据库进行数据传输时,获取该关系型数据库所在的服务器的负载信息;
控制模块402,用于根据该负载信息控制所述数据传输。
其中,获取模块401包括:
接收单元,用于接收到服务器上的监测代理发送的负载信息;
或者,获取模块401包括:
探测单元,用于探测得到服务器的负载信息。
其中,参见图11,控制模块402包括:
判断单元4021,用于根据负载信息判断服务器是否为超负荷状态;
执行单元4022,用于如果判断单元4021的结果为是,则停止数据传输;否则,继续数据传输。
其中,判断单元4021用于:
将负载信息与预设的第一阈值进行比较;
如果负载信息大于或等于第一阈值,则确定服务器已达到超负荷状态;
如果负载信息小于第一阈值,则确定服务器未达到超负荷状态。
其中,判断单元4021还用于:
当服务器未达到超负荷状态之后,将负载信息与预设的第二阈值进行比较;
如果负载信息大于或等于第二阀值,则降低数据传输的速度;
如果负载信息小于第二阀值,则提高数据传输的速度。
本实施例提供的连接器,通过当Hadoop与关系型数据库进行数据传输时,连接器获取关系型数据库所在的服务器的负载信息,然后根据负载信息控制数据传输,减小了连接器在数据传输时对关系型数据库的其它业务造成的影响。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。