技术领域
[0001] 本发明涉及基于Spark的Kubernetes高效任务执行和管控方法,尤其涉及数据任务执行方法。
相关背景技术
[0002] 现有技术中,Spark平台只针对Kubernetes定义了唯一的一种任务执行模式:集群模式,在此在程序执行时,其启动了至少2个进程。一个为驱动管理进程,一个为真正的分布
式程序逻辑执行过程的进程。集群模式决定了程序在执行过程中,需要将驱动管理和分布
式逻辑执行过程分别分发到不同的进程执行。
[0003] 在集群模式下,存在三个问题:
[0004] 1)对于小规模数据(MB级)的任务,启动单个进程完全可以应对,而此模式需要启动至少2个进程,浪费至少一半的计算资源;
[0005] 2)任务启动速度慢,不能应对对大量的小的数据量的计算任务的需求。
[0006] 3)由于Kubernetes平台本身逻辑限制,目前只能通过删除执行过程容器的方式快速停止任务,而这种方式将导致强制停止的任务日志丢失。
[0007] 在集群模式下,提交Spark任务时,启动的是全量分布式模型,单次任务至少需要两个Kubernetes容器,适合单次大规模的GB到TB级数据,单次任务启动时间长度通常在分
钟级,对于业务中经常遇到的MB级别以下的数据处理需求过重,MB级别大小数据任务数量
多,如果采用全量分布式模式将浪费一半的系统计算资源。在集群模式下,一个程序任务被
分散到至少两个进程中进行执行,导致启动时间过长,通常在分钟级,在任务小,任务数量
多的情况下,将导致单个任务的启动相应时间过长,大大拖慢整个集群的任务执行效率。尤
其在教育行业,每个学生编写的学习的程序作品的处理数据通常在KB级别,但是要求快速
响应,此种场景下集群模式已不能满足“小数据、快响应”的需求。
具体实施方式
[0033] 下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、
或者结构上的等效变换或替代,均属于本发明的保护范围之内。
[0034] 在本实施例的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明创造和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解
为对本发明创造的限制
[0035] 此外,术语“第一”、“第二”、“第三”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明创造的描述中,除非另有说明,“多个”的含义是两个或两个以上。术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是
直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通
技术人员而言,可以通过具体情况理解上述术语在本发明创造中的具体含义。
[0036] 首先,本发明中,设计部分专业词语,尤其是利用英文术语,其相关解释如下:
[0037] 关于Spark:Spark是基础的计算引擎平台,基于Spark可以开发AI或者数据分析程序
[0038] 关于Kubernetes:Kubernetes是容器管理和资源调度平台,基于Spark编写的AI或者数据分析程序,可通过Kubernetes平台按需提供的计算资源执行。
[0039] 关于Docker容器:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统
的机器上,也可以实现虚拟化。容器是完全使用沙箱机制资源集合,相互之间不会有任何接
口。
[0040] 关于Docker entrypoint.sh文件:entrypoint.sh是启动容器的准备过程中需要执行的命令行的载体文件
[0041] 关于Local模式:Local模式是容器中Spark任务的一种启动方式,在此方式下可以解决Spark原有的集群模式下的资源消耗大,且任务启动慢的问题。
[0042] 其次,本实施例中,参照附图1‑2所示,结合数据任务执行方法中用到的系统以及,数据任务执行方法的流程图,进行描述。
[0043] 本发明,主要是在Java平台之上,对Spark平台进行重新容器化,借助于Docker技术对容器进行镜像化,进而实现了集群模式下,小数据,响应快的效果。
[0044] 参照附图1所示,本发明中,关于Spark和Kubernetes的流程原理为:
[0045] 利用Spark编写AI/数据分析程序进行提交,然后进入到Kubernetes中,使其执行基于Spark引擎的AI/数据分析程序。
[0046] 本发明中,数据任务的执行方法,具体如下:
[0047] 1.本发明通过重新开发Dockerentry文件定义一个专门针对Spark任务的镜像,在镜像的启动项中的逻辑中定义了一个专有任务执行模式的分支,此分支模式为local模式,
在此模式下,任务启动时间短,且只会启动一个Kubernetes容器,将节省一半的计算资源;
[0048] 2.本发明提供多模式的任务提交接口,其中,由于local模式启动Spark的local任务模式,确保任务只启动一个;
[0049] 具体地,其是通过在镜像启动项的逻辑中,定义任务模式分支,使得任务模式分支时,只启动一个任务。该步骤中,任务模式分支定义在所述镜像的启动项中的逻辑中。
[0050] 3.管控任务状态,提取任务日志,具体地,利用Kubernetes容器,通过停止Java进程值中的模式带动Kubernetes容器中任务的停止,且停止的任务存储于已结束的任务的
Kubernetes任务的列表中;
[0051] 4.停止任务,使用在容器内部停止Java进程的模式完成Kubernetes容器服务的停止,可以防止任务日志丢失;
[0052] 停止任务状态,所述任务状态为容器内部进程的管控方式管控任务任务状态,可以在不删除任务的前提下,快速关闭任务,且可在任务已经关闭的情况下提取任务日志;
[0053] 5.提供任务状态管控接口,完成对基于Spark的Kubernetes资源调度平台之上的任务的全生命周期管理,并确保了任务执行效率和资源的最大化利用,解决了小规模计算
量和数据量的任务较多的情况下的资源调度浪费的问题。
[0054] 基于Spark的Kubernetes高效任务执行和管控方法,包括:
[0055] 在local模式下spark任务的执行模式,以及在镜像中的定义的任务执行模式的分支。
[0056] 在entrypoint.sh中定义local分支,具体地,是因为本发明专门针对Spark任务的容器镜像,在镜像的启动项中定义任务执行模式的分支;
[0057] 任务提交接口,在其任务镜像中启用Spark任务的local模式,此local模式是本方法特定的单进程任务模式。
[0058] 本发明中,提供任务提交接口,启动Spark的local任务模式;
[0059] 特殊的任务停止方法,通过在容器内关闭java进程的方法,在保证容器不被删除情况下,完成对容器中的任务的停止过程,停止过程的技术特征体现在使用命令行强制关
闭程序进程。
[0060] 进一步地,特定的单进程任务模式包括如下:
[0061] 定义在原有Spark任务的3种模式中增加Kubernetes local模式,并在镜像入口中实现任务执行方式的分支。
[0062] 扩展Spark任务的local模式,配合容器入口脚本增加单进程模式。
[0063] 优选地,关闭任务后确保容器不被删除并且确保日志不丢失方法如下:使用Kubernetes的镜像内的命令行执行过程,执行镜像内的停止命令,在保证任务被停止的前
提下,保留了任务执行过程的日志。具体为定制的停止,即使用在容器内部停止Java进程的
模式完成Kubernetes容器服务的停止,通过此模式可以防止任务日志丢失。
[0064] 参照附图2所示,为了实现本发明中的方法,本发明还提供了基于Spark的Kubernetes之上的数据任务执行系统,其包括Spark、容器镜像和Kubernetes,所述容器镜
像包括local和任务状态管控。
[0065] 参照附图3所示,本发明中,详细的数据任务执行方法如下:
[0066] 1)首先,定义Kubernetes容器入口,其次,进入到entrypoint.sh中,再次,入口定义Spark任务入口为Local模式,进而为后续的任务启动中的唯一任务启动提供基础,具体
地,其实将任务模式定义在所述镜像的启动项中的逻辑中,进而在所有的程序等启动时,均
会通过该逻辑进行控制,确保功能实现的准确性。
[0067] 2)利用源代码,其为提取参数的过程定义local分支,具体源代码如下:
[0068]
[0069] 本步骤中,如图5所示,在Entrypoint中的提取参数的过程定义local分支,此分支下自定支持Local模式下的Spark任务,此任务通过java命令行启动并传入Spark任务参数。
[0070] 3)停止任务命令行,具体执行时,一方面,在入口处增加任务管控接口,确保任务在各个阶段的及时有效管控,另一方面,使用命令行的方式停止容器内的java进程,该过程
的控制,可以在不删除任务的前提下,快速关闭任务,且可在任务已经关闭的情况下提取任
务日志;
[0071] 4)利用源代码,任务的停止过程,相比于Kubernetes内置停止和删除过程,该步骤可快速停止任务,且保留任务日志。
[0072] 具体源代码如下:
[0073] ps‑eo pid,cmd|grep java|grep‑v grep|awk'{print$1}'|xargs kill
[0074] 最后,结合具体的应用场景进行详细的介绍。
[0075] 将本发明用于教育行业,在大数据编程培训中,利用Spark做编程实践课,详细过程如下:
[0076] 如图4所示,具体流程如下:
[0077] 学生编写Spark程序,以任务的形式提交到Kubernetes服务中执行,Kubernetes服务规划容器,并启动容器,容器启动时带动Spark程序启动,此时分别通过两种执行方式进
行对比:
[0078] 1.现有技术中的集群模式,此模式消耗资源大,且启动速度慢,整个过程低效。
[0079] 2.本发明中的Local模式,此模式下可以解决集群模式的下的资源消耗问题和启动速度问题,将资源消耗减半,且可将启动速度从分钟级别优化到秒级。
[0080] 首先,任务模式的定义:在Kubernetes容器入口中的默认启动项增加Local任务模式分支;在此中情况下,可以定义出Spark的任务执行分支,并在任务提交时指定在此分支
模式下执行任务。
[0081] 任务启动:利用Local任务执行模式中的任务模式分支,启动Kubernetes容器中的一个任务;将编程实践课中学生提交的Spark程序任务以Local模式启动。任务状态管控:利
用Kubernetes容器,通过停止Java进程值中的模式带动Kubernetes容器中任务的停止,且
停止的任务存储于已结束的任务的Kubernetes任务的列表中;
[0082] 全生命周期管理:利用Local任务模式分支,并在任务Local模式中,实现任务状态中任务启动、任务终止以及任务日志的提取过程,以完成对基于Spark的Kubernetes资源调
度平台之上的任务的全生命周期管理。
[0083] 停止任务状态,所述任务状态为容器内部进程的管控方式管控任务任务状态,可以在不删除任务的前提下,快速关闭任务,且可在任务已经关闭的情况下提取任务日志;
[0084] 通过启动Local模式下的任务、任务终止,和任务日志提取过程,完成对基于Spark的Kubernetes资源调度平台之上的任务的全生命周期管理。
[0085] 具体地,此课程往往学生多(通常50左右),需要执行的小任务多,每个任务需要处理的数据规模小(KB级别),需要的响应时间短,而且较高的并发要求。如果使用Spark集群
模式,则任务启动时间占用80%的整体执行时间,只有20%的任务执行时间是真正的程序
运行时间,整体任务的执行时间往往在分钟级别,而且每个任务至少启动两个程序进程,将
要求增加多一倍的服务器资源才可应对编程实践课的培训需求。
[0086] 而本发明中,在使用Spark集群模式时,通过消耗资源加倍,可能导致系统不可用,并且导致系统能够支撑的在线用户缩小一倍。
[0087] 本发明将任务的启动时间缩小到秒级,并且将每个单任务所需程序进程数减少到1个,可以减少1半的服务器资源,且节省一半的程序调试时间。
[0088] 上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式
或变更均应包含在本发明的保护范围之内。
[0089] 对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论
从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权
利要求而不是上述说明限定,因此旨在将权利要求落在等同要件的含义和范围内的所有变
化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
[0090] 此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当
将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员
可以理解的其他实施方式。