spark集群的部署方法和装置
文献发布时间:2023-06-19 19:20:08
技术领域
本申请涉及计算机技术领域,尤其涉及一种spark集群的部署方法和装置。
背景技术
spark集群是一种分布式计算框架,可以用于大数据的分析与计算。spark onyarn是spark集群的一种部署方式,yarn可以是Hadoop集群的资源管理系统,为上层应用提供统一的资源管理和调度。Hadoop集群是对数据进行分布式处理的软件框架。
spark on yarn的spark集群的部署方法,在spark集群在节点扩容及缩容的时,存在操作繁琐且效率低下的问题。
发明内容
本申请实施例提供一种spark集群的部署方法和装置,用于避免spark集群在节点扩容及缩容时,带来的上述问题。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种spark集群的部署方法,包括:响应于spark集群的创建请求,获取所述spark集群的创建信息,所述创建信息包括所述spark集群的配置参数和用于部署所述spark集群的k8s子集群的基本信息;根据创建信息,在用于部署spark集群的k8s子集群上创建spark集群的操作组件,操作组件用于根据spark任务的任务量,在k8s子集群上创建用于执行spark任务的多个执行组件,多个执行组件运行在多个pod中。
本申请提供一种spark集群的部署方法,能够根据用户创建的spark集群的创建信息,在k8s子集群上创建spark集群的操作组件,操作组件能够根据用户创建的spark任务描述文件,在k8s子集群上创建spark任务,同时,根据spark任务的任务量灵活创建足够数量的执行组件。当任务量大的时候可以创建更多的执行组件,不用向spark集群中增加物理节点;当任务量少时可以创建较少的执行组件,不用剔除spark集群中的物理节点,避免了物理节点扩容缩容,也避免了扩容缩容带来的操作繁琐效率低下的问题。
可选地,操作组件还用于响应于spark任务描述文件的创建,根据spark任务描述文件,在k8s子集群上创建spark任务。该实现方式提供一种在k8s子集群上创建spark任务的实现方法。
可选地,方法还包括:根据创建信息,创建监控组件,监控组件用于监控多个执行组件的运行状态,当多个执行组件中部分执行组件运行异常时,监控组件还用于反馈状态异常信息。本申请提供一种spark集群的部署方法,在k8s子集群上创建spark集群时,可以创建监控组件,用于监控k8s子集群上spark组件的运行状态。
可选地,方法还包括:接收监控组件反馈状态异常信息;根据状态异常信息,修复或重新创建部分执行组件。本申请提供一种spark集群的部署方法,当组件运行异常时,能够进行异常组件的修复或重新创建,操作简单且高效,能够减少运维投入。
可选地,方法还包括:根据创建信息,在k8s子集群上创建历史服务组件及任务提交组件,其中,历史服务组件用于响应于spark任务的查询请求,获取已完成的spark任务的执行数据,任务提交组件用于响应于spark任务描述文件的创建,将spark任务描述文件提交至操作组件。本申请提供一种spark集群的部署方法,在k8s子集群上创建spark集群时,可以创建历史服务组件及任务提交组件,满足用户多种操作需求。
可选地,方法还包括:响应于spark集群的删除请求,删除部署在k8s子集群上的操作组件、历史服务组件、任务提交组件及监控组件。该实现方式提供一种删除spark集群的实现方法。
可选地,操作组件还用于根据spark任务,创建与spark任务对应的驱动组件,驱动组件用于创建多个执行组件。该实现方式提供一种在k8s子集群上创建执行组件的实现方法。
可选地,操作组件还用于响应于spark任务的删除请求,删除k8s子集群上的与spark任务对应的驱动组件。该实现方式提供一种删除spark任务的实现方法。
第二方面,提供了一种spark集群的部署装置,包括:获取单元,被配置为响应于spark集群的创建请求,获取spark集群的创建信息,创建信息包括spark集群的配置参数和用于部署spark集群的k8s子集群的基本信息;第一创建单元,被配置为根据创建信息,在用于部署spark集群的k8s子集群上创建spark集群的操作组件,操作组件用于根据spark任务的任务量,在k8s子集群上创建用于执行spark任务的多个执行组件,多个执行组件运行在多个pod中。
可选地,操作组件还用于响应于spark任务描述文件的创建,根据spark任务描述文件,在k8s子集群上创建spark任务。
可选地,装置还包括:第二创建单元,被配置为根据创建信息,创建监控组件,监控组件用于监控多个执行组件的运行状态,当多个执行组件中部分执行组件运行异常时,监控组件还用于反馈状态异常信息。
可选地,装置还包括:接收单元,被配置为接收监控组件反馈状态异常信息;第三创建单元,被配置为根据状态异常信息,修复或重新创建部分执行组件。
可选地,装置还包括:第四创建单元,被配置为根据创建信息,在k8s子集群上创建历史服务组件及任务提交组件,其中,历史服务组件用于响应于spark任务的查询请求,获取已完成的spark任务的执行数据,任务提交组件用于响应于spark任务描述文件的创建,将spark任务描述文件提交至操作组件。
可选地,装置还包括:删除单元,被配置为响应于spark集群的删除请求,删除部署在k8s子集群上的操作组件、历史服务组件、任务提交组件及监控组件。
可选地,操作组件还用于根据spark任务,创建与spark任务对应的驱动组件,驱动组件用于创建多个执行组件。
可选地,操作组件还用于响应于spark任务的删除请求,删除k8s子集群上的与spark任务对应的驱动组件。
第三方面,提供了一种电子设备,包括处理器和存储器,存储器中存储指令,当处理器执行指令时,如第一方面及其任一实施方式所述的方法被执行。
第四方面,提供了一种计算机可读存储介质,包括指令,当指令在电子设备上运行时,使得电子设备执行如第一方面及其任一实施方式所述的方法。
第五方面,提供了一种包含指令的计算机程序产品,当指令在上述电子设备上运行时,使得该电子设备执行如第一方面及其任一实施方式所述的方法。
第二方面至第五方面的技术效果参照第一方面及其任一实施方式的技术效果,在此不再重复。
附图说明
图1为本申请实施例提供的一种电子设备的结构示意图;
图2为本申请实施例提供的一种spark集群的部署方法的流程示意图;
图3为本申请实施例提供的一种用于部署spark集群的架构示意图;
图4为本申请实施例提供的另一种用于部署spark集群的架构示意图;
图5为本申请实施例提供的一种spark集群的部署装置的结构示意图。
具体实施方式
首先对本申请涉及的一些概念进行描述。
本申请实施例涉及的术语“第一”、“第二”等仅用于区分同一类型特征的目的,不能理解为用于指示相对重要性、数量、顺序等。
本申请实施例涉及的术语“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
spark集群是一种分布式计算框架,可以用于大数据的分析与计算。
Kuberntes(k8s)集群是一种开源的容器集群管理系统,可以用来管理云平台中多个主机或虚拟机上容器化的应用。在应用容器引擎(Docker)技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一些列完整的功能,提高了大规模容器集群管理的便捷性。
pod是k8s集群可以创建和管理的最小单元,pod内可以包括一个或多个容器,因此,pod也被称为容器集合。容器中可以运行应用程序的进程。pod可以是多进程设计,运行多个应用程序,也就是说,一个pod中可以包括多个容器,每个容器中运行一个应用程序的进程。
spark on yarn是spark集群的一种部署方式,yarn可以是Hadoop集群的资源管理系统,为上层应用提供统一的资源管理和调度。Hadoop集群是对数据进行分布式处理的软件框架,Hadoop集群通过分布式文件系统,存储Hadoop集群节点上的数据。spark on yarn的spark集群部署方式,将spark集群运行在Hadoop集群上,通过yarn管理spark任务的执行及资源调度。
Cloudera的Hadoop发行版(Cloudera’s distribution including apachehadoop,CDH)集群是Hadoop集群发行版的一种,是目前一套比较完整的、经过充分测试的Hadoop集群及其相关衍生组件的发行版。基于CDH可以自动化地在物理机上构建一套大数据平台。spark集群可以部署在CDH集群中的物理机上。
以spark on yarn的方式部署的spark集群在节点扩容及缩容时,操作繁琐且效率低下的问题。
作为一个示例,spark集群的扩容能力需要基于yarn来做扩容操作,而yarn需要依赖整个Hadoop生态系统。当向spark集群中新增一台物理节点时,首先需要在物理机上安装部署大量的Hadoop生态系统组件,该生态系统组件例如可以是datenode,zookeeper等一系列套件,之后基于Hadoop生态系统组件,修改一系列的配置文件,才能部署spark节点,提高了扩容成本的同时操作繁琐且效率低下。当需要删除spark集群中一台物理节点时,需要将节点从Hadoop集群中剔除,进行剔除操作时需要单台进行剔除。当节点上存在大量数据时,需要将数据同步至集群之后,才能删除节点上的系统组件。数据同步的过程极为缓慢,当集群内数据量大时甚至需要数天时间才可完成数据同步。这就导致spark集群的缩容不便,时间缓慢且效率低下。
为例解决上述问题,本申请实施例提供一种spark集群的部署方法,能够根据用户创建的spark集群的创建信息,在k8s子集群上创建spark集群的操作组件,操作组件能够根据用户创建的spark任务描述文件,在k8s子集群上创建spark任务,同时,根据spark任务的任务量灵活创建足够数量的执行组件。当任务量大的时候可以创建更多的执行组件,不用向spark集群中增加物理节点;当任务量少时可以创建较少的执行组件,不用剔除spark集群中的物理节点,避免了物理节点扩容缩容,也避免了扩容缩容带来的操作繁琐效率低下的问题。
本申请实施例提供的一种spark集群的部署方法可以应用于具备数据处理能力的电子设备。电子设备可以包括服务器、手机、平板电脑、笔记本电脑、个人电脑(personalcomputer,PC)、超级移动个人计算机(ultra-mobile personal computer,UMPC)、手持计算机、上网本、个人数字助理(personal digital assistant,PDA)、车载设备、虚拟现实设备等,本申请实施例对此不做任何限制。在本申请实施例中,上述电子设备是可以运行操作系统,安装应用程序的电子设备。可选地,电子设备运行的操作系统可以是
示例性的,请参考图1,其示出了一种电子设备100的结构示意图,电子设备100可以是一种作业工序识别装置。电子设备100可以包括存储器110和处理器120。存储器110用于存储可执行指令。处理器120可以执行存储在存储器110中的指令,以实现如下文描述的各个方法中的步骤。在一些实施例中,电子设备100还可以包括通信接口130,处理器120与外部设备的数据交换可以通过该通信接口130。
处理器120可以是一个芯片。例如,可以是现场可编程门阵列(fieldprogrammable gate array,FPGA)、专用集成芯片(application specific integratedcircuit,ASIC)片上系统(system on chip,SoC)、中央处理器(central processor unit,CPU)、网络处理器(network processor,NP)、数字信号处理电路(digital signalprocessor,DSP)、微控制器(micro controller unit,MCU)、可编程控制器(programmablelogic device,PLD)或其他集成芯片。
存储器110可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DRRAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
以下实施例以电子设备100为服务器为例,介绍本申请实施例提供的spark集群的部署方法。图2为本申请实施例提供的一种spark集群的部署方法的流程示意图,图2所示的方法可以由电子设备100执行,电子设备100可以包括一台服务器,也可以包括多台服务器,在一些实施例中,多台服务器位于同一k8s主集群(host k8s)中。
S201,响应于spark集群的创建请求,获取spark集群的创建信息。
响应于用户创建spark集群的创建请求,获取由用户创建的spark集群的创建信息。
创建信息包括用于部署该spark集群的k8s子集群的基本信息及spark集群的配置参数。创建信息例如可以由spark-CMR.yaml文件描述,spark-CMR.yaml文件描述了k8s子集群的基础信息及spark集群的配置参数。
spark集群的配置参数例如可以是spark集群名称、spark集群类型、对象存储桶(cos-buceket)参数等配置参数。k8s子集群的基本信息例如可以包括用于部署该spark集群的k8s子集群的集群名称。
用户可以在spark集群客户端中的spark集群管理界面上输入spark集群的创建信息,spark集群客户端可以位于手机、平板电脑、笔记本电脑、个人电脑(personalcomputer,PC)、超级移动个人计算机(ultra-mobile personal computer,UMPC)、手持计算机、上网本、个人数字助理(personal digital assistant,PDA)、车载设备、虚拟现实设备等电子设备上,用户可以在上述任意一种电子设备上,登录spark集群客户端,并创建spark集群。
spark集群管理界面可以包括spark集群创建页面,用户可以在创建页面创建spark集群。作为一个示例,用户可以在spark集群创建页面点击“新建集群”按钮,在弹出的对话框中输入spark集群名称、spark集群类型、所属k8s子集群名称及cos-buceket等配置参数之后,点击创建按钮,完成创建信息的创建。作为另一个示例,用户在登录spark集群管理界面之后,在spark集群创建页面点击“新建集群”按钮,创建界面上可以弹出预设的用于部署spark集群的k8s子集群表单。用户可以查看k8s子集群表单中的k8s子集群,选择其中一个k8s子集群并填写在其上创建spark集群的配置参数,点击“确定”按钮,完成创建信息的创建并启动spark集群创建流程。
spark集群管理界面可以由用户界面组件(ser interface module,UI)实现。UI组件可以用于实现云原生spark产品的用户界面,用于用户登录认证、向用户提供spark集群管理、spark任务管理等功能。
S202,根据创建信息,在用于部署spark集群的k8s子集群上创建spark集群的操作组件。
根据创建信息,在指定的k8s集群上创建spark集群的操作组件(operator组件)。例如,响应于用户在spark集群创建页面点击“确定”按钮,触发kubectl apply-f spark-CMR.yaml命令。根据spark-CMR.yaml文件,在spark-CMR.yaml文件中指定的k8s子集群上,根据spark集群的配置参数创建spark集群的操作组件。
应当理解,在创建spark集群的操作组件时,还会创建其他spark组件,操作组件及其他spark组件构成spark集群,完成spark集群的数据处理功能。也就是说,在k8s子集群上创建spark集群,可以理解为在k8s子集群上创建多个spark组件,多个spark组件可以完成spark集群的数据处理功能。
操作组件用于根据spark任务的任务量,在用于部署spark集群的k8s子集群上,创建多个执行组件(executor),多个执行组件运行在多个pod中。
spark任务的任务量例如可以包括执行spark任务需要处理的数据量、运算次数、任务完成时间等。
以任务量为要处理的数据量为例,操作组件可以根据数据量,确定执行该spark任务的执行组件的个数。作为一个示例,操作组件可以根据数据量计算执行该计算量所需的cores的个数,core是CPU的基本计算单元,一个CPU可以由一个或多个cores用于执行spark任务。之后,根据k8s集群中每个节点上的core数量及每个执行组件可运行的core的数量,计算每个节点上的需要创建的执行组件的数量及执行组件占用内存的资源大小。
每个执行组件用于执行spark任务中一个子任务,多个执行组件协同完成spark任务。也就是说,可以根据spark任务的任务量,将spark任务拆分为多个子任务,其中,每个子任务由一个执行组件执行。多个执行组件运行在k8s子集群中多个pod中,作为一个示例,可以在k8s子集群创建多个执行pod,每个执行pod可以运行一个执行组件。当spark任务执行完之后,多个执行pod可以自动删除,无需人工介入,自动释放计算存储资源。
在一些实施例中,操作组件可以根据spark任务在k8s集群上创建驱动组件,驱动组件可以是k8s集群中的驱动pod(driver pod)。驱动单元可以根据spark任务的任务量及k8s集群资源,创建执行组件。例如,驱动单元可以根据spark任务的任务量及k8s集群资源确定执行组件的数量、执行组件在k8s集群上的分布、执行组件的副本量等。驱动单元还可以收集各个执行组件的运算结果,并汇总至操作组件。
操作组件可以为多个spark任务创建多个驱动组件,多个驱动组件与多个spark任务一一对应。每个驱动组件可以为与之对应的spark任务创建用于执行对应任务的多个执行组件。
spark任务的任务量还可以包括运算次数,对于运算量为1000次的spark任务,驱动单元可以创建5个执行组件,每个执行组件执行200次运算,并依次计算。驱动单元可以收集上一个执行组件的计算结果作为下一个执行组件的输入,依次完成运算之后,驱动单元还会收集总的计算结果并汇总至操作组件。
对于运算量为100次的spark任务,操作组件可以通过驱动单元创建1个执行组件,以执行该spark任务;对于运算量为10000次spark任务,操作组件可以通过驱动单元创建50个执行组件,以执行该spark任务,也就是说,操作组件可以根据spark任务的任务量灵活创建足够数量的执行组件以执行任务。当任务量大时,可以多创建执行组件,当任务量少时,可以少创建执行组件。
可见,本申请能够根据用户创建的spark集群的创建信息,在k8s子集群上创建spark集群的操作组件,操作组件能够根据用户创建的spark任务描述文件,在k8s子集群上创建spark任务,同时,根据spark任务的任务量灵活创建足够数量的执行组件。当任务量大的时候可以创建更多的执行组件,不用向spark集群中增加物理节点;当任务量少时,可以创建较少的执行组件,也不用剔除spark集群中的物理节点,避免了节点扩容缩容带来的操作繁琐效率低下的问题。
在spark集群部署完成之后,操作组件还可以根据spark任务描述文件,在k8s子集群上创建spark任务。
spark任务描述文件用于描述spark任务,可以由用户编写。spark任务又可以称为spark作业。spark任务描述文件例如可以是sparkapplication.yaml,spark任务例如可以是sparkapplication,sparkapplication.yaml文件中描述了sparkapplication。
作为一个示例,用户可以在前文中的spark集群管理界面选择一个spark集群,并在该spark集群下的任务管理页面上点击“提交任务”按钮,在弹出的对话框输入spark任务描述文件的内容或者上传已经编写好的spark任务描述文件。之后,点击“确定”按钮,完成spark任务描述文件的创建。响应于spark任务描述文件的创建,触发kubectl apply-fsparkapplication.yam命令,操作组件根据用户创建的sparkapplication.yaml,在k8s集群上创建sparkapplication任务。操作组件拉起(即创建)驱动pod及执行pod,执行该sparkapplication任务。
如前文提到,本申请实施例提供的spark集群的部署方法,可以由电子设备100执行,电子设备100可以是k8s主集群(host k8s)中的一台或多台服务器。k8s主集群中任意一台服务器上可以部署有云映射规约组件(cloud map reduce,CMR),CMR组件可以用于处理用户的集群创建请求(spark custom resource),CMR组件可以用于根据用户创建的spark集群的集群创建信息,在相应的k8s子集群上创建spark集群的操作单元。k8s主集群中还部署有前文中的UI组件,用于实现云原生spark产品的用户界面,用于用户登录认证、向用户提供spark集群管理、spark任务管理等功能。
在根据创建信息,在k8s子集群上创建操作组件时,还可以根据创建信信息,在k8s主集群上创建监控组件。监控组件部署在k8s主集群上,具体的,监控组件可以部署在k8s主集群中任一台服务器上。
监控组件可以监控多个执行组件的运行状态,当多个执行组件中部分执行组件运行异常时,监控组件可以反馈状态异常信息。状态异常信息包括异常的执行组件的数量、异常现象、运行状态等。电子设备100在接收到上述状态异常信息之后,可以修复部分执行组件,使其正常运行,或重新创建这部分异常的执行组件。常规的spark集群,当spark组件出现问题时,需要人工重新创建组件,较严重的问题时,需要将部署该组件的物理机从集群中剔除,待物理机上的组件修复完成之后在加入集群,涉及扩容缩容等较复杂的操作。本申请能够有监控组件监控spark组件的运行状态,当组件运行异常时,能够进行异常组件的修复或重新创建,操作简单且高效,能够减少90%以上的运维投入。
在根据创建信息,在k8s子集群上创建操作组件时,还可以根据创建信息,在k8s子集群上创建历史服务组件及任务提交组件。
历史服务(history server)组件可以实现已完成的spark任务的执行情况的查看。作为一个示例,历史服务组件可以读取k8s子集群中已经执行的spark任务的执行日志数据。spark集群管理界面可以包括任务管理界面,用户管理界面列出来k8s子集群中已经完成spark任务的基本信息。基本信息可以包括任务名称、任务类型、任务状态、创建时间、结束时间等。用户可以在任务列表中选择一个spark任务,点击“查询”按钮,响应于用户的查询操作,历史服务组件可以读取该spark任务的执行日志数据,并在任务管理界面显示。
任务提交(Submit Gateway,SGW)组件可以实现spark任务的提交,例如以传统spark-submit方式提交spark任务。如前文提到,用户spark集群管理界面上提交任务之后,触发kubectl apply-f sparkapplication.yam命令,响应于用户创建spark描述文件,任务提交组件根据spark描述文件将任务提交至操作组件,以使操作组件根据所述任务描述文件生成spark任务。
响应于spark集群的删除请求,电子设备100可以删除部署在k8s子集群上的spark组件,spark组件包括前文中的操作组件、历史服务组件及任务提交组件,以及用于监视k8s子集群上的spark组件的监视组件。
作为一个示例,spark集群管理界面可以展示已创建的spark集群信息,spark集群信息例如可以包括集群名称、集群状态、cpu使用率、内存用量、集群类型、创建时间及所属k8s子集群等。用户可以在集群管理界面查看已创建的spark集群,选择一个spark集群,并点击“删除”按钮。响应于用户操作,触发kubectl delete-f spark-CMR.yaml命令,电子设备100上的CMR组件可以删除部署该spark集群的k8s子集群上的所有spark组件、及用于监控spark组件的监控组件。
响应于spark任务的删除请求,电子设备100可以删除部署在k8s子集群上的与该任务对应的驱动组件。在k8s集群上创建spark任务时,可为每个spark任务创建驱动组件,因此在删除spark任务是,需要删除与待删除spark任务对应的驱动组件。
作为一个示例,用户可以在spark集群管理端的任务管理界面中,在任务列表中选择一个spark任务,该spark任务可以是已经执行完成的任务,也可以是正在执行的任务,还可以是已创建但未执行的任务。用户可以点击“删除”按钮,删除选中的spark任务。响应于用户操作,触发kubectl delete-f sparkapplication.yaml命令,操作组件可以删除与待删除spark任务对应的驱动组件。
下面结合图3,对本申请实施例提供的部署架构进行介绍。k8s主集群上可以部署有UI组件、CMR组件、monitor组件及后端组件,k8s主集群上的spark组件可以实现与用户交互的功能、与k8s子集群(guest K8S)交互的功能。
后端组件(Backend)可以接收UI组件传输的由用户创建的spark集群的创建信息,生成用于描述创建信息的spark-CMR.yaml文件。后端组件可以执行spark-CMR.yaml文件,以使CMR组件根据spark-CMR.yaml文件,在文件中描述的k8s子集群上创建spark集群。
监控组件可以访问k8s子集群并监控其上各个spark组件的健康状态。当监控组件发现组件缺失或者健康状态异常时,能够向CMR组件反馈异常信息。响应于接收到监控组件反馈的异常信息,CMR组件可以创建或修复异常的spark组件。监控组件可以通过Restful接口访问k8s子集群并监控其上的各spark组件,各spark组件包括位于k8s子集群上的多个执行组件。
k8s子集群上可以部署有操作组件、历史服务组件及任务提交组件,这三个组件前文已经介绍,此处暂不赘述。
从图3中可以看出,CMR组件可以根据多个的创建信息,在多个的k8s子集群上创建spark组件。也就是说,一个k8s主集群可以对应多个k8s子集群。作为一个示例,用户需要创建3个的spark集群,CMR组件可以根据由用户创建的3个spark子集群创建信息,在3个k8s子集群上对应创建3个spark集群的spark组件。每个spark组件中包括操作组件、历史服务组件及任务提交组件。同时,可以为每一个spark子集群在k8s主集群上,创建监控组件,用于监控每一个k8s子集群上的spark组件。
k8s主集群中的UI组件、CMR组件、监控组件,后端组件、可以部署在k8s主集群中的任意一台服务器上。上述组件可以部署在同一台服务器上,也可以分开部署在不同服务器上,本申请对此不作限定。同样,k8s子集群中的操作组件、历史服务组件、任务提交组件可以部署在k8s子集群中的任意一台服务器上。上述组件可以部署在同一台服务器上,也可以分开部署在不同服务器上。示例性,图4提供了一种组件部署方式。
如图4所示,k8s主集群可以包括3个物理节点(即3台服务器)。UI组件及后端组件可以运行在节点1上的pod中,CMR组件及监视组件1可以运行在节点2上的pod中,监控组件2及监控组件3可以运行在节点3上的pod中。
k8s主集群可以对应多个k8s子集群,每个k8s子集群部署一套spark集群,以k8s子集群1为例,可以包括3个物理节点。如图4所示k8s子集群1中有两份pod用于运行spark组件。操作组件、任务提交组件可以运行在节点1上的pod中,操作组件、历史服务组件可以运行在节点2上的副本pod中,历史服务组件可以运行在节点3上的pod中、任务提交组件可以运行在节点3上的副本pod中。多副本运行有利于维护系统的稳定性。
基于传统的spark集群监控运维存在几个缺点,其一在spark集群内集成任务查看界面较为复杂,用户需要掌握一定的spark知识;其二spark集群缺乏对机器的性能监控指标,目前依赖于CDH中的管理组件例如(cloudera manager,CM组件)来实现对于整个集群服务器的性能监控。
为解决上述问题,可以在k8s子集群部署系统监控报警组件,例如Prometheus组件,Prometheus组件可以用于监控部署spark集群的k8s子集群的服务器的性能。无需额外依赖管理组件例如(cloudera Manager,CM组件),使用云原生的监控方式监控spark集群的运行状态情况。
传统的spark集群部署在物理机上,当需要扩容时,操作繁琐,不仅要安装一系列Hadoop生态插件,还要配置新节点的参数。例如,首先要停止spark集群,添加新节点并为新节点增加与已有集群相同的用户名,修改一系列配置参数,格式化新的名称之后才能加入集群,新主机加入集群之后还需要进行集群的负载均衡。本申请能够将spark集群部署在k8s集群中,以pod的方式处理spark任务,操作组件可以根据spark任务量创建足够数量的执行pod执行spark任务。在执行为spark任务之后,还可以自动删除执行pod。理论上具有无线的扩容空间,无需人工扩容及缩容,节省了大量的运维时间。同时,通过监控组件,CMR组件,后端组件等spark组件的相互配合,实现spark集群的状态监控和出问题时的自动修复,节省故障处理等方面的运维工作。
下面结合图5,详细介绍本申请的装置实施例。应理解,装置实施例的描述与方法实施例的描述相互对应,因此未详细介绍的部分可以参见前文的方法实施例。
图5为本申请实施例提供的一种spark集群的部署装置的结构示意图,图5所示的spark集群的部署装置500可以包括获取单元501、第一创建单元502,下面对各个单元进行介绍。
获取单元501,被配置为响应于spark集群的创建请求,获取spark集群的创建信息,创建信息包括spark集群的配置参数和用于部署spark集群的k8s子集群的基本信息;
第一创建单元502,被配置为根据创建信息,在用于部署spark集群的k8s子集群上创建spark集群的操作组件,操作组件用于根据spark任务的任务量,在k8s子集群上创建用于执行spark任务的多个执行组件,多个执行组件运行在多个pod中。
可选地,操作组件还用于响应于spark任务描述文件的创建,根据spark任务描述文件,在k8s子集群上创建spark任务。
可选地,装置还包括:第二创建单元,被配置为根据创建信息,创建监控组件,监控组件用于监控多个执行组件的运行状态,当多个执行组件中部分执行组件运行异常时,监控组件还用于反馈状态异常信息。
可选地,装置还包括:接收单元,被配置为接收监控组件反馈状态异常信息;第三创建单元,被配置为根据状态异常信息,修复或重新创建部分执行组件。
可选地,装置还包括:第四创建单元,被配置为根据创建信息,在k8s子集群上创建历史服务组件及任务提交组件,其中,历史服务组件用于响应于spark任务的查询请求,获取已完成的spark任务的执行数据,任务提交组件用于响应于spark任务描述文件的创建,将spark任务描述文件提交至操作组件。
可选地,装置还包括:删除单元,被配置为响应于spark集群的删除请求,删除部署在k8s子集群上的操作组件、历史服务组件、任务提交组件及监控组件。
可选地,操作组件还用于根据spark任务,创建与spark任务对应的驱动组件,驱动组件用于创建多个执行组件。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括指令,当指令在上述电子设备100上运行时,使得该电子设备100执行上述方法实施例中的各个步骤,例如执行图2所示的方法。
本申请实施例还提供一种包括指令的计算机程序产品,当指令在上述电子设备100上运行时,使得该电子设备100执行上述方法实施例中的各个步骤,例如执行图2所示的方法。
关于芯片系统、计算机可读存储介质、计算机程序产品的技术效果参照前面方法实施例的技术效果。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个设备,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个设备,或者也可以分布到多个设备上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个设备中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个设备中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
- 一种自动部署集群测试主机的处理方法及装置
- 一种基于Docker一键部署大数据平台的方法和装置
- 大数据平台的部署方法及装置
- 一种防火墙部署方法及装置
- 一种在云平台部署Spark集群的装置和方法
- 一种在云平台部署Spark集群的装置和方法