一种分布式计算系统中对象传递的方法

文档序号:6340316阅读:256来源:国知局
专利名称:一种分布式计算系统中对象传递的方法
技术领域
本发明涉及一种分布式计算系统,尤其涉及一种分布式计算系统中对象传递的方法。
背景技术
分布式计算,是把一个需要非常巨大的计算能力才能解决的问题分成许多小的部 分,然后把这些小的部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到 最终的结果,它是一门计算机科学。
分布式计算系统(Map/Reduce),是一个用于大规模数据处理的分布式计算模型, 作为目前最为常见的分布式计算系统,它最初是由Google工程师设计并实现的。其中对它 的定义是,Map/Reduce是一个编程模型(programming model ),是一个用于处理和生成大规 11 ^: (processing and generating large data sets) ^ ^° ffiPtl—f map函数来处理一个key/value对以生成一批中间的key/value对,再定义一个reduce函 数将所有这些中间的有着相同key的values合并起来。很多现实世界中的任务都可用这 个模型来表达。
Hadoop,是由Apache基金会开发,采用JAVA开发语言实现了分布式文件系统HDFS 和Map-Reduce分布式计算平台,用户只要继承该系统提供的基类MapReduceBase,分别实 现Map和Reduce的两个类,并注册Job即可自动分布式运行定制的任务。
Hadoop的Map/Reduce实现中,对于每一个具体的作业(Job),均需要在不同的节 点之间传递运行时所需的配置信息,它是通过job. xml来实现的,即由作业(Job)发起端将 运行时所需信息,例如作业(Job)名称,输入/输出格式,Map/Reduce任务个数等等,写入一 个job. xml文件,然后传递到不同的系统节点。job. xml是标准的XML(可扩展标准语言)文 件,每一项具体信息均以XML的元素(element)形成存在其中。系统中其他运行节点从这个 job. xml文件中读取相关信息,用以配置该节点上面运行的部分任务,从而实现真个Map/ Reduce的分布式运行。图1为现有分布式计算系统基本结构示意图,如图1所示,分布式计 算系统一般包括客户端、作业服务器和任务服务器。客户端将作业及其相关内容和配置写 入一个job. xml,提交到作业服务器去,并时刻监控执行的状况;作业服务器,在Hadoop中 称为JobTracker或Master,负责将作业文件(xml文件)分发到多个任务服务器,作业服务 器负责管理运行在此框架下所有作业;任务服务器,具体的负责执行用户定义操作的,每一 个作业被拆分成很多的任务,包括Map任务和Reduce任务等,任务是具体执行的基本单元, 它们都需要分配到合适任务服务器上去执行,任务服务器一边执行一边向作业服务器汇报 各个任务的状态,以此来帮助作业服务器了解作业执行的整体情况,分配新的任务等。
现有的分布式计算系统,即Hadoop Map/Reduce系统中无法传递对象(class)实 例,job. xml仅仅只能用来传递有限的简单数据类型,例如int,long, float, String, boolean等,由于XML对于传输的字符,即每个元素(element)中的字符是有一定限制的,不 能够随便将内存中一段缓存(buf f er )拷贝至xml中进行传递,那样会造成XML编解码失败,不能进行传输。
然而用户定制的应用一般不只是有上述这些简单的数据类型,用户的应用中经常 会需要在Map-Reduce系统的各个节点之间传递复杂的对象(class)实例,进行一些高级的 分布式计算,则目前Hadoop的Map/Reduce实现则不能提供这种功能。发明内容
为了解决现有技术存在的不足,本发明的目的在于提供一种分布式计算系统中对 象传递的方法,可以使分布式计算系统的各个节点之间传递复杂的对象实例。
为实现上述目的,本发明提供的一种分布式计算系统中对象传递的方法,该方法 包括以下步骤将对象序列化、编码,写入作业文件; 传送含有编码序列的作业文件;将含有编码序列的作业文件中的编码序列进行解码和反序列化,提取并使用对象内容。
其中,所述将对象序列化、编码是由客户端将对象分解成字节流,然后再将所述字 节流经过编码,转换成ASCII字符。
其中,所述作业文件是标准的XML文件。
其中,所述将对象编码是采用Base64编码。
其中,所述传送含有编码序列的作业文件的步骤进一步包括客户端将所述含有 编码序列的作业文件传送给作业服务器和作业服务器将所述含有编码序列的作业文件传 送给任务服务器的步骤。
其中,所述将含有编码序列的作业文件中的编码序列进行解码和反序列化,提取 并使用对象内容的步骤进一步包括作业服务器将含有编码序列的作业文件中的编码序列 进行解码和反序列化,提取并使用对象内容和任务服务器将含有编码序列的作业文件中的 编码序列进行解码和反序列化,提取并使用对象内容的步骤。
其中,所述对象序列化是将可串行化接口的对象转换成一个字节序列。
本发明提供的分布式计算系统中对象传递的方法解决了当前最常见的分布式计 算系统,即Hadoop Map/Reduce系统中无法传递对象实例的问题,对Map/Reduce系统中 的job的处理能力进行了有效的扩展,Map/Reduce系统在进行分布式运算时,就不会局限 于只能在不同节点之间传递字符串这样的简单数据结构信息,而是可以传递复杂的对象 (class)实例,有效的增强了整个Hadoop Map/Reduce分布式计算系统的处理能力,可以进 行更为高级的分布式运算过程。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变 得显而易见,或者通过实施本发明而了解。


附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的 实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中图1为现有分布式计算系统基本结构示意图;图2为根据本发明的分布式计算系统中对象传递的方法流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实 施例仅用于说明和解释本发明,并不用于限定本发明。
为了实现在Hadoop的Map/Reduce系统中传递用户的对象(class)实例,扩展现 有Map/Reduce系统中作业(job)的处理能力,亦即有效增强整个Map/Reduce系统的处理 能力,本申请提案采用了 Java对象序列化与Base64编解码相结合的技术方案。
Java对象序列化,是将实现了可串行化(Serializable)接口的对象转换成一个 字节序列,并能够在以后将这个字节序列完全恢复为原来的对象。序列化的过程就是对象 写入字节流和从字节流中读取对象。将对象状态转换成字节流之后,可以用Java, io包中 的各种字节流类将其保存到文件中,管道到另一线程中或通过网络连接将对象数据发送到 另一主机。序列化分为两大部分序列化和反序列化。序列化是这个过程的第一部分,将数 据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对 象。对象序列化不仅要将基本数据类型转换成字节表示,还要恢复数据,恢复数据要求恢复 数据的对象实例。
Base64编码,是网络上最常见的用于传输SBit字节代码的编码方式之一。在 RFC2045中Base64被定义为BaSe64内容传送编码被设计用来把任意序列的8位字节描述 为一种不易被人直接识别的形式。Base64产生的原因还有一个就是,在Email的传送过程 中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。Base64要 求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = M),然后把6Bit再添两位 高位0,组成四个SBit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
Hadoop的Map/Reduce系统中使用job. xml来传递不同任务服务器(计算节点)之 间的信息,对象序列化之后的字节流不能够直接写入ml的元素(element)进行传递,可以 将对象序列化形成的字节流经过Base64编码之后,转换成可以写入xml元素(element)的 合法ASCII字符,在Map/Reduce系统中的各任务服务器(计算节点)之间进行传递,系统中 接收到job. xml的任务服务器,先将job. xml中的元素(element)进行Base64解码,再对 解码形成的字节流做对象的反序列化,就可以转换成所需要的对象实例,这样就达到了在 Hadoop的Map/Reduce系统中不同任务服务器(计算节点)之间传递对象。
图2为根据本发明的分布式计算系统中对象传递的方法流程图,下面将参考图2, 对本发明的分布式计算系统中对象传递的方法进行详细描述。
首先,在步骤201,客户端(Map/Reduce Client)作为作业发起端,将对象分解成 字节流进行序列化,然后再将对象序列化形成的字节流经过Base64编码,转换成可以写入 xml元素(element)的合法ASCII字符,写入作业文件(job. xml),作业文件是标准的XML (可扩展标准语言)文件,每一项具体信息均以XML的元素(element)形成存在其中。
在步骤202,客户端将包含经过序列化、Base64编码的作业文件(job. xml)提交给 作业服务器(Map/Reduce Master)。
在步骤203,作业服务器接收到包含经过序列化、Base64编码的作业文件后,对该 作业文件中的Base64编码序列进行解码,并反序列化,提取并使用该对象内容。
在步骤204,作业服务器将收到包含经过序列化、Base64编码的作业文件传递给 各个任务服务器(Map/Reduce Slave)。
在步骤205,任务服务器接收到包含经过序列化、Base64编码的作业文件后,对作 业文件中的Base64编码序列进行解码,并反序列化,提取并使用该对象内容。
通过本发明的分布式计算系统中对象传递的方法,Map/Reduce系统中的作业 (job)处理能力得到了有效的扩展,Map/Reduce系统在进行分布式运算时,就不会局限 于只能在不同节点之间传递字符串这样的简单数据结构信息,而是可以传递复杂的对象 (class)实例,有效的增强了整个Map/Reduce系统的处理能力,可以进行更为高级的分布 式运算过程。
本领域普通技术人员可以理解以上所述仅为本发明的优选实施例而已,并不用 于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员 来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进 行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含 在本发明的保护范围之内。
权利要求
1.一种分布式计算系统中对象传递的方法,该方法包括以下步骤 将对象序列化、编码,写入作业文件;传送含有编码序列的作业文件;将含有编码序列的作业文件中的编码序列进行解码和反序列化,提取并使用对象内容。
2.根据权利要求1所述的分布式计算系统中对象传递的方法,其特征在于,所述将对 象序列化、编码是由客户端将对象分解成字节流,然后再将所述字节流经过Base64编码, 转换成ASCII字符。
3.根据权利要求1所述的分布式计算系统中对象传递的方法,其特征在于,所述作业 文件是标准的XML文件。
4.根据权利要求1所述的分布式计算系统中对象传递的方法,其特征在于,所述将对 象序列化是将可串行化接口的对象转换成一个字节序列。
5.根据权利要求1-4任一项所述的分布式计算系统中对象传递的方法,其特征在于, 所述传送含有编码序列的作业文件的步骤进一步包括客户端将所述含有编码序列的作业 文件传送给作业服务器和作业服务器将所述含有编码序列的作业文件传送给任务服务器 的步骤。
6.根据权利要求1-4任一项所述的分布式计算系统中对象传递的方法,其特征在于, 所述将含有编码序列的作业文件中的编码序列进行解码和反序列化,提取并使用对象内容 的步骤进一步包括作业服务器将含有编码序列的作业文件中的编码序列进行解码和反序 列化,提取并使用对象内容和任务服务器将含有编码序列的作业文件中的编码序列进行解 码和反序列化,提取并使用对象内容的步骤。全文摘要
一种分布式计算系统中对象传递的方法,该方法包括以下步骤将对象序列化、编码,写入作业文件;传送含有编码序列的作业文件;将含有编码序列的作业文件中的编码序列进行解码和反序列化,提取并使用对象内容。其中,所述将对象序列化、编码是由客户端将对象分解成字节流,然后再将所述字节流经过编码,转换成ASCII字符。其中,所述作业文件是标准的XML文件;其中,所述将对象编码是采用Base64编码。本发明的分布式计算系统中对象传递的方法,可以使分布式计算系统的各个节点之间传递复杂的对象实例,有效的增强了整个分布式计算系统系统的处理能力,可以进行更为高级的分布式运算过程。
文档编号G06F17/30GK102033959SQ201010610679
公开日2011年4月27日 申请日期2010年12月29日 优先权日2010年12月29日
发明者谢天 申请人:北京播思软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1