首页> 中国专利> Jupyter容器内动态生成Spark端口访问的方法及设备

Jupyter容器内动态生成Spark端口访问的方法及设备

摘要

本发明涉及一种Jupyter容器内动态生成Spark端口访问的方法及设备,属于通信技术领域,在启动生成jupyter容器Pod时,动态生成多个不重复的nodePort端口;基于nodePort端口,生成绑定jupyter pod的service,并保持port、targetPort、nodePort一致;基于保持一致的port、targetPort、nodePort,在jupyter容器内直接使用spark on yarn的yarn‑client模式运行spark作业,并获取交互式输出。本发明通过生成jupyter容器时,自动动态生成不重复的Service NodePort,并将spark程序的driver.port和blockManager.port与其绑定,即可实现spark集群访问k8s集群内jupyter容器的driver端,对于原有spark程序只需添加一行配置即可,操作简单,实时生效。

著录项

  • 公开/公告号CN113094150A

    专利类型发明专利

  • 公开/公告日2021-07-09

    原文格式PDF

  • 申请/专利权人 上海中通吉网络技术有限公司;

    申请/专利号CN202110360061.9

  • 发明设计人 程欣;

    申请日2021-04-02

  • 分类号G06F9/455(20060101);

  • 代理机构11471 北京细软智谷知识产权代理有限责任公司;

  • 代理人鲍亚平

  • 地址 201799 上海市青浦区华志路1685号5幢

  • 入库时间 2023-06-19 11:45:49

说明书

技术领域

本发明属于通信技术领域,具体涉及一种Jupyter容器内动态生成Spark端口访问的方法及设备。

背景技术

对于Jupyter使用进行k8s容器化后,由于k8s集群内部对外隔离的特性,使得现有技术中无法满足在jupyter容器内部以yarn-client模式运行的spark程序。

例如,在现有技术中,Jupyter容器内无法满足直接使用yarn-client模式,只能以local或cluster模式运行spark程序,local模式运行无法使用spark集群的分布式计算能力,cluster模式运行只能全部在spark集群上查看,无法满足客户端交互式开发输出的需求。

发明内容

本发明提供了一种Jupyter容器内动态生成Spark端口访问的方法及设备,以解决Jupyter容器内无法满足直接使用yarn-client模式的技术问题。

本发明提供的技术方案如下:

一方面,一种Jupyter容器内动态生成Spark端口访问的方法,包括:

在启动生成jupyter容器Pod时,动态生成多个不重复的nodePort端口;

基于所述nodePort端口,生成绑定jupyter pod的service,并保持port、targetPort、nodePort一致;

基于保持一致的port、targetPort、nodePort,在jupyter容器内直接使用sparkon yarn的yarn-client模式运行spark作业,并获取交互式输出。

可选的,所述动态生成多个不重复的nodePort端口,包括:

通过yaml文件使用k8s-client生成k8s集群pod;

根据端口全局占用记录表,查询还未被使用的可用NodePort,并在所述未被使用的可用nodeport中轮询选择出适用nodeport。

可选的,所述基于所述nodePort端口,生成绑定jupyter pod的service,并保持port、targetPort、nodePort一致,包括:

基于所述nodePort端口,通过yaml生成绑定所述jupyter容器pod的Service,并保持port、targetPort、nodePort完全一致。

可选的,所述基于保持一致的port、targetPort、nodePort,在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出,包括:

k8s集群每个节点上的nodePort端口代理到jupyter容器pod的对应service服务中,以使k8s集群外部客户端直接访问service入口;

在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出。

可选的,所述k8s集群每个节点上的nodePort端口代理到jupyter容器pod的对应service服务中,以使k8s集群外部客户端直接访问service入口,包括:

Spark的Driver运行在k8s的Pod上,通过Service把targetPort映射到Port,进一步映射到nodePort,打通外部客户端访问k8s集群内部的入口,以使k8s集群外部客户端直接访问service入口。

可选的,所述在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出,包括:

将Jupyter Pod作为初始化SparkContext的Client端,与Spark集群进行通信交互;

通过Spark的ApplicationMaster向yarn的ResourceManager申请获取executor资源,AM启动Executor后,yarn NodeManager管理的已分配使用的Executor反向注册到对应申请的Driver端;

本地Driver就和申请的executor container通信,来进行各个Task任务调度;以及,Executor将各个Task的运行状态汇报给Driver端,实现yarn-client模式的交互式开发。

又一方面,一种Jupyter容器内动态生成Spark端口访问的设备,包括:处理器,以及与处理器相连接的存储器;

存储器用于存储计算机程序,计算机程序至少用于执行上述任一所述的Jupyter容器内动态生成Spark端口访问的方法;

处理器用于调用并执行存储器中的计算机程序。

本发明的有益效果为:

本发明实施例提供的Jupyter容器内动态生成Spark端口访问的方法及设备,在启动生成jupyter容器Pod时,动态生成多个不重复的nodePort端口;基于nodePort端口,生成绑定jupyter pod的service,并保持port、targetPort、nodePort一致;基于保持一致的port、targetPort、nodePort,在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出。本发明通过生成jupyter容器时,自动动态生成不重复的Service NodePort,并将spark程序的driver.port和blockManager.port与其绑定,即可实现spark集群访问k8s集群内jupyter容器的driver端,对于原有spark程序只需添加一行配置即可,操作简单,实时生效。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的方法流程示意图;

图2为本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的方法的原理结构示意图;

图3为本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的设备结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。

Jupyter是一种为开发跨多种编程语言的交互式计算的开源软件,开放标准和服务,可应用于全过程计算,开发,文档编写,运行代码和展示结果,常用于python,机器学习开发者的在线开发IDE,对jupyter组件进行容器化部署后,能够更轻量级,完全资源隔离的使用。

k8s用于自动部署,扩展和管理容器化应用程序的开源系统。Pod是k8s中创建和管理的、最小的可部署的计算单元,每个jupyter容器依赖pod生成。Service是将一组Pods上的应用程序公开为网络服务的抽象方法,每个service可以通过选择器标签绑定到对应标签的pod上,为该pod提供TCP等服务。

spark的yarn-client模式:spark on yarn运行模式的其中之一,该模式下,SparkDriver端会运行在client上,通过Spark的ApplicationMaster仅向yarn的ResourceManager申请获取executor资源,之后本地Driver的client负责和请求的所有的executor container通信来进行任务调度,client端不能被关闭,最终结果汇总任务结束后关掉终端,等于kill整个spark应用,该模式适合于交互类型的本地spark作业开发。

在现有技术中,Jupyter容器内无法满足直接使用yarn-client模式,只能以local或cluster模式运行spark程序,local模式运行无法使用spark集群的分布式计算能力,cluster模式运行只能全部在spark集群上查看,无法满足客户端交互式开发输出的需求。也就是说,现有的spark on yarn的yarn-client模式无法满足在独立k8s集群内部直接运行spark作业的方式,由于k8s集群对外隔离,因此无法在jupyter这种交互式IDE上很好的满足spark作业交互式开发的需求。

基于此,本发明实施例提供一种Jupyter容器内动态生成Spark端口访问的方法。

图1为本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的方法流程示意图;图2为本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的方法的原理结构示意图。

参阅图1、图2,本发明实施例提供的方法,可以包括以下步骤:

S11、在启动生成jupyter容器Pod时,动态生成多个不重复的nodePort端口。

在一些实施例中,可选的,动态生成多个不重复的nodePort端口,包括:

通过yaml文件使用k8s-client生成k8s集群pod;

根据端口全局占用记录表,查询还未被使用的可用NodePort,并在未被使用的可用nodeport中轮询选择出适用nodeport。

例如,在启动生成jupyter容器Pod时,自动动态生成多个不重复的k8s集群nodeport。

S12、基于nodePort端口,生成绑定jupyter pod的service,并保持port、targetPort、nodePort一致;即集群内部端口与外部访问端口的一致性。

在一些实施例中,可选的,包括:基于nodePort端口,通过yaml生成绑定jupyter容器pod的Service,并保持port、targetPort、nodePort完全一致。

例如,根据该nodeport生成绑定该jupyter容器pod的Service,并保持port、targetPort、nodePort完全一致,即集群内部端口与外部访问端口的一致性。

S13、基于保持一致的port、targetPort、nodePort,在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出。

在一些实施例中,可选的,基于保持一致的port、targetPort、nodePort,在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出,包括:

k8s集群每个节点上的nodePort端口代理到jupyter容器pod的对应service服务中,以使k8s集群外部客户端直接访问service入口;

在jupyter容器内直接使用spark on yarn的yarn-client模式运行spark作业,并获取交互式输出。

在一些实施例中,可选的,包括:Spark的Driver运行在k8s的Pod上,通过Service把targetPort映射到Port,进一步映射到nodePort,打通外部客户端访问k8s集群内部的入口,以使k8s集群外部客户端直接访问service入口。

在一些实施例中,可选的,包括:将Jupyter Pod作为初始化SparkContext的Client端,与Spark集群进行通信交互;通过Spark的ApplicationMaster向yarn的ResourceManager申请获取executor资源,AM启动Executor后,yarn NodeManager管理的已分配使用的Executor反向注册到对应申请的Driver端;本地Driver就和申请的executorcontainer通信,来进行各个Task任务调度;以及,Executor将各个Task的运行状态汇报给Driver端,实现yarn-client模式的交互式开发。

本发明实施例中,由系统自动生成可绑定的多个k8s集群内唯一的NodePort端口,对用户透明,用户只需在原有yarn-client模式启动的spark程序上添加一行sparkConf配置增加的绑定端口属性,即可在jupyter容器中运行实时生效,并能在日志中看到交互式的spark作业数据输出,简单高效。

例如,Jupyter容器内以yarn-client模式启动的spark程序,setMaster(“yarn”)后只需配置sparkConf增加以下属性即可(理论上可支持足够多的nodePort):

set(“spark.driver.bindAddress”,“0.0.0.0”)

set(“spark.driver.host”,“k8s集群主节点ip”)

set(“spark.driver.port”,“nodePort1”)

set(“spark.blockManager.port”,“nodePort2”)。

可选的,在jupyter容器内初始化SparkContext时,增加配置sparkConf端口属性,设置为对应选择多个的NodePort,即以yarn-client模式可正常运行spark程序,并获取到交互式输出。

本发明实施例提供的Jupyter容器内动态生成Spark端口访问的方法,由系统自动生成可绑定的多个k8s集群内唯一的NodePort端口,对用户透明,用户只需在原有yarn-client模式启动的spark程序上添加一行sparkConf配置增加的绑定端口属性,即可在jupyter容器中运行实时生效,并能在日志中看到交互式的spark作业数据输出,简单高效。

基于一个总的发明构思,本发明实施例还提供一种Jupyter容器内动态生成Spark端口访问的设备。

图3为本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的设备结构示意图,请参阅图3,本发明实施例提供的一种Jupyter容器内动态生成Spark端口访问的设备,包括:处理器31,以及与处理器相连接的存储器32。

存储器32用于存储计算机程序,计算机程序至少用于上述任一实施例记载的Jupyter容器内动态生成Spark端口访问的方法;

处理器31用于调用并执行存储器中的计算机程序。

基于一个总的发明构思,本发明实施例还提供一种存储介质。

一种存储介质,该存储介质存储有计算机程序,当计算机程序被处理器执行时,实现上述的Jupyter容器内动态生成Spark端口访问的方法中各个步骤。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。

需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号