一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

面向多K8s集群的Spark协同计算、作业方法及装置与流程

2022-10-26 18:29:11 来源:中国专利 TAG:
面向多k8s集群的spark协同计算、作业方法及装置
技术领域
:1.本发明涉及云计算和大数据
技术领域
:,尤其是涉及面向多k8s集群的spark协同计算、作业方法及装置。
背景技术
::2.apachespark是专为大规模数据处理而设计的快速通用的计算引擎,2009年,spark诞生于加州大学伯克利分校的amp实验室(thealgorithms,machinesandpeoplelab),并于2010年开源。2013年,spark捐献给阿帕奇软件基金会(apachesoftwarefoundation),并于2014年成为apache顶级项目。如今,spark成为了大大小小企业与研究机构的常用工具之一,spark平台所累积的成熟应用已经成为数据行业重要的资产。3.kubernetes是开源的容器调度编排平台,由于kubernetes适用服务抽象支持命名和负载均衡,并且通过标签组织多容器调度单元pod,实现了较好的灵活性、可用性和负载均衡性。因此,在云原生技术发展的浪潮之中,kubernetes伴随着容器技术的发展,成为了目前云时代的操作系统。kubernetes作为容器编排领域的事实标准和云原生领域的关键项目,已经是云原生时代工程师最需要理解与实践的核心技术。4.大数据、大模型的智能计算为代表的复杂应用的出现,使得单集群资源很难胜任超大型、复杂的计算任务,尤其是大数据相关的复杂计算任务,需要规模较大数据中心。然而数据中心缺少弹性能力,为保证业务应对突发请求等情况,普遍存在资源浪费情况。目前的多kubernetes集群多采用联邦集群的模式,spark自身的调度和优化的方法不能跨域实现。技术实现要素:5.为解决现有技术的不足,实现多集群的算力有效的协同在一起处理复杂spark计算任务的目的,本发明采用如下的技术方案:一种面向多集群的协同作业方法,应用于协同中心,包括如下步骤:步骤s101:根据用户提交的作业状态信息,指定主集群和从集群;作业是指用户在一次解决或是一个事务处理过程中要求计算系统所做的工作的集合,它包括用户程序、所需要的数据集控制命令等。作业是由一系列有序的步骤组成的,在执行一个作业会涉及多个网络节点上的计算、存储等;作业状态信息包括用户选择的策略和计算资源、数据存储等状态信息;步骤s102:向主集群发送作业描述文件,以使主集群建立驱动器单元;向从集群提交作业描述文件,以使从集群建立从集群执行器单元;步骤s103:向主集群发送驱动器单元注册信息,以完成驱动器单元在协同中心的注册,使从集群向注册的驱动器单元发送注册信息,以完成从集群执行器单元在驱动器单元的注册,使注册的从集群执行器单元执行主集群发送的作业;步骤s104:作业执行完成后,释放执行作业所占用的资源。6.进一步地,所述步骤s101中,协同中心根据用户提交的作业状态信息判断是否单集群作业,若是,则选择单集群执行业务,执行完成后释放占用的资源,否则指定主集群和从集群,并执行步骤s102。7.进一步地,所述步骤s102中,向主集群提交作业描述文件,以使主集群启动作业后,还建立了主集群执行器单元;步骤s103中,向主集群发送驱动器单元注册信息,以完成驱动器单元在协同中心的注册后,还使主集群执行器单元向注册的驱动器单元发送注册信息,以完成主集群执行器单元在驱动器单元的注册,使注册的主集群执行器单元执行主集群发送的作业。8.进一步地,所述步骤s103中,协同中心向主集群发送驱动器单元注册信息的同时,还向主集群发送反向代理启动请求,并通过从集群执行器单元建立的反馈信息,使驱动器单元确定从集群执行器单元的建立信息,生效反向代理单元,以使从集群发送从集群执行器单元的地址和凭证信息,向主集群的反向代理单元进行连接,若连接成功,则向驱动器单元发送注册信息,以完成从集群执行器单元在驱动器单元的注册。9.基于反向代理实现自定义协议,实现单一计算任务下,跨域集群的直接通信,该方法避免了通过第三方的转发,实现高效通信。10.进一步地,所述步骤s103中,以使从集群向注册的驱动器单元发送注册信息的同时,还发送心跳报文,使得主集群根据从集群的注册信息和心跳报文判断连接是否成功,若均收到,则连接成功,发送作业;否则,连接失败,继续等待。11.一种面向多集群的协同作业装置,包括作业接口模块、作业指派模块和资源接口模块,所述作业指派模块包括集群指定模块、作业描述文件下发模块、注册信息下发模块和资源释放模块;所述作业接口模块,用于获取用户提交的作业;所述集群指定模块,根据用户提交的作业状态信息,指定主集群和从集群;所述作业描述文件下发模块,向主集群发送作业描述文件,以使主集群建立驱动器单元;向从集群提交作业描述文件,以使从集群建立从集群执行器单元;所述注册信息下发模块,向主集群发送驱动器单元注册信息,以完成驱动器单元在协同中心的注册,使从集群向注册的驱动器单元发送注册信息,以完成从集群执行器单元在驱动器单元的注册,使注册的从集群执行器单元执行主集群发送的作业;所述资源释放模块,用于作业执行完成后释放占用的资源;所述资源接口模块,用于获取各集群的资源状态。12.一种面向多集群的协同作业方法,应用于主集群,包括如下步骤:步骤s201:获取协同中心发送的作业描述文件,建立驱动器单元;步骤s202:获取驱动器单元注册信息,完成驱动器单元在协同中心的注册,通过注册的驱动器单元,获取从集群执行器单元发送的注册信息,完成从集群执行器单元在驱动器单元的注册,所述从集群执行器,是从集群根据协同中心的作业描述文件建立的;步骤s203:向注册的从集群发送作业,以使注册的从集群执行器单元执行作业。13.一种面向多集群的协同作业方法,应用于从集群,包括如下步骤:步骤s301:获取协同中心发送的作业描述文件,建立从集群执行器单元;步骤s302:向注册的驱动器单元发送注册信息,完成从集群执行器单元在驱动器单元的注册;所述驱动器单元,是主集群根据协同中心的作业描述文件建立的;所述驱动器单元的注册,是根据协同中心发送的驱动器单元注册信息,在协同中心完成的注册;步骤s303:获取主集群发送的作业,并通过从集群执行器单元执行作业。14.一种面向多k8s集群的spark协同计算方法,应用于协同中心,包括如下步骤:步骤s401:根据用户提交的计算引擎spark的作业状态信息,指定k8s主集群和k8s从集群;步骤s402:向k8s主集群的k8sapi接口发送作业描述的yaml文件,以使k8s主集群收到计算引擎spark的提交请求后,调用spark-submit(为任务提交指令)指令启动作业,建立单个spark驱动器单元;向多个k8s从集群提交作业描述的yaml文件,以使k8s从集群建立从集群spark执行器单元;实现单一sparkdriver利用不同kubernetes集群的计算资源完成计算任务,不同于基于kubernetesfed的实现方法,本方法不会产生多个sparkdriver,实现多集群的资源对spark的计算流程透明化;步骤s403:向k8s主集群发送spark驱动器单元注册信息,以完成spark驱动器单元在协同中心的注册,使k8s从集群向注册的spark驱动器单元发送注册信息,以完成从集群spark执行器单元在spark驱动器单元的注册,使注册的从集群spark执行器单元,在spark驱动器单元的配置下,执行k8s主集群发送的作业;步骤s404:作业执行完成后,释放执行作业所占用的资源。15.一种面向多k8s集群的spark协同计算装置,包括作业接口模块、作业指派模块和资源接口模块,所述作业指派模块包括k8s集群指定模块、作业描述yaml文件下发模块、注册信息下发模块和资源释放模块;所述作业接口模块,用于获取用户提交的作业;所述k8s集群指定模块,根据用户提交的计算引擎spark的作业状态信息,指定k8s主集群和k8s从集群;所述作业描述yaml文件下发模块,向k8s主集群的k8sapi接口发送作业描述的yaml文件,以使k8s主集群收到计算引擎spark的提交请求后,调用spark-submit指令启动作业,建立单个spark驱动器单元;向多个k8s从集群提交作业描述的yaml文件,以使k8s从集群建立从集群spark执行器单元;实现单一sparkdriver利用不同kubernetes集群的计算资源完成计算任务,不同于基于kubernetesfed的实现方法,本方法不会产生多个sparkdriver,实现多集群的资源对spark的计算流程透明化;所述注册信息下发模块,向k8s主集群发送spark驱动器单元注册信息,以完成spark驱动器单元在协同中心的注册,使k8s从集群向注册的spark驱动器单元发送注册信息,以完成从集群spark执行器单元在spark驱动器单元的注册,使注册的从集群spark执行器单元,在spark驱动器单元的配置下,执行k8s主集群发送的作业;所述资源释放模块,作业执行完成后,释放执行作业所占用的资源;所述资源接口模块,用于获取各集群的资源状态。16.本发明的优势和有益效果在于:本发明的面向多k8s集群的spark协同计算、作业方法及装置,通过单一spark驱动器单元,利用多个不同kubernetes从集群的计算资源,完成计算任务,不同于现有技术,本发明不会产生多个驱动器单元,实现多集群的资源,对spark的计算流程透明化;从而实现了多集群的算力有效的协同在一起处理复杂spark计算任务。附图说明17.图1a是本发明实施例中一种面向多k8s集群的spark协同作业方法的架构图。18.图1b是本发明的一种面向多k8s集群的spark协同作业方法的流程图。19.图2是本发明实施例中一种面向多k8s集群的spark协同作业装置的结构示意图。20.图3是本发明的一种面向多集群的协同作业方法应用于协同中心的流程图。21.图4是本发明的一种面向多集群的协同作业装置的结构示意图。22.图5是本发明的一种面向多集群的协同作业方法应用于主集群的流程图。23.图6是本发明的一种面向多集群的协同作业方法应用于从集群的流程图。24.图7是本发明的一种面向多集群的协同作业设备的结构示意图。具体实施方式25.以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。26.如图1a、图1b所示,本发明一种面向多k8s集群的spark协同作业方法,是基于kubernetesapi资源构建的operator工具,管理和监控部署应用程序。operator可以看作是一种解决复杂应用容器化问题的模式。利用operator定制资源管理应用及其组件,用户可以对复杂的有状态应用,进行创建、配置和管理。operator遵循kubernetes声明式api和controller的设计理念,被用来扩展kubernetesapi。operator基于kubernetes的资源和控制器概念之上构建,但同时又包含了spark特定的领域知识。本发明的具体实施方案,包括跨集群的通信隧道的建立、主集群driverpod创立、从集群executorpod创立、从集群executorpod的注册、主集群driverpod任务下发等过程,其中,c表示协同中心,m表示k8s主集群或k8s单集群,s表示k8s从集群,具体包括如下步骤:步骤s1:将用户的spark应用提交到协同中心;步骤s2:协同中心根据用户选择的策略和计算资源、数据存储等状态信息,判断是否为k8s单集群完成,如果是,则协同中心选择合适的k8s集群部署当前的spark应用;如果需要多集群协同完成,则跳转到步骤s3;步骤s3:协同中心根据用户选择的策略、计算资源、数据存储的状态,指定1个k8s主集群、1个或多个k8s从集群;具体地,跨集群通信隧道建立采用路由表机制和vxlan(virtualextensiblelan,可扩展虚拟局域网络)机制构建跨集群通信隧道。通过在pod构建vtep(vxlantunnelendpoint)称为vxlan隧道的起点和终点,通过vni(virtualnetworkinfrastructure,虚拟网络基础设施)构建了不同用户的封装机制,实现了安全通信。基于vxlan发送报文的过程如下所示:开始输入:需要跨域发送的消息msg输出:创建成功或失败状态setiptablerule(targetip)#设置路由表规则,报文到达vtep起点packet=setupipoverip(msg)#构建ipoverip报文sendpacket(package)#发送到目的集群vtep终点msg=getoriginalip(package)#恢复ip报文,发送给容器status=getstatus()#获取通信状态结束步骤s4:协同中心向主集群apiserver提交作业描述的yaml文件,主集群收到spark的提交请求,调用spark-submit启动作业,建立sparkdriver类pod和sparkexecutor的pods;主集群向协同中心发送两类pods的地址信息、证书信息;图1a中建立两类sparkpods即建立sparkdriver类pod和sparkexecutor的pods,即主集群建立驱动器单元和从集群执行器单元;pod是k8s的最小单元,容器包含在pod中,即pod是一组容器的集合;具体地,主集群driverpod的创立主集群driverpod的创建基于k8s的客户端client的机制,client与apiserver进行通信,输入参数完成driverpod的创建过程。client实际上是https的客户端,对于pod创建、删除、容器创建等实际上都是由apiserver来负责的,如果控制器controller相要完成这些动作,唯一的通路就是创建https,并向apiserver发送请求;client机制的过程如下所示:开始输入:driver容器配置,driverpod的配置输出:创建成功或失败的状态drivercontainer=createcontainer()#构建buildthecontainer容器参数driverpod=createpod()#构建buildthepod单元参数sid=serializesend(drivercontainer,driverpod)#序列化并发送apiserverwaituntilstoppedorfailedstatus=getstatus()#获取创建状态结束步骤s5:从集群收到作业描述信息(以yaml文件描述),建立sparkexecutorpods;将同意(或拒绝)应答发送给协同中心;具体地,从集群executorpod创立:从集群executorpod的创立过程类似于主集群driverpod创立过程。从集群从协同中心获取executorpod的配置信息和容器,创建相应的executorpod。27.开始输入:创建executorpod和容器指令输出:创建成功或失败的状态arg=getargument()#从协同中心获取executorpod参数drivercontainer=createcontainer()#构建buildthecontainer容器参数driverpod=createpod()#构建buildthepod单元参数sid=serializesend(drivercontainer,driverpod)#序列化并发送apiserverwaituntilstoppedorfailedstatus=getstatus()#获取创建状态结束步骤s6:协同中心向主集群发送sparkdriver注册信息,并发送启动reverseproxy的请求;此时driver确定了此次作业的executors的数量。通过已经部署的reverseproxy,生效reverseproxy;步骤s7:从集群发送的地址信息和证书信息,向主集群的reverseproxy进行连接,如连接成功,发送executors的注册信息,并且发送心跳报文;步骤s8:主集群判断是否收到所有从集群注册信息和心跳报文,如果收到,则连接成功,跳转步骤s9;如果未收到,则继续等待;具体地,从集群executor容器注册在executorpod创建成功后,executorpod中的容器通过向driver容器发送heartbeat报文,确认和driverpod建立通信链路。发送容器的资源信息和访问凭证提供给driver,完成executor容器和driver的注册过程开始输入:向driver进行注册命令输出:注册成功或失败状态resource=getresource()#获取容器自身的静态资源配置credentials=getcredentials()#获取容器的访问凭证driver=getdriver()#获取driver的urlsendheartbeat(driver)#发送心跳报文sid=serializesend(driver,resource,credentials)#序列化资源和凭证信息,发送给driverwaituntilstoppedorfailedstatus=getstatus()#获取注册完成状态结束步骤s9:主集群向所有集群的executors发送task;具体地,主集群driver容器任务指派和调度在从集群容器注册成功后,主集群的driver进入指派任务task流程。由于不同集群所存储的数据存在差异,尽量将任务基于数据的存储位置进行指派和调度。28.开始输入:task指派开始指令输出:指派成功或视频状态task=gettask()#driver获取任务executors=getexecutors()#drvier获取executor容器列表forexeinexecutors:#针对每个容器getcredential(exe)#获取访问凭证serializesend(exe,task,credential)#task序列化并发送给executor容器waituntilstoppedorfailedstatus=getstatus()#获取访问状态结束步骤s10:主集群和从集群开始在driver的配置下执行作业,如果作业执行完成,协同中心通知释放资源;如图2所示,一种面向多k8s集群的spark协同计算装置,包括作业接口模块、作业指派模块和资源接口模块,作业指派模块包括k8s集群指定模块、作业描述yaml文件下发模块、注册信息下发模块和资源释放模块;作业接口模块,用于获取用户提交的作业;k8s集群指定模块,根据用户提交的计算引擎spark的作业状态信息,指定k8s主集群和k8s从集群;作业描述yaml文件下发模块,向k8s主集群的k8sapi接口发送作业描述的yaml文件,以使k8s主集群收到计算引擎spark的提交请求后,调用spark-submit指令启动作业,建立单个spark驱动器单元和一组spark执行器单元,反馈spark驱动器单元和spark执行器单元地址;向多个k8s从集群提交作业描述的yaml文件,以使k8s从集群建立从集群spark执行器单元,并反馈接收或拒绝;实现单一sparkdriver利用不同kubernetes集群的计算资源完成计算任务,不同于基于kubernetesfed的实现方法,本方法不会产生多个sparkdriver,实现多集群的资源对spark的计算流程透明化;图2中的kubeproxy即kubernetes容器调度编排平台的网络代理;注册信息下发模块,向k8s主集群发送spark驱动器单元注册信息,以完成spark驱动器单元在协同中心的注册,使k8s从集群向注册的spark驱动器单元发送注册信息,以完成从集群spark执行器单元在spark驱动器单元的注册,使注册的从集群spark执行器单元,在spark驱动器单元的配置下,执行k8s主集群发送的作业;资源释放模块,作业执行完成后,释放执行作业所占用的资源;资源接口模块,用于获取各集群的资源状态。29.如图3所示,一种面向多集群的协同作业方法,应用于协同中心,包括如下步骤:步骤s101:根据用户提交的作业状态信息,指定主集群和从集群;作业是指用户在一次解决或是一个事务处理过程中要求计算系统所做的工作的集合,它包括用户程序、所需要的数据集控制命令等。作业是由一系列有序的步骤组成的,在执行一个作业会涉及多个网络节点上的计算、存储等;作业状态信息包括用户选择的策略和计算资源、数据存储等状态信息;协同中心根据用户提交的作业状态信息判断是否单集群作业,若是,则选择单集群执行业务,执行完成后释放占用的资源,否则指定主集群和从集群,并执行步骤s102;步骤s102:向主集群发送作业描述文件,以使主集群建立驱动器单元;向从集群提交作业描述文件,以使从集群建立从集群执行器单元;向主集群提交作业描述文件,以使主集群启动作业后,还建立了主集群执行器单元;步骤s103:向主集群发送驱动器单元注册信息,以完成驱动器单元在协同中心的注册,使从集群向注册的驱动器单元发送注册信息,以完成从集群执行器单元在驱动器单元的注册,使注册的从集群执行器单元执行主集群发送的作业;向主集群发送驱动器单元注册信息,以完成驱动器单元在协同中心的注册后,还使主集群执行器单元向注册的驱动器单元发送注册信息,以完成主集群执行器单元在驱动器单元的注册,使注册的主集群执行器单元执行主集群发送的作业;协同中心向主集群发送驱动器单元注册信息的同时,还向主集群发送反向代理(图1a中的reverseproxy)启动请求,并通过从集群执行器单元建立的反馈信息,使驱动器单元确定从集群执行器单元的建立信息,生效反向代理单元,以使从集群发送从集群执行器单元的地址和凭证信息,向主集群的反向代理单元进行连接,若连接成功,则向驱动器单元发送注册信息,以完成从集群执行器单元在驱动器单元的注册。30.基于反向代理实现自定义协议,实现单一计算任务下,跨域集群的直接通信,该方法避免了通过第三方的转发,实现高效通信。31.以使从集群向注册的驱动器单元发送注册信息的同时,还发送心跳报文,使得主集群根据从集群的注册信息和心跳报文判断连接是否成功,若均收到,则连接成功,发送作业(图1a中的task);否则,连接失败,继续等待;步骤s104:作业执行完成后,释放执行作业所占用的资源。32.这部分内容实施方式与上述方法实施例的实施方式类似,此处不再赘述。33.如图4所示,一种面向多集群的协同作业装置,包括作业接口模块、作业指派模块和资源接口模块,作业指派模块包括集群指定模块、作业描述文件下发模块、注册信息下发模块和资源释放模块;作业接口模块,用于获取用户提交的作业;集群指定模块,根据用户提交的作业状态信息,指定主集群和从集群;作业描述文件下发模块,向主集群发送作业描述文件,以使主集群建立驱动器单元;向从集群提交作业描述文件,以使从集群建立从集群执行器单元;注册信息下发模块,向主集群发送驱动器单元注册信息,以完成驱动器单元在协同中心的注册,使从集群向注册的驱动器单元发送注册信息,以完成从集群执行器单元在驱动器单元的注册,使注册的从集群执行器单元执行主集群发送的作业;资源释放模块,用于作业执行完成后释放占用的资源;资源接口模块,用于获取各集群的资源状态。34.这部分内容实施方式与上述装置实施例的实施方式类似,此处不再赘述。35.如图5所示,一种面向多集群的协同作业方法,应用于主集群,包括如下步骤:步骤s201:获取协同中心发送的作业描述文件,建立驱动器单元;步骤s202:获取驱动器单元注册信息,完成驱动器单元在协同中心的注册,通过注册的驱动器单元,获取从集群执行器单元发送的注册信息,完成从集群执行器单元在驱动器单元的注册,所述从集群执行器,是从集群根据协同中心的作业描述文件建立的;步骤s203:向注册的从集群发送作业,以使注册的从集群执行器单元执行作业。36.这部分内容实施方式与上述方法实施例的实施方式类似,此处不再赘述。37.如图6所示,一种面向多集群的协同作业方法,应用于从集群,包括如下步骤:步骤s301:获取协同中心发送的作业描述文件,建立从集群执行器单元;步骤s302:向注册的驱动器单元发送注册信息,完成从集群执行器单元在驱动器单元的注册;所述驱动器单元,是主集群根据协同中心的作业描述文件建立的;所述驱动器单元的注册,是根据协同中心发送的驱动器单元注册信息,在协同中心完成的注册;步骤s303:获取主集群发送的作业,并通过从集群执行器单元执行作业。38.这部分内容实施方式与上述方法实施例的实施方式类似,此处不再赘述。39.与前述一种面向多集群的协同作业方法的实施例相对应,本发明还提供了一种面向多集群的协同作业设备的实施例。40.参见图7,本发明实施例提供的一种面向多集群的协同作业设备,包括存储器和一个或多个处理器,存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例中的一种面向多集群的协同作业方法。41.本发明一种面向多集群的协同作业设备的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本发明一种面向多集群的协同作业设备所在任意具备数据处理能力的设备的一种硬件结构图,除了图7所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。42.上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。43.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。44.本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种面向多集群的协同作业方法。45.所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(smartmediacard,smc)、sd卡、闪存卡(flashcard)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。46.以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献