CN104731634A - 一种实时在线的分布式计算框架的实现方法 - Google Patents
一种实时在线的分布式计算框架的实现方法 Download PDFInfo
- Publication number
- CN104731634A CN104731634A CN201310723603.XA CN201310723603A CN104731634A CN 104731634 A CN104731634 A CN 104731634A CN 201310723603 A CN201310723603 A CN 201310723603A CN 104731634 A CN104731634 A CN 104731634A
- Authority
- CN
- China
- Prior art keywords
- jvm
- middleware
- class
- storehouse
- real
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
一种实时在线的分布式计算框架的实现方法,包括步骤101,在JVM的MapReduce地址空间中共享JVM资源;所述JVM资源包括堆栈、加载所述堆栈的中间件和运行所述堆栈的应用类;步骤102,利用共享的所述JVM资源,实现所述JVM的重置;所述重置包括初始化所述JVM、重用所述中间件和/或共享所述应用类;步骤103,通过所述JVM的重置,实现了在线的分布式计算框架。在大规模集群操作系统的事务处理环境中,持久性可重用Java虚拟机能够加速Java应用的处理速度。持久性可重用的JVM通过提供以下能力提高了在这些环境中事务处理的吞吐量,大大降低用于海量数据处理的MapReduce任务的启动时间。
Description
技术领域
本发明涉及计算机云计算中数据处理分析技术领域,尤其是涉及一种实时在线的分布式计算框架的实现方法。
背景技术
随着网络通信技术的飞速发展,云计算领域海量数据分析业务得到大力应用,在云计算领域中,海量数据处理分析业务和其他分布式Java程序主要是采用持久性可重用的Java Virtual Machine(Java虚拟机,以下简称JVM)提高在集群环境中事务处理的吞吐量和速率,同时大大降低用于海量数据处理的MapReduce任务的启动时间,提高系统在连续运转时效率,提高系统查询通信CDR、KPI和专题等数据的查询效率,同时有效地提升了JVM负载均衡和横向扩展能力。MapReduce是一种在编程模型,用于大规模数据集(大于1TB)的并行运算,在使用MapReduce框架对海量数据进行分析时,提交一个Job(即作业)到MapReduce框架,随即被分解为多台服务器上多个并行的Task(即任务),完成后将计算结果回收归并。通常每个Task运行在一个JVM上,每个JVM是一个独立的进程,同一个Job的多个Task可以复用一个JVM。从而导致了现有技术中存在如下缺陷:(1)在MapReduce中,Job启动加载慢,由于每个Job需要在多台服务器上启动多个JVM进程,服务器越多启动开销越大、启动越慢。(2)目前MapReduce只支持Task复用JVM,当需要连续地处理海量数据上的多个数据分析业务时,这种重复启动JVM的开销十分明显而且不必要。(3)更广泛地、对于集群上的分布式Java程序,负载均衡的粒度也不能细致到JVM级别。
发明内容
本发明的目的在于设计一种实时在线的分布式计算框架的实现方法,解决上述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种实时在线的分布式计算框架的实现方法,包括如下步骤:
步骤101,在JVM的MapReduce地址空间中共享JVM资源;所述JVM资源包括堆栈、加载所述堆栈的中间件和运行所述堆栈的应用类;
步骤102,利用共享的所述JVM资源,实现所述JVM的重置;所述重置包括初始化所述JVM、重用所述中间件和/或共享所述应用类;
步骤103,通过所述JVM的重置,实现了在线的分布式计算框架。
优选的,步骤101中,所述堆栈包括系统堆栈、应用类系统堆栈和非系统堆栈;所述系统堆栈用于为所述JVM运行的生命周期内加载类文件;所述应用类系统堆栈用于为所述JVM的生命周期内共享的所述JVM资源构建应用类对象;所述非系统堆栈用于为所述JVM的生命周期内构建内存区域。
优选的,所述系统堆栈包括通过自举类加载系统类文件、通过扩展类加载系统的标准扩展类文件和加载中间件类文件。
优选的,所述非系统堆栈包括通过加载中间件类共享对象的中间件堆栈和通过环境变量加载临时类文件对象的临时堆栈。
优选的,步骤102中,所述重置具体的实现方法为,通过Java本地接口实现JVM的重置。
优选的,步骤102中,共享所述应用类中禁止修改所述应用类;禁止修改所述应用类的具体内容包括,禁止修改所述应用类的全局静态变量、禁止接入所述应用类的派生物、禁止基于所述应用类加载程序库文件和禁止管理所述应用类的线程。
优选的,步骤102中,重用所述中间件的具体方法包括清理所述中间件的状态和调用初始化的类文件。
优选的,清理所述中间件的状态包括释放所述中间件的存储空间、终止所述中间件的线程和清除所述中间件在所述堆栈的控制。
本发明的有益效果可以总结如下:
1、在大规模集群操作系统的事务处理环境中,持久性可重用Java虚拟机能够加速Java应用的处理速度。
2、持久性可重用的JVM通过提供以下能力提高了在这些环境中事务处理的吞吐量,大大降低用于海量数据处理的MapReduce任务的启动时间。
3、通过重用Java虚拟机,减少了启动JVM进程的次数,减少服务器启动压力,提高服务器工作效率。
4、通过本发明,能够更广泛地、对于集群上的分布式Java程序中,可提升JVM负载均衡和横向扩展能力,细致化的到JVM级别的负载均衡。
附图说明
图1为本发明流程示意图。
具体实施方式
为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示的一种实时在线的分布式计算框架的实现方法,包括如下步骤:
步骤101,在JVM的MapReduce地址空间中共享JVM资源;JVM资源包括堆栈、加载堆栈的中间件和运行堆栈的应用类;系统堆栈用于为JVM运行的生命周期内加载类文件;应用类系统堆栈用于为JVM的生命周期内共享的JVM资源构建应用类对象;非系统堆栈用于为JVM的生命周期内构建内存区域;系统堆栈包括通过自举类加载系统类文件、通过扩展类加载系统的标准扩展类文件和加载中间件类文件;
为了确保事务之间的隔离,在MapReduce地址空间中,每个JVM每次只处理一个事务,而且每个JVM用自己的语言环境创建以确保各个孤立的JVM能够并行的计算。在一个JVM地址空间内的设置被称作一个JVMSet。在一个JVMSet中的JVM资源都共享一套系统类中的共同系统堆栈以及其他共享类。这样显著减少了在JVMSet中启动一个新的JVM所需要的时间,因为大多数的系统类已经在新的JVM启动前在系统堆栈中被加载了。它也从整体上减少了对这些类的内存封装,因为他们是针对每个JVMSet加载一次,而不是每个JVM加载一次。一个JVMSet由一个主JVM和多个(1至n个)从JVM组成。主JVM通过两种方式控制JVMSet:它提供所有从JVM共享的系统堆栈;它建立用于将类加载入系统堆栈的加载类环境。主用JVM从被创建起从不主动参与任何工作。它的主要任务仅仅是JVMSet的初始化。除此之外,它还要从被分配的系统堆栈中获取一些共享内存。这个共享内存在获取后被JVMSet内的所有JVM当作共享类缓存使用。其他在JVMSet内所有JVM共同的信息,例如:类的加载路径也被放置在这个共享内存中。标识共享内存位置的令牌通过创建主用JVM的Java本地接口(JNI)返回。加载程序将这个令牌传递给创建每个从JVM的Java本地接口(JNI)。
堆栈包括系统堆栈、应用类系统堆栈和非系统堆栈;系统堆栈包括通过自举类加载器加载的系统类。例如:java.1ang.*;通过扩展类加载器加载的标准扩展类;通过执行共享接口的中间件加载器加载的中间件类。例如:被信任的中间件加载器(TMC)供给持久性可重用的JVM执行共享接口。这些类仅被加载一次。他们的静态初始化器也仅运行一次。系统堆栈从不回收垃圾。应用类系统堆栈是系统堆栈中一个被隔离的部分,而且包括为JVM生命周期持久的共享应用类对象。共享应用类通过执行共享接口的应用类加载器仅加载一次。例如:共享应用类加载器(SAC)以供给持久性可重用的JVM执行共享接口。因为这些类在JVM重置的过程中被重置了,这迫使静态初始化器在第一次使用时运行。应用类系统堆栈从不回收垃圾。非系统堆栈包括通过加载中间件类共享对象的中间件堆栈和通过环境变量加载临时类文件对象的临时堆栈。中间件堆栈包含预计生命周期长于单独事务的对象,并且这些对象通过JVM重置持久化。这些对象包括由中间件供应商提供的中间件类加载器加载的非共享类对象,以及在中间件环境中创建的对象。在JVM重置过程中,清理和重新初始化的方法被用来将这些类重置到一个已知的初始状态为下一次事务做准备。通常情况下,在JVM重置的时间,这些中间件堆栈被垃圾回收模块管理。这些类的生命周期被中间件控制。临时堆栈包括预计生命周期与事务绑定的对象。这些包括由默认应用类加载器(通过使用环境变量加载)加载的类,以及在应用环境中创建的任何对象。类通过应用代码为每一个事务加载。他们的静态初始化器在第一次使用时运行。这些临时堆栈从属于垃圾回收模块,虽然在事务处理过程中通常并不需要临时堆栈。在JVM重Java Virtual Machine(Java虚拟机,以下简称JVM)置过程中,这个堆栈被丢弃并重新创建。(临时堆栈的初始大小可以通过配置选项指定)。为了使持久性可重用的JVM被重置,从中间件堆栈对象到临时堆栈对象的活动的参考信息一定不能存在。如果存在这样的信息,JVM将无法被重置。
步骤102,利用共享的JVM资源,实现JVM的重置;重置包括初始化JVM、重用中间件和/或共享应用类;重置具体的实现方法为,通过Java本地接口实现JVM的重置;共享应用类中禁止修改应用类;禁止修改应用类的具体内容包括,禁止修改应用类的全局静态变量、禁止接入应用类的派生物、禁止基于应用类加载程序库文件和禁止管理应用类的线程;重用中间件的具体方法包括清理中间件的状态和调用初始化的类文件;清理中间件的状态包括释放中间件的存储空间、终止中间件的线程和清除中间件在堆栈的控制;
在重置JVM时,每个JVM一个事务的模型意味着JVM资源的重用,包括:创建JVM,运行事务,销毁JVM。然而,对于一个传统的JVM而言,重启的开销非常大;大量的事务处理要求一个JVM能够被多个事务连续的重用,而且销毁和创建一个新的JVM仅在绝对必要的时候才去执行。一个可被重置的JVM被定义为一个在应用程序间可以将其重置到一个已知的状态的JVM。一旦JVM被重置,下一个运行的应用程序将无法决定它是运行在一个新的JVM上还是一个被重置的JVM。结果,该程序不能被先前程序的任何活动所影响。这个操作模型在持久性可重用的JVM中通过一个JVM选项来提供,-Xresettable选项。当该选项被指定时,JVM可以通过Java本地接口功能被重置,使用ResetJavaVM()功能。成功的提供重置功能使得接下来的应用程序能够在一个相同的持久性可重用的JVM被执行,成功的提供连续的重置功能使得在持久性可重用的JVM中连续执行数以千计的程序成为可能。它提供:降低每个事务的JVM启动开销。初始化JVM的开销被扩展分布到数个在JVM内执行的事务上,而且每个事务的JVM重置开销相对较低。降低每个事务的类加载开销。这是因为连续的重用中间件类,和可共享的应用类。如果JVM重置失败,加载程序销毁该JVM然后重新创建一个新的JVM。无论何时该情况发生,事务处理性能将会被降低。因此当遇到使JVM无法重置的活动和条件时,重置失败将会发生,例如:因为一个应用类执行了一个无法重置的操作。
由于持久性可重用的JVM不信任应用类,因此应用类必须遵循一套严格的设置规则防止JVM重置失败。例如:禁止对应用类执行如下操作:修改全局静态变量,并以此改变JVM的状态;使用抽象窗口工具包(AWT)或者任何它的派生物接入一个显示器、键盘、或者打印机,因为这样将会改变AWT的状态,并被当作是一个无法重置的子系统。例如:一个能够找到它的背景显示颜色的应用将被先前的一个应用所改变状态;直接加载一个本地程序库,因为它并不知道哪一个本地程序库是由应用提供的。例如:它能够修改静态变量;直接管理线程。这个限制的存在是为了确保当临时堆栈被清理时,不能够有任何到该临时堆栈的接入。以上这些行为,仅当它们可能在应用被终止以一个未定义的状态离开这个JVM时,才会被禁止。不能依靠这个应用去恢复该状态,而且这个JVM也不允许代表这个应用去恢复状态,因为这样会破坏Java的编码规范。因此这些行为是无法重置的行为,应用代码被JVM当作是不信任的代码对待。所以,如果在执行应用时侦测到无法重置的行为,这个JVM将会被打上无法重置的标记,加载程序将会被销毁,并重新创建该JVM。如果由于应用代码不被信任而导致在一定范围内被禁用,你将如何为系统构建需要全范围使用程序资源的功能,使用可信任的中间件,清理中间件的状态。
可信任的中间件通过一个中间件类加载器被加载,该加载器定义了这些被加载的类将被中间件所信任。被JVM信任的中间件通过JVM-reset功能去管理它自身的状态。中间件通过以下两方面管理自己的状态:它在ResetJavaVM()功能中清理自己的状态。通过使用能够为每一个中间件类定义的特殊的清理方法完成该操作。例如:典型的清理操作包括:释放存储空间;终止在事务中被创建的任何线程;清空从中间件对象到应用对象的所有参考信息。这样确保JVM重置不会因为交叉堆在垃圾回收时失败。因为中间件状态可以通过清理方法控制,而且采用该清理方法可以通过重置JVM为中间件保留状态。在ResetJavaVM()调用后中间件重新初始化它的类。它使用能够为每一个中间件类定义的特殊的重新初始化方法进行该操作,并且在第一次重用这个类时执行。
步骤103,通过所述JVM的重置,实现了在线的分布式计算框架。
以上通过具体的和优选的实施例详细的描述了本发明,但本领域技术人员应该明白,本发明还提供了用于执行在此描述的任何方法的计算机程序或计算机程序产品,以及其上存储了用于执行在此描述的任何方法的程序的计算机可读介质。本发明并不局限于以上所述实施例,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种实时在线的分布式计算框架的实现方法,其特征在于,包括如下步骤:
步骤101,在JVM的MapReduce地址空间中共享JVM资源;所述JVM资源包括堆栈、加载所述堆栈的中间件和运行所述堆栈的应用类;
步骤102,利用共享的所述JVM资源,实现所述JVM的重置;所述重置包括初始化所述JVM、重用所述中间件和/或共享所述应用类;
步骤103,通过所述JVM的重置,实现了在线的分布式计算框架。
2.根据权利要求1所述的实时在线的分布式计算框架的实现方法,其特征在于:步骤101中,所述堆栈包括系统堆栈、应用类系统堆栈和非系统堆栈;所述系统堆栈用于为所述JVM运行的生命周期内加载类文件;所述应用类系统堆栈用于为所述JVM的生命周期内共享的所述JVM资源构建应用类对象;所述非系统堆栈用于为所述JVM的生命周期内构建内存区域。
3.根据权利要求2所述的实时在线的分布式计算框架的实现方法,其特征在于:所述系统堆栈包括通过自举类加载系统类文件、通过扩展类加载系统的标准扩展类文件和加载中间件类文件。
4.根据权利要求2所述的实时在线的分布式计算框架的实现方法,其特征在于:所述非系统堆栈包括通过加载中间件类共享对象的中间件堆栈和通过环境变量加载临时类文件对象的临时堆栈。
5.根据权利要求1所述的实时在线的分布式计算框架的实现方法,其特征在于:步骤102中,所述重置具体的实现方法为,通过Java本地接口实现JVM的重置。
6.根据权利要求1所述的实时在线的分布式计算框架的实现方法,其特征在于:步骤102中,共享所述应用类中禁止修改所述应用类;禁止修改所述应用类的具体内容包括,禁止修改所述应用类的全局静态变量、禁止接入所述应用类的派生物、禁止基于所述应用类加载程序库文件和禁止管理所述应用类的线程。
7.根据权利要求1所述的实时在线的分布式计算框架的实现方法,其特征在于:步骤102中,重用所述中间件的具体方法包括清理所述中间件的状态和调用初始化的类文件。
8.根据权利要求7所述的实时在线的分布式计算框架的实现方法,其特征在于:清理所述中间件的状态包括释放所述中间件的存储空间、终止所述中间件的线程和清除所述中间件在所述堆栈的控制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310723603.XA CN104731634B (zh) | 2013-12-24 | 2013-12-24 | 一种实时在线的分布式计算框架的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310723603.XA CN104731634B (zh) | 2013-12-24 | 2013-12-24 | 一种实时在线的分布式计算框架的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104731634A true CN104731634A (zh) | 2015-06-24 |
CN104731634B CN104731634B (zh) | 2018-06-22 |
Family
ID=53455553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310723603.XA Active CN104731634B (zh) | 2013-12-24 | 2013-12-24 | 一种实时在线的分布式计算框架的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104731634B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293878A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN106843073A (zh) * | 2017-03-23 | 2017-06-13 | 云南工商学院 | 云控制解决电气自动化控制的装置 |
CN108270857A (zh) * | 2018-01-15 | 2018-07-10 | 郑州云海信息技术有限公司 | 一种云计算操作系统负载均衡方法及系统 |
CN111338764A (zh) * | 2020-03-23 | 2020-06-26 | 百卓网络科技有限公司 | 一种基于jvm共享机制的事务处理方法 |
US11663020B2 (en) | 2019-10-31 | 2023-05-30 | Red Hat, Inc. | Bootstrapping frameworks from a generated static initialization method for faster booting |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101192169A (zh) * | 2006-11-30 | 2008-06-04 | 国际商业机器公司 | 系统资源的优化利用的方法 |
CN103186412A (zh) * | 2011-12-31 | 2013-07-03 | 北京新媒传信科技有限公司 | 基于jvm服务器的性能优化方法 |
-
2013
- 2013-12-24 CN CN201310723603.XA patent/CN104731634B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101192169A (zh) * | 2006-11-30 | 2008-06-04 | 国际商业机器公司 | 系统资源的优化利用的方法 |
CN103186412A (zh) * | 2011-12-31 | 2013-07-03 | 北京新媒传信科技有限公司 | 基于jvm服务器的性能优化方法 |
Non-Patent Citations (1)
Title |
---|
陆嘉恒: "《Hadoop实战》", 30 November 2012 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293878A (zh) * | 2016-08-05 | 2017-01-04 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN106293878B (zh) * | 2016-08-05 | 2019-08-27 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN106843073A (zh) * | 2017-03-23 | 2017-06-13 | 云南工商学院 | 云控制解决电气自动化控制的装置 |
CN106843073B (zh) * | 2017-03-23 | 2019-07-30 | 云南工商学院 | 云控制解决电气自动化控制的装置 |
CN108270857A (zh) * | 2018-01-15 | 2018-07-10 | 郑州云海信息技术有限公司 | 一种云计算操作系统负载均衡方法及系统 |
US11663020B2 (en) | 2019-10-31 | 2023-05-30 | Red Hat, Inc. | Bootstrapping frameworks from a generated static initialization method for faster booting |
CN111338764A (zh) * | 2020-03-23 | 2020-06-26 | 百卓网络科技有限公司 | 一种基于jvm共享机制的事务处理方法 |
CN111338764B (zh) * | 2020-03-23 | 2023-06-30 | 百卓网络科技有限公司 | 一种基于jvm共享机制的事务处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104731634B (zh) | 2018-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3340057B1 (en) | Container monitoring method and apparatus | |
US11429442B2 (en) | Parallel and distributed computing using multiple virtual machines | |
CN104731634A (zh) | 一种实时在线的分布式计算框架的实现方法 | |
US8893272B2 (en) | Method and device for recombining runtime instruction | |
WO2011156922A1 (en) | Method and system for workload distributing and processing across a network of replicated virtual machines | |
US20150186228A1 (en) | Managing nodes in a distributed computing environment | |
US7275183B2 (en) | Method of restoring processes within process domain | |
EP3751416B1 (en) | Security protection method and apparatus | |
CN110362363B (zh) | 一种基于运行时模型实现对终端应用控制的方法 | |
CN104951694A (zh) | 一种管理虚拟机的隔离方法及装置 | |
EP3869336A1 (en) | Method and apparatus for processing development machine operation task, device and storage medium | |
JP2016110183A (ja) | 情報処理システム及び情報処理システムの制御方法 | |
CN110362301B (zh) | 一种终端应用行为反射的处理方法 | |
US11588698B2 (en) | Pod migration across nodes of a cluster | |
US20220283846A1 (en) | Pod deployment method and apparatus | |
CN111414256A (zh) | 基于麒麟移动操作系统的应用程序进程派生方法、系统及介质 | |
CN103309796A (zh) | 一种组件对象模型对象的监控方法和装置 | |
CN115335806A (zh) | 以模块粒度的影子堆栈违规强制 | |
CN111066000A (zh) | 对在托管运行时环境中的页面共享进行优化的可重放执行 | |
CN103019809A (zh) | 业务处理装置和方法、及业务处理控制装置 | |
CN101980170B (zh) | 一种微内核系统中软件模块的通信方法、系统及装置 | |
US20220156363A1 (en) | Multi -tenant actor systems with web assembly | |
CN110413333B (zh) | 基于NodeJS和PowerShell的Windows系统的微服务管理方法和装置 | |
US20200249988A1 (en) | Hosting virtual machines on a secondary storage system | |
US9722946B1 (en) | Apparatus and method for a script execution control environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 519085 No. five, No. 8, science and technology, Zhuhai Harbour Road, Guangdong, Zhuhai Applicant after: DINGLI CORP., LTD. Address before: 519085 No. five, No. 8, science and technology, Zhuhai Harbour Road, Guangdong, Zhuhai Applicant before: Dingli Communications Corp., Ltd. |
|
COR | Change of bibliographic data | ||
GR01 | Patent grant | ||
GR01 | Patent grant |