一种实时在线的分布式计算框架的实现方法

文档序号:8412380阅读:881来源:国知局
一种实时在线的分布式计算框架的实现方法
【技术领域】
[0001]本发明涉及计算机云计算中数据处理分析技术领域,尤其是涉及一种实时在线的分布式计算框架的实现方法。
【背景技术】
[0002]随着网络通信技术的飞速发展,云计算领域海量数据分析业务得到大力应用,在云计算领域中,海量数据处理分析业务和其他分布式Java程序主要是采用持久性可重用的Java Virtual Machine (Java虚拟机,以下简称JVM)提高在集群环境中事务处理的吞吐量和速率,同时大大降低用于海量数据处理的MapReduce任务的启动时间,提高系统在连续运转时效率,提高系统查询通信CDR、KPI和专题等数据的查询效率,同时有效地提升了JVM负载均衡和横向扩展能力。MapReduce是一种在编程模型,用于大规模数据集(大于I TB)的并行运算,在使用MapReduce框架对海量数据进行分析时,提交一个Job (即作业)到MapReduce框架,随即被分解为多台服务器上多个并行的Task(即任务),完成后将计算结果回收归并。通常每个Task运行在一个JVM上,每个JVM是一个独立的进程,同一个Job的多个Task可以复用一个JVM。从而导致了现有技术中存在如下缺陷:(I)在MapReduce中,Job启动加载慢,由于每个Job需要在多台服务器上启动多个JVM进程,服务器越多启动开销越大、启动越慢。(2)目前MapReduce只支持Task复用JVM,当需要连续地处理海量数据上的多个数据分析业务时,这种重复启动JVM的开销十分明显而且不必要。(3)更广泛地、对于集群上的分布式Java程序,负载均衡的粒度也不能细致到JVM级别。

【发明内容】

[0003]本发明的目的在于设计一种实时在线的分布式计算框架的实现方法,解决上述问题。
[0004]为了实现上述目的,本发明采用的技术方案如下:
[0005]一种实时在线的分布式计算框架的实现方法,包括如下步骤:
[0006]步骤101,在JVM的MapReduce地址空间中共享JVM资源;所述JVM资源包括堆栈、加载所述堆栈的中间件和运行所述堆栈的应用类;
[0007]步骤102,利用共享的所述JVM资源,实现所述JVM的重置;所述重置包括初始化所述JVM、重用所述中间件和/或共享所述应用类;
[0008]步骤103,通过所述JVM的重置,实现了在线的分布式计算框架。
[0009]优选的,步骤101中,所述堆栈包括系统堆栈、应用类系统堆栈和非系统堆栈;所述系统堆栈用于为所述JVM运行的生命周期内加载类文件;所述应用类系统堆栈用于为所述JVM的生命周期内共享的所述JVM资源构建应用类对象;所述非系统堆栈用于为所述JVM的生命周期内构建内存区域。
[0010]优选的,所述系统堆栈包括通过自举类加载系统类文件、通过扩展类加载系统的标准扩展类文件和加载中间件类文件。
[0011]优选的,所述非系统堆栈包括通过加载中间件类共享对象的中间件堆栈和通过环境变量加载临时类文件对象的临时堆栈。
[0012]优选的,步骤102中,所述重置具体的实现方法为,通过Java本地接口实现JVM的重置。
[0013]优选的,步骤102中,共享所述应用类中禁止修改所述应用类;禁止修改所述应用类的具体内容包括,禁止修改所述应用类的全局静态变量、禁止接入所述应用类的派生物、禁止基于所述应用类加载程序库文件和禁止管理所述应用类的线程。
[0014]优选的,步骤102中,重用所述中间件的具体方法包括清理所述中间件的状态和调用初始化的类文件。
[0015]优选的,清理所述中间件的状态包括释放所述中间件的存储空间、终止所述中间件的线程和清除所述中间件在所述堆栈的控制。
[0016]本发明的有益效果可以总结如下:
[0017]1、在大规模集群操作系统的事务处理环境中,持久性可重用Java虚拟机能够加速Java应用的处理速度。
[0018]2、持久性可重用的JVM通过提供以下能力提高了在这些环境中事务处理的吞吐量,大大降低用于海量数据处理的MapReduce任务的启动时间。
[0019]3、通过重用Java虚拟机,减少了启动JVM进程的次数,减少服务器启动压力,提高服务器工作效率。
[0020]4、通过本发明,能够更广泛地、对于集群上的分布式Java程序中,可提升JVM负载均衡和横向扩展能力,细致化的到JVM级别的负载均衡。
【附图说明】
[0021]图1为本发明流程示意图。
【具体实施方式】
[0022]为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0023]如图1所示的一种实时在线的分布式计算框架的实现方法,包括如下步骤:
[0024]步骤101,在JVM的MapReduce地址空间中共享JVM资源JVM资源包括堆栈、加载堆栈的中间件和运行堆栈的应用类;系统堆栈用于为JVM运行的生命周期内加载类文件;应用类系统堆栈用于为JVM的生命周期内共享的JVM资源构建应用类对象;非系统堆栈用于为JVM的生命周期内构建内存区域;系统堆栈包括通过自举类加载系统类文件、通过扩展类加载系统的标准扩展类文件和加载中间件类文件;
[0025]为了确保事务之间的隔离,在MapReduce地址空间中,每个JVM每次只处理一个事务,而且每个JVM用自己的语言环境创建以确保各个孤立的JVM能够并行的计算。在一个JVM地址空间内的设置被称作一个JVMSet。在一个JVMSet中的JVM资源都共享一套系统类中的共同系统堆栈以及其他共享类。这样显著减少了在JVMSet中启动一个新的JVM所需要的时间,因为大多数的系统类已经在新的JVM启动前在系统堆栈中被加载了。它也从整体上减少了对这些类的内存封装,因为他们是针对每个JVMSet加载一次,而不是每个JVM加载一次。一个JVMSet由一个主JVM和多个(I至η个)从JVM组成。主JVM通过两种方式控制JVMSet:它提供所有从JVM共享的系统堆栈;它建立用于将类加载入系统堆栈的加载类环境。主用JVM从被创建起从不主动参与任何工作。它的主要任务仅仅是JVMSet的初始化。除此之外,它还要从被分配的系统堆栈中获取一些共享内存。这个共享内存在获取后被JVMSet内的所有JVM当作共享类缓存使用。其他在JVMSet内所有JVM共同的信息,例如:类的加载路径也被放置在这个共享内存中。标识共享内存位置的令牌通过创建主用JVM的Java本地接口(JNI)返回。加载程序将这个令牌传递给创建每个从JVM的Java本地接口(JNI)。
[0026]堆栈包括系统堆栈、应用类系统堆栈和非系统堆栈;系统堆栈包括通过自举类加载器加载的系统类。例如:java.1ang.* ;通过扩展类加载器加载的标准扩展类;通过执行共享接口的中间件加载器加载的中间件类。例如:被信任的中间件加载器(TMC)供给持久性可重用的JVM执行共享接口。这些类仅被加载一次。他们的静态初始化器也仅运行一次。系统堆栈从不回收垃圾。应用类系统堆栈是系统堆栈中一个被隔离的部分,而且包括为JVM生命周期持久的共享应用类对象。共享应用类通过执行共享接口的应用类加载器仅加载一次。例如:共享应用类加载器(SAC)以供给持久性可重用的JVM执行共享接口。因为这些类在JVM重置的过程中被重置了,这迫使静态初始化器在第一次使用时运行。应用类系统堆栈从不回收垃圾。非系统堆栈包括通过加载中间件类共享对象的中间件堆栈和通过环境变量加载临时类文件对象的临时堆栈。中间件堆栈包含预计生命周期长于单独事务的对象,并且这些对象通过JVM重置持久化。这些对象包括由中间件供应商提供的中间件类加载器加载的非共享类对象,以及在中间件环境中创建的对象。在JVM重置过程中,清理和重新初始化的方法被用来将这些类重置到一个已知的初始状态为下一次事务做准备。通常情况下,在JVM重置的时间,这些中间件堆栈被垃圾回收模块管理。这些类的生命周期被中间件控制。临时堆栈包括预计生命周期与事务绑定的对象。这些包括由默认应用类加载器(通过使用环境变量加载)加载的类,以及在应用环境中创建的任何对象。类通过应用代码为每一个事务加载。他们的静态初始化器在第一次使用时运行。这些临时堆栈从属于垃圾回收模块,虽然在事务处理过程中通常并不需要临时堆栈。在JVM
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1