CN112328403A - 一种SparkContext的配置方法、装置及服务端 - Google Patents
一种SparkContext的配置方法、装置及服务端 Download PDFInfo
- Publication number
- CN112328403A CN112328403A CN202011339554.6A CN202011339554A CN112328403A CN 112328403 A CN112328403 A CN 112328403A CN 202011339554 A CN202011339554 A CN 202011339554A CN 112328403 A CN112328403 A CN 112328403A
- Authority
- CN
- China
- Prior art keywords
- sparkcontext
- request
- query
- task
- spark
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9038—Presentation of query results
Abstract
本发明公开了一种SparkContext的配置方法、服务端和系统,该方法包括:接收创建SparkContext的请求;发送第一查询请求,所述第一查询请求用于指示K8s查询各个节点的剩余资源;接收第一查询结果,所述第一查询结果包括各个节点的剩余资源;根据所述第一查询结果,发送创建命令,所述创建命令用于指示K8s在剩余资源最大的节点上创建SparkContext,重复以上过程创建数个可随时接收任务的常驻SparkContext。本发明实施方式提供的SparkContext配置方法,在SparkContext出现故障或者意外终止的情况下,可以自动生成新的SparkContext节点,重试失败任务,无需技术人员手动干预,节省了时间,提高了任务执行的效率。
Description
技术领域
本发明涉及大数据领域、云计算领域,尤其是涉及一种SparkContext的配置方法、服务端及数据处理系统。
背景技术
随着大数据行业的不断成熟,越来越多的行业需要对大量数据进行分析,而大数据领域中,需要强大的系统来处理海量数据。
其中,spark是一个基于内存的快速高效的提供了支持有向无环图的分布式并行计算框架分布式大数据处理框架。因此,spark技术对大数据进行数据清洗与机器学习处理具有高效的优势。
通常spark技术采用hadoop支持的数据源或文件系统存储数据,包括hdfs,hbase,hive,cassandra等。既可以部署在一个单独的服务器也可以部署在像mesos或yarn这样的分布式资源管理框架之上。并且提供scala,java和python三种程序设计语言的API接口。利用spark提供的API接口,开发者可以用标准的API接口创建基于spark的应用。
其中,SparkContext是所有spark功能的入口。无论需要执行何种spark任务,都需要初始化SparkContext来驱动程序执行,即spark服务器会将任务分配至SparkContext中,由SparkContext执行相应的任务。
目前当前的spark技术存在如下的缺陷:
(1)对于现有的spark系统中,如果一个SparkContext出现故障或者意外停止运行后,需要再次创建一个新的SparkContext并重新执行相应的任务,但是每次创建一个新的SparkContext,都需要技术人员手动根据系统的情况,在想要创建的节点上创建SparkContext,造成系统任务执行的效率低。
发明内容
(一)发明目的
本发明的目的是提供一种基于K8s的SparkContext的配置方法、服务端及数据处理系统,通过spark-jobserver和K8s的配合,可以在SparkContext意外终止后,自动生成新的常驻的SparkContext,无需手动干预,提高了任务执行的效率,而且每次将所有的节点中选择资源剩余量最大的node节点创建SparkContext,避免资源使用的倾斜。
(二)技术方案
为解决上述问题,本发明的第一方面提供了一种SparkContext的配置方法,包括:接收创建SparkContext的请求;发送第一查询请求,所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的各个node节点的剩余资源;接收与所述第一查询请求对应的第一查询结果,所述第一查询结果包括指定的多个node节点的剩余资源;根据所述第一查询结果,发送创建命令,所述创建命令用于指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;所述常驻的SparkContext用于在每次执行计算后,保留自身的资源,以使所述常驻的SparkContext在执行一个任务后还能执行下一个任务。
进一步地,所述创建SparkContext的请求,包括重建SparkContext的请求,所述接收创建SparkContext的请求包括:确定运行故障的SparkContext,并发送第一提示信息;所述第一提示信息用于提示任务分配服务端发送重建SparkContext的请求,并指示K8s应用管理系统指定另一SparkContext执行故障的SparkContext未完成的任务;接收所述重建SparkContext的请求。
进一步的,在所述接收创建SparkContext的请求之后,在发送第一查询请求之前,还包括:根据接收的创建SparkContext的请求发送第二查询请求,所述第二查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的且与所述创建SparkContext请求相同名称的SparkContext;接收与第二查询请求对应的第二查询结果;当根据所述第二查询结果确定有部署在K8s应用管理系统上且与所述创建SparkContext请求相同名称的SparkContext,发送删除请求;所述删除请求用于指示K8s应用管理系统删除与所述创建SparkContext请求相同名称的SparkContext的资源。
进一步地,还包括:接收创建SparkContext成功的信息;根据所述创建SparkContext成功的信息发送加入请求,所述加入请求用于指示任务分配服务器将本次创建的SparkContext标记为可执行任务的常驻SparkContext。
根据本发明的第二方面,还提供了一种SparkContext的配置方法,应用在K8S应用管理系统,方法包括:接收第一查询请求;根据接收的第一查询请求查询指定的多个node节点的剩余资源;发送第一查询结果,所述第一查询结果包括指定的多个node节点的剩余资源;响应spark运行服务端的调用指令,使spark任务运行服务端在指定的多个node节点中剩余资源最大的node节点上创建SparkContext。
进一步地,还包括:根据接收的第二查询请求查询与创建SparkContext请求相同名称的SparkContext;发送第二查询请求对应的第二查询结果;根据接收的删除请求,删除所述创建SparkContext请求相同名称的SparkContext的资源。
根据本发明的第三方面,提供了一种SparkContext的配置方法,应用在任务分配服务端,方法包括:发送创建SparkContext的请求,所述创建SparkContext的请求用于指示spark任务管理服务端发送第一查询请求;所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的多个指定的node节点的剩余资源,以使spark任务管理服务端根据第一查询请求对应的第一查询结果指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;接收创建成功的请求,所述创建成功的请求用于提示为新创建的SparkContext分配任务。
进一步的,还包括:接收第一提示信息,所述第一提示信息包括故障的SparkContext的名称;根据所述第一提示信息确定所述故障的SparkContext当前执行的任务名称;根据所述故障的SparkContext当前执行的任务名称调取与所述任务名称对应的SparkContext的优先级列表;发送重试任务的请求,所述重试任务的请求,用于指示排在所述优先级列表中最前面的且目前未执行任务的SparkContext执行所述故障的SparkContext未执行完的任务。
根据本发明的第四方面,还提供了一种SparkContext配置装置,包括:第一信息接收单元,与任务分配服务端通信连接,用于接收任务分配服务端发送的创建SparkContext的请求;第一处理单元,用于根据所述创建SparkContext的请求发送第一查询请求,所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的各个node节点的剩余资源;第二信息接收单元,用于接收与所述第一查询请求对应的第一查询结果,所述第一查询结果包括各个node节点的剩余资源;第二处理单元,用于根据所述第一查询结果,发送创建命令,所述创建命令用于指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;所述常驻的SparkContext用于在每次执行计算后,保留自身的资源,以使所述常驻的SparkContext在执行一个任务后还能执行下一个任务。
进一步地,第一处理单元,还用于根据所述创建SparkContext的请求发送第二查询请求,所述第二查询请求用于指示K8s应用管理系统查询与所述创建SparkContext请求相同名称的SparkContext;第二信息接收单元,还用于接收第二查询结果;所述第一处理单元,还用于根据所述第二查询结果确定有部署在K8s应用管理系统上且与所述创建SparkContext请求相同名称的SparkContext,发送删除请求;所述删除请求用于指示K8s应用管理系统删除与所述创建SparkContext请求相同名称的SparkContext的资源。
根据本发明的第五方面,还提供了一种SparkContext配置装置,包括:第三处理单元,根据接收的第一查询请求查询各个节点的剩余资源,并发送第一查询结果,所述第一查询结果包括各个节点的剩余资源;第四处理单元,响应spark任务运行服务端的调用指令,使spark运行服务端在指定的多个node节点中剩余资源最大的node节点上创建SparkContext。
进一步地,所述第三处理单元,还用于根据接收的第二查询请求查询与创建SparkContext请求相同名称的SparkContext;发送第二查询请求对应的第二查询结果;根据接收的删除请求,删除所述创建SparkContext请求相同名称的SparkContext的资源。
根据本发明的第六方面,还提供了一种SparkContext配置装置,包括:发送单元,用于发送创建SparkContext的请求,所述创建SparkContext的请求用于指示spark任务管理服务端发送第一查询请求;所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的多个指定的node节点的剩余资源,以使spark任务管理服务端根据第一查询请求对应的第一查询结果指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;接收单元,接收创建成功的请求,所述创建成功的请求用于提示为新创建的SparkContext分配任务。
根据本发明的第七方面,提供了一种服务端,包括处理器,处理器执行第一方面所述的SparkContext的配置方法,或者,所述处理器执行第二方面提供的SparkContext的配置方法。
根据本发明的第八方面,提供了一种计算机存储介质,计算机存储介质上存储有计算机程序,程序被处理器执行时实现第一方面、第二方面或第三方面所述的SparkContext的配置方法。
根据本发明的第九方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现第一方面、第二方面或第三方面所述的SparkContext的配置方法。
根据本发明的十方面,提供一种计算机程序产品,其中,包括计算机指令,当计算机指令被计算设备执行时,计算设备可以执行第一方面、第二方面或第三方面所述的SparkContext的配置方法。
(三)有益效果
本发明的上述技术方案具有如下有益的技术效果:
本发明实施方式提供的SparkContext配置方法,在SparkContext出现故障或者意外终止的情况下,可以自动生成新的SparkContext节点,无需技术人员手动创建SparkContext,节省了时间,提高了数据清洗的效率。
附图说明
图1是本发明第一实施方式提供的SparkContext的配置方法流程示意图;
图2是本发明第二实施方式提供的SparkContext的配置方法流程示意图;
图3是本发明第三实施方式提供的SparkContext的配置方法流程示意图;
图4是本发明第四实施方式提供的spark任务管理服务端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
在详细论述本发明的技术方案之前,先介绍一下与本发明相关的内容。
随着云计算行业的飞速发展,随着云计算技术的不断成熟,容器技术逐步成为业界的发展热点,容器技术越来越多的应用到信息产业的各个领域中。
容器技术:有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求。
kubernetes,简称K8s,K8s作为容器技术中容器应用的管理中心,对集群内部的所有的容器的生命周期进行管理,结合自身的存活健康和就绪检查以及错误恢复机制,实现了集群容器的应用层的高可用。
容器技术中,会对不同组的资源隔离,而容器镜像可以保证在不同环境下系统的一致性,就有较好的稳定性,而且K8s对资源隔离提供了更好的抽象与设计,并且性能更佳。
而目前spark框架中的spark工作服务器(spark-jobserver)的底层只支持在yarn和mesos比较传统的资源管理平台之上运行spark,不支持kubernetes,因此,系统的稳定性较差。
现有的spark框架在接收到执行命令后,根据技术人员传入的资源参数和任务参数先创建一个SparkContext,然后执行任务。在执行任务时,先生成Job,并且将每一个Job分为不同的阶段(stage),即每个Job会被拆分为多组任务(Task),每一组任务被成为一个stage,每个stage也可以称作一个task set(任务集),其中,SparkContext包括driver和executor,其中,driver接收到一个job后,会将该job的多组Task分配给本SparkContext的多个executor,每个executor会执行该组task,多个executor可能会并行或者串行的执行各自的task。另外,driver还会并监督各个的executor的任务情况,以及收集每个executor执行任务的进度,确定本job的进度,将本job的进度发给本SparkContext上一级的管理模块。
其中,每个executor包括一个或多个处理核和多个存储单元,其中,处理核是executor的工作单元。每个executor的每个处理核一次只能执行一组task。
另外,关于K8s技术中,pod是由K8s创建和管理的最小部署单元,是一种应用程序,通常各个任务会在pod中运行,为保证服务任务的高可用性,K8s通常采用pod多副本的部署方式。例如,K8s为服务任务分配多个pod,多个pod构成了单个服务的集群,多个pod互为冗余,平时只有一个pod为服务提供具体功能实现。服务在pod运行过程中可能会使用到一些中间件,例如数据库,则此时需要pod调用这些中间件的公共配置参数,例如数据库连接信息(具体可以为数据库登录名和密码)、redis配置参数等。
由于K8s集群通常要管理着数十个甚至上百个pod,pod在创建时会根据默认的资源调度策略调度到对应的node(节点)中运行,可能存在多个pod集中部署在同一node的情况,考虑到K8s平台中的节点存在不稳定因素,若节点宕机,则该node上所有pod将停止运行,导致该K8s资源的pod服务不可用,降低K8s平台的资源利用率,对于集群的可用性有较大的影响。
因此,如何合理的利用K8s技术的优势,合理的配置SparkContext的资源是当前亟待解决的技术问题。
图1是本发明第一实施方式提供的SparkContext的配置方法流程示意图。
如图1所示,该方法应用在spark任务管理服务端(spark-jobserver)上,该方法包括:步骤S101-步骤S104。其中,
步骤S101,接收创建SparkContext的请求。
其中,接收的创建SparkContext的请求是任务分配服务端发送给spark任务管理服务端的。其中,创建SparkContext的请求包括diver和executor的资源参数、要创建的context的名称。
步骤S102,发送第一查询请求,所述第一查询请求用于指示K8s查询多个指定的node节点的剩余资源。
在本实施例中,spark任务管理服务端收到创建SparkContext的请求之后,给K8s发送第一查询请求,指示K8s应用管理系统查询多个指定的node节点的剩余资源。
可选的,第一查询请求也可以用于指示K8s应用管理系统查询指定的多个node节点的剩余资源,便于根据指定的多个节点的剩余资源确定需要在哪个节点上创建SparkContext。
步骤S103,接收第一查询结果,所述第一查询结果包括多个指定的node节点的剩余资源。
K8s应用管理系统在查询多个指定的node节点的剩余资源之后,会将第一查询结果发送给spark-jobserver。
步骤S104,根据所述第一查询结果,发送创建命令,所述创建命令用于指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext。常驻的SparkContext用于在每次执行计算后,保留其自身的资源,以使所述常驻的SparkContext在执行一个任务后还能执行下一个任务。
需要说明的是,spark系统不只是有SparkContext,还有其他的组件和服务,而其他的组件也需要占用资源,因此可以预先对SparkContext的资源标记,即将用于为SparkContext服务的node节点标记,在发送查询请求时,指示K8s应用管理系统查询为SparkContext服务的node节点的剩余资源。
需要说明的是,在本实施例中,创建的SparkContext是常驻的节点,现有技术的SparkContext固有机制是,每个SparkContext在执行完各自的任务后,就会删除自身的资源,系统中如果有新的任务,在执行新的任务之前,会重新创建一个SparkContext,然后在执行该新的任务。
而创建一个新的SparkContext必须要耗费很多资源的,而本发明创建的是常驻的SparkContext,常驻的SparkContext可以多次执行任务后,无需在执行下个任务之前,重新创建新的SparkContext,减少资源耗费情况。
另外,在本实施例中,spark-jobserver每次确定会在剩余资源最大的节点上创建SparkContext,保证资源的利用不会出现严重倾斜,避免因某个节点剩余资源不足而无法创建SparkContext的情况,减少了服务之间的资源竞争,能够使得新建立的SparkContext使用足够的资源,保证新建的SparkContext执行任务的效率。
具体地,spark任务运行服务端在收到创建命令之后,调用K8s应用管理系统的接口,在剩余资源最大的node节点上创建常驻的SparkContext。
需要说明的是,现有的spark-jobserver创建节点都是需要技术人员手动的输入参数,由技术人员根据系统的运行情况,创建节点,而手动的输入参数创建节点比较麻烦,不利于系统的稳定运行。因此,本发明通过采用K8s应用管理系统,查询各个节点的剩余资源,能够使得spark-jobserver动态选择剩余资源最大的节点创建SparkContext,实时获取K8s集群的资源使用状态,选择剩余资源最大的节点创建SparkContext,避免资源的倾斜,不会出现有些node节点上建立的SparkContext太多,从而导致执行过多任务引起的运行故障,能够保证资源合理的利用,每个程序都有足够的资源使用,提高了程序运行的稳定性。
此外,本发明上述方法中,任务分配服务端是用于接收任务,并根据任务绘制有向无环图,有向无环图中的每个任务可以视为一个节点,任务分配服务端可以根据任务大小的不同,分配任务给各个SparkContext的服务端。另外,任务分配服务端还用于接收spark-jobserver发送过来的各个SparkContext的剩余资源情况和任务执行情况。
此外,本发明上述实施方式中,spark任务运行服务端,主要是用于时时监控SparkContext的运行状态,将各个SparkContext的运行情况发送给k8s应用管理系统,以及接收spark-jobserver的创建指令,调用k8s的接口,在指定的节点上创建SparkContext。
在一个实施例中,所述创建SparkContext的请求包括重建SparkContext的请求,所述接收创建SparkContext的请求包括:确定运行故障的SparkContext,并发送第一提示信息;所述第一提示信息用于提示任务分配服务端发送重建SparkContext的请求,并指示K8s应用管理系统指定另一SparkContext执行故障的SparkContext未完成的任务;接收所述重建SparkContext的请求。
其中,当spark任务运行服务端(spark on k8s)检测到某个SparkContext执行任务出现错误,或者执行任务时,占用的资源超过预设的上限时,确定该SparkContext出现故障。spark任务运行服务端会将出现故障的SparkContext的信息发送给K8s应用管理系统和spark-jobserver,K8s应用管理系统会将该故障的SparkContext停止运行。spark-jobserver确定运行故障的SparkContext,记录该运行故障的SparkContext的最后的日志,并发送第一提示信息,第一提示信息中含有故障的SparkContext的信息。
任务分配服务端根据第一提示信息删除该故障SparkContext的信息和状态,并打印错误日志,并给预设的系统的负责人发送信息,发送的信息例如是短信、邮件、APP软件消息等。同时或之后,任务分配服务端将故障SparkContext当前执行的任务分配给另一个SparkContext,从而指示另一个SparkContext重新执行故障SparkContext未完成的任务。然后,任务分配服务端发送创建新的SparkContext的请求。
可选的,新的SparkContext的名称与故障的SparkContext的名称一致。
进一步的,任务分配服务端用于将任务发送给各个SparkContext,分发任务时,任务分配服务端会记录每个任务的详细信息及执行这个任务的SparkContext。当任务服务端接收到spark-jobserver发送的某个SparkContext故障后,通过该故障的SparkContext的名称查询到该故障SparkContext本次执行的任务名称和任务的详细信息,然后根据各个SparkContext的任务执行情况,将该故障SparkContext本次执行的任务分配给另一个SparkContext。
在一些具体的实施例中,任务分配服务端,在刚接收到每个任务时,先根据任务的数据量确定适合执行该任务的SparkContext的优先级列表,位于该列表最前的表示最适合执行该任务。当任务分配服务端收到spark-jobserver发送的某个SparkContext故障后,将每个任务的该故障的SparkContext从优先级列表中删除,并且确定将该故障的SparkContext未执行完的任务分配给优先级列表中,排在最前面的且目前未执行任务的SparkContext执行故障的SparkContext未执行完的任务。
在一个实施例中,在接收创建SparkContext的请求之后,在发送第一查询请求之前,还包括:
首先,根据接收的创建SparkContext的请求发送第二查询请求,所述第二查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的且与所述创建SparkContext请求相同名称的SparkContext。
在本步骤中,在收到创建SparkContext的请求后,spark服务端会向K8s应用管理系统发送第二查询请求,指示K8s应用管理系统查询与创建SparkContext的请求相同名称的SparkContext。
然后,接收第二查询结果。第二查询结果中包括存在相同名称的SparkContext,以及相同名称的SparkContext的位置信息等,或者第二查询结果中包括不存在相同名称的SparkContext。
最后,当spark任务管理服务端根据所述第二查询结果确定有与所述创建SparkContext请求相同名称的SparkContext,发送删除请求,所述删除请求用于指示K8s应用管理系统删除与所述创建SparkContext请求相同名称的SparkContext的资源。
可以理解的是,现有技术中,如果要删除一个SparkContext,需要技术人员在系统界面上点击删除,而本发明在创建新的SparkContext之前,通过K8s应用管理系统将同名的SparkContext及同名的SparkContext所占用的资源删除。其中K8s应用管理系统占用的资源例如是service、ingress rule和pod。
在一个实施例中,上述配置方法还包括:spark任务管理服务端接收来自K8s应用管理系统发送的创建SparkContext成功的信息。
spark任务管理服务端根据所述创建SparkContext成功的信息发送加入请求,所述加入请求用于给提示信息,提示信息用于指示任务分配服务器将本次创建的SparkContext标记为可执行任务的常驻SparkContext。
结合上述实施例,任务分配服务端在收到加入请求后,将各个任务的“适合执行该任务的SparkContext的优先级列表”中原来故障的SparkContext的排名替换成与故障的SparkContext同名的刚刚新建立的SparkContext。
另外,当任务分配服务端检测到同一个任务存在执行故障超过预设次数时,任务分配服务端停止将该任务分配给新的SparkContext,并发送告警信息给指定的手机号、微信号或者邮箱等。
在一个实施例中,spark任务管理服务端和K8s应用管理系统通过TCP协议传输信息和数据。K8s应用管理服务端和spark任务运行服务端通过TCP协议传输信息和数据。spark任务管理服务端和spark任务运行服务端通过TCP协议传输信息和数据。
需要说明的是,本申请先设置spark任务管理服务端通过HTTP协议向外部发送信息和数据,为了便于时刻了解SparkContext的状态以及任务的执行状态,但是,如果使用HTTP协议,只能通过不停的轮询向任务管理服务端获取SparkContext的状态。而经过研究,在大量任务执行的场景下,会由于spark-jobserver压力过大,导致出现HTTP请求返回超时,导致任务丢失的现象。
为便于避免出现采用HTTP协议造成信息收不到的问题,以使得spark任务管理服务端可以时刻感知到SparkContext和任务执行的状态,出现任何问题可以在第一时间内自动处理,因此,本实施例中spark任务管理服务端通过TCP协议与K8s、任务分配服务端发送和获取信息采用TCP协议保证spark任务管理服务端、SparkContext和任务管理服务端保持稳定通信。
在本发明的另一个实施例中,K8s应用管理系统创建SparkContext的流程是:客户端程序先创建driver,然后等driver创建完成,driver会根据配置创建executor。
图2是本发明第二实施方式提供的SparkContext的配置方法流程示意图。
如图2所示,该方法应用在K8s管理服务系统中,该方法包括:
步骤S201,接收第一查询请求。其中,第一查询请求是spark任务管理服务端发送的。
步骤S202,根据接收的第一查询请求查询指定的多个node节点的剩余资源。
K8s管理服务系统接收到spark任务管理服务端发送的第一查询请求后,查询指定的多个node节点的剩余资源并生成第一查询结果。
步骤S203,发送第一查询结果,所述第一查询结果包括指定的多个node节点的剩余资源。
在本实施例中,K8s应用管理系统将第一查询结果发送给spark任务管理服务端。
步骤S204,响应spark任务运行服务端的调用指令,使spark运行服务端在指定的多个node节点中剩余资源最大的node节点上创建SparkContext。
在一个实施例中,在根据接收的第一查询请求查询多个指定的node节点的剩余资源之前,还包括:
首先,根据接收的第二查询请求查询与待创建的SparkContext相同名称的SparkContext。
在本实施例中,spark任务管理服务端在收到任务分配服务端发送的创建请求后,发送第二查询请求,指示K8s应用管理系统查询是否有与创建请求对应的同名的SparkContext。
当spark任务管理服务端确认存在与待创建的SparkContext相同名称的SparkContext时,发送删除请求,删除请求指示K8s应用管理系统删除与待创建的SparkContext相同名称的SparkContext的资源。
K8s应用管理系统根据删除请求删除与待创建的SparkContext相同名称的SparkContext的资源。
在一个实施方式中,还提供了一种SparkContext的配置方法,该方法应用在任务分配服务端中,其中该方法包括:发送创建SparkContext的请求,所述创建SparkContext的请求用于指示spark任务管理服务端发送第一查询请求;所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的多个指定的node节点的剩余资源,以使spark任务管理服务端根据第一查询请求对应的第一查询结果指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建SparkContext;接收创建成功的请求,所述创建成功的请求用于提示为新创建的SparkContext分配任务。
在一个实施例中,方法还包括:接收第一提示信息,所述第一提示信息包括故障的SparkContext的名称;根据所述第一提示信息确定所述故障的SparkContext当前执行的任务名称;根据所述故障的SparkContext当前执行的任务名称调取与所述任务名称对应的SparkContext的优先级列表;发送重试任务的请求,所述重试任务的请求,用于指示排在所述优先级列表中最前面的且目前未执行任务的SparkContext执行所述故障的SparkContext未执行完的任务。
图3是本发明第三实施方式提供的SparkContext的配置方法流程示意图。
如图3所示,该方法包括:
首先,spark任务运行服务端发现运行在K8s上的某个SparkContext存在执行错误或占用资源超过自身上限等故障,将故障信息发送给K8s应用管理系统和spark-jobserver。
然后,K8s应用管理系统(简称K8s)控制停止该故障的SparkContext运行。
下一步,spark-jobserver发送第一提示信息给任务分配服务端。
接着,任务分配服务端根据第一提示信息删除故障的SparkContext的信息,打印错误日志。
然后,任务分配服务端向spark-jobserver发送创建SparkContext的请求,该创建SparkContext的请求包括:diver和executor的资源参数、要创建的SparkContext的名称。
然后,spark-jobserver根据该创建SparkContext的请求生成并发送第二查询请求给K8s,请求K8s查询K8s中是否存在与创建SparkContext的请求中同名的SparkContext,以及同名的SparkContext的状态。
接着,K8s收到该第二查询请求,查询是否存在与创建SparkContext的请求中同名的SparkContext,以及同名的SparkContext的状态,生成第二查询结果,第二查询结果包括存在相同名称的SparkContext,以及相同名称的SparkContext的位置信息等,或者第二查询结果中包括不存在相同名称的SparkContext。
然后,spark-jobserver收到该第二查询结果,当存在与待创建的SparkContext相同名称的SparkContext时,指示K8s删除与待创建的SparkContext相同名称的SparkContext的资源。当spark-jobserver收到K8s发送的删除成功的消息时,执行下一步,或者当不存在与待创建的SparkContext相同名称的SparkContext时,执行下一步。
其次,spark-jobserver根据删除成功的消息或者不存在与待创建的SparkContext相同名称的SparkContext发送第一查询请求,指示K8s查询指定的几个节点的剩余资源。
K8s根据接收的第一查询请求,查询指定的几个节点的剩余资源,得到第一查询结果,将第一查询结果发送给spark-jobserver。
然后,spark-jobserver根据第一查询结果,发送创建命令,以指示Spark任务运行服务端调用K8s任务管理系统在指定的多个节点中剩余资源最大的节点上创建SparkContext。
spark任务运行服务端收到创建命令后,调用K8s任务管理系统的接口在这几个指定的节点中剩余资源最大的节点上创建SparkContext,在创建完成后,spark将创建成功的消息发送给K8s,K8s再将创建成功的消息发送给spark–jobserver。
然后,spark–jobserver收到创建成功的消息后,发送提示信息给任务分配服务端,提示任务分配服务端可以考虑为新创建的SparkContext分配任务。
最后,任务分配服务端收到提示信息后,根据新创建的SparkContext的信息与状态将任务分配服务端之前记录的各个SparkContext的状态更新,另外,将各个任务名称对应的SparkContext的优先级列表更新,并将新创建的SparkContext加入到SparkContext集群。
图4是本发明第四实施方式提供的SparkContext配置装置的结构示意图。
如图4所示,该SparkContext配置装置,包括:第一信息接收单元,与任务分配服务端通信连接,用于接收任务分配服务端发送的创建SparkContext的请求;第一处理单元,用于根据所述创建SparkContext的请求发送第一查询请求,所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的各个node节点的剩余资源;第二信息接收单元,用于接收与所述第一查询请求对应的第一查询结果,所述第一查询结果包括各个node节点的剩余资源。
第二处理单元,用于根据所述第一查询结果,发送创建命令,所述创建命令用于指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;常驻的SparkContext用于在每次执行计算后,保留自身的资源,以使该常驻的SparkContext在执行一个任务后还能执行下一个任务。
在本实施例中,常驻的SparkContext,执行任务分配服务端发送的任务命令。
在一个实施例中,第一处理单元,还用于根据所述创建SparkContext的请求发送第二查询请求,所述第二查询请求用于指示K8s查询与所述创建SparkContext请求相同名称的SparkContext;第二信息接收单元,还用于接收第二查询结果。
所述第一处理单元,还用于当所述第二查询结果确定有与所述创建SparkContext请求相同名称的SparkContext,发送删除请求;所述删除请求用于指示K8s删除与所述创建SparkContext请求相同名称的SparkContext的资源。
在一些实施方式中,还提供了另一种SparkContext的配置装置,该配置装置包括:第三处理单元,用于根据接收的第一查询请求查询多个指定节点的剩余资源,并发送第一查询结果,所述第一查询结果包括多个指定节点的剩余资源。第四处理单元,用于响应spark运行服务端的调用指令,使spark运行服务端在指定的多个node节点中剩余资源最大的node节点上创建SparkContext。
在一个实施例中,所述第三处理单元,还用于根据接收的第二查询请求查询与创建SparkContext请求相同名称的SparkContext;接收删除请求,根据删除请求删除与所述创建SparkContext请求相同名称的SparkContext的资源。
在一些实施例中,还提供了一种SparkContext配置装置,包括:发送单元,发送创建SparkContext的请求,所述创建SparkContext的请求用于指示spark任务管理服务端发送第一查询请求;所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的多个指定的node节点的剩余资源,以使spark任务管理服务端根据第一查询请求对应的第一查询结果指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建SparkContext;接收单元,接收创建成功的请求,所述创建成功的请求用于提示为新创建的SparkContext分配任务。
在一些实施方式中,还包括:第五处理单元,其中接收单元还用于接收第一提示信息,所述第一提示信息包括故障的SparkContext的名称;所述第五处理单元还用于根据所述第一提示信息确定所述故障的SparkContext当前执行的任务名称;根据所述故障的SparkContext当前执行的任务名称调取与所述任务名称对应的SparkContext的优先级列表;确定由排在所述优先级列表中最前面的且目前未执行任务的SparkContext执行所述故障的SparkContext未执行完的任务,所述发送单元,还用于发送重试任务的请求,所述重试任务的请求,用于指示排在所述优先级列表中最前面的且目前未执行任务的SparkContext执行所述故障的SparkContext未执行完的任务。
在一些实施例中,还提供了一种服务端,包括处理器,处理器执行第一方面所述的SparkContext的配置方法,或者,所述处理器执行第二方面提供的SparkContext的配置方法。
在一些实施例中,还提供了一种SparkContext配置系统,包括第四方面、第五方面和第六方面提供的SparkContext的配置装置。
根据本发明的第八方面,提供了一种计算机存储介质,计算机存储介质上存储有计算机程序,程序被处理器执行时实现第一方面、第二方面或第三方面所述的SparkContext的配置方法。
根据本发明的第九方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现第一方面、第二方面或第三方面所述的SparkContext的配置方法。
根据本发明的十方面,提供一种计算机程序产品,其中,包括计算机指令,当计算机指令被计算设备执行时,计算设备可以执行第一方面、第二方面或第三方面所述的SparkContext的配置方法。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (10)
1.一种SparkContext的配置方法,其特征在于,包括:
接收创建SparkContext的请求;
发送第一查询请求,所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的各个node节点的剩余资源;
接收与所述第一查询请求对应的第一查询结果,所述第一查询结果包括指定的多个node节点的剩余资源;
根据所述第一查询结果,发送创建命令,所述创建命令用于指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;所述常驻的SparkContext用于在每次执行计算后,保留其自身的资源,以使所述常驻的SparkContext在执行一个任务后还能执行下一个任务。
2.根据权利要求1所述的配置方法,其特征在于,所述创建SparkContext的请求包括重建SparkContext的请求,所述接收创建SparkContext的请求包括:
确定运行故障的SparkContext,并发送第一提示信息;所述第一提示信息用于提示任务分配服务端发送重建SparkContext的请求,并指示K8s应用管理系统指定另一SparkContext执行故障的SparkContext未完成的任务;
接收所述重建SparkContext的请求。
3.根据权利要求2所述的配置方法,其特征在于,在所述接收创建SparkContext的请求之后,在发送第一查询请求之前,还包括:
根据接收的创建SparkContext的请求发送第二查询请求,所述第二查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的且与所述创建SparkContext请求相同名称的SparkContext;
接收与第二查询请求对应的第二查询结果;
当根据所述第二查询结果确定有部署在K8s应用管理系统上且与所述创建SparkContext请求相同名称的SparkContext,发送删除请求;所述删除请求用于指示K8s应用管理系统删除与所述创建SparkContext请求相同名称的SparkContext的资源。
4.根据权利要求1-3任一项所述的配置方法,其特征在于,还包括:
接收创建SparkContext成功的信息;
根据所述创建SparkContext成功的信息发送加入请求,所述加入请求用于指示任务分配服务器将本次创建的SparkContext标记为可执行任务的常驻SparkContext。
5.一种SparkContext的配置方法,其特征在于,包括:
接收第一查询请求;
根据接收的第一查询请求查询指定的多个node节点的剩余资源;
发送第一查询结果,所述第一查询结果包括指定的多个node节点的剩余资源;
响应spark任务运行服务端的调用指令,使spark运行服务端在指定的多个node节点中剩余资源最大的node节点上创建SparkContext。
6.一种SparkContext的配置方法,其特征在于,
发送创建SparkContext的请求,所述创建SparkContext的请求用于指示spark任务管理服务端发送第一查询请求;所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的多个指定的node节点的剩余资源,以使spark任务管理服务端根据第一查询请求对应的第一查询结果指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;
接收创建成功的信息,所述创建成功的请求用于提示为新创建的SparkContext分配任务。
7.一种SparkContext的配置装置,其特征在于,包括:
第一信息接收单元,与任务分配服务端通信连接,用于接收任务分配服务端发送的创建SparkContext的请求;
第一处理单元,用于根据所述创建SparkContext的请求发送第一查询请求,所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的各个node节点的剩余资源;
第二信息接收单元,用于接收与所述第一查询请求对应的第一查询结果,所述第一查询结果包括各个node节点的剩余资源;
第二处理单元,用于根据所述第一查询结果,发送创建命令,所述创建命令用于指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;所述常驻的SparkContext用于在每次执行计算后,保留自身的资源,以使所述常驻的SparkContext在执行一个任务后还能执行下一个任务。
8.一种SparkContext配置装置,其特征在于,包括:
第三处理单元,用于根据接收的第一查询请求查询指定的多个node节点的剩余资源,并发送与所述第一查询请求对应的第一查询结果,所述第一查询结果包括指定的多个node节点的剩余资源;
第四处理单元,响应spark运行服务端的调用指令,使spark运行服务端在指定的多个node节点中剩余资源最大的node节点上创建SparkContext。
9.一种SparkContext配置装置,其特征在于,包括:
发送单元,用于发送创建SparkContext的请求,所述创建SparkContext的请求用于指示spark任务管理服务端发送第一查询请求;所述第一查询请求用于指示K8s应用管理系统查询部署在K8s应用管理系统上的多个指定的node节点的剩余资源,以使spark任务管理服务端根据第一查询请求对应的第一查询结果指示spark任务运行服务端调用K8s应用管理系统在剩余资源最大的node节点上创建常驻的SparkContext;
接收单元,接收创建成功的请求,所述创建成功的请求用于提示为新创建的SparkContext分配任务。
10.一种服务端,其特征在于,包括处理器,处理器执行如权利要求1-4任一项所述的SparkContext的配置方法,或者,所述处理器执行如权利要求5所述的SparkContext的配置方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011339554.6A CN112328403A (zh) | 2020-11-25 | 2020-11-25 | 一种SparkContext的配置方法、装置及服务端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011339554.6A CN112328403A (zh) | 2020-11-25 | 2020-11-25 | 一种SparkContext的配置方法、装置及服务端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112328403A true CN112328403A (zh) | 2021-02-05 |
Family
ID=74308922
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011339554.6A Pending CN112328403A (zh) | 2020-11-25 | 2020-11-25 | 一种SparkContext的配置方法、装置及服务端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112328403A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741175A (zh) * | 2022-04-15 | 2022-07-12 | 支付宝(杭州)信息技术有限公司 | 任务执行方法、装置、中心节点和下游节点设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110262881A (zh) * | 2019-06-12 | 2019-09-20 | 深圳前海微众银行股份有限公司 | 一种Spark作业的提交方法及装置 |
WO2020000944A1 (zh) * | 2018-06-25 | 2020-01-02 | 星环信息科技(上海)有限公司 | 基于抢占式调度的资源共享使用方法、系统及设备 |
CN110764915A (zh) * | 2019-10-29 | 2020-02-07 | 西安邮电大学 | 一种针对kubernetes主节点选择的优化方法 |
-
2020
- 2020-11-25 CN CN202011339554.6A patent/CN112328403A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020000944A1 (zh) * | 2018-06-25 | 2020-01-02 | 星环信息科技(上海)有限公司 | 基于抢占式调度的资源共享使用方法、系统及设备 |
CN110262881A (zh) * | 2019-06-12 | 2019-09-20 | 深圳前海微众银行股份有限公司 | 一种Spark作业的提交方法及装置 |
CN110764915A (zh) * | 2019-10-29 | 2020-02-07 | 西安邮电大学 | 一种针对kubernetes主节点选择的优化方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114741175A (zh) * | 2022-04-15 | 2022-07-12 | 支付宝(杭州)信息技术有限公司 | 任务执行方法、装置、中心节点和下游节点设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11226847B2 (en) | Implementing an application manifest in a node-specific manner using an intent-based orchestrator | |
CN112199194B (zh) | 基于容器集群的资源调度方法、装置、设备和存储介质 | |
CN103064742A (zh) | 一种hadoop集群的自动部署系统及方法 | |
US20230266999A1 (en) | Resource scheduling method, resource scheduling system, and device | |
CN111352717A (zh) | 一种实现kubernetes自定义调度器的方法 | |
WO2023045467A1 (zh) | 容器cpu资源调度与隔离方法和装置、存储介质及电子设备 | |
CN108491163B (zh) | 一种大数据处理方法、装置和存储介质 | |
CN115048205B (zh) | Etl调度平台及其部署方法、计算机可读存储介质 | |
US20220283846A1 (en) | Pod deployment method and apparatus | |
CN113382077B (zh) | 微服务调度方法、装置、计算机设备和存储介质 | |
CN102420709A (zh) | 一种基于任务框架的调度任务管理方法和设备 | |
CN111190691A (zh) | 适用于虚拟机的自动迁移方法、系统、装置及存储介质 | |
CN107025134B (zh) | 数据库服务系统及兼容多种数据库的方法 | |
CN112328403A (zh) | 一种SparkContext的配置方法、装置及服务端 | |
CN113867911A (zh) | 一种任务调度方法、设备及微服务系统 | |
CN112261125B (zh) | 集中单元的云化部署方法、装置及系统 | |
CN111078322A (zh) | 服务器及基于k8s集群的公共配置参数配置方法及系统 | |
CN113934711B (zh) | 一种自动化部署gbase8s集群的方法 | |
CN114579298A (zh) | 资源管理方法、资源管理器和计算机可读存储介质 | |
CN115426361A (zh) | 分布式客户端打包方法、装置、主服务器及存储介质 | |
CN110532000B (zh) | 一种用于运营发布的kbroker分布式操作系统和运营发布系统 | |
CN113806035A (zh) | 分布式调度方法及业务服务器 | |
CN115309400B (zh) | 任务部署方法、服务平台、部署平台、设备和存储介质 | |
CN112015515A (zh) | 一种虚拟网络功能的实例化方法及装置 | |
CN109995590A (zh) | 一种用户自定义设备数据处理服务托管方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |