
1.本发明涉及一种在云原生场景下基于flink的流计算依赖文件与镜像解耦方法。
背景技术:2.目前flink on kubernetes 流计算任务依赖的jar文件等在构建docker镜像时提前植入,每当更新任务依赖文件时都需要重新构建镜像,增加了开发迭代的负担。
技术实现要素:3.为了解决flink依赖包和用户代码包更新需要重新构建镜像的问题,本发明提供了一种在云原生场景下基于flink的流计算依赖文件与镜像解耦方法。
4.一种云原生场景下flink流计算依赖文件与镜像解耦方法,包括如下步骤:1)文件系统配置及依赖文件上传;以界面化的方式添加配置目标文件系统,选择创建的文件系统,上传依赖文件;2)构建任务基础镜像;提供任务运行的基础环境;3)实现flink
‑
on
‑
k8s插件及flink 自定义mount。
5.所述步骤1)包括如下步骤:1.1)添加配置文件系统,点击添加组件选择添加目标文件系统,根据不同文件系统给出不同的配置项填写;1.2)点击保存,测试添加的文件系统是否可以连通;1.3)选择界面的资源管理,点击上传资源,填写资源文件的属性信息,包括资源名,资源类型,存储位置及描述。
6.所述步骤2)包括如下步骤:2.1)镜像基于openjdk:8u242
‑
jdk构建,创建flink用户,安装必要的环境依赖包;2.2)组织flink home目录结构,在flink home下创建目录conf,log,plugins和deps;lib和bin目录通过mount的方式挂载到flink home上;2.3)设置env flink_classpath=$flink_classpath:$flink_home/deps。
7.所述步骤3)包括如下步骤:3.1)定义创建volume和mount参数格式;3.2)在kubernetesutils 类中实现parsevolumeswithprefix和parsevolumemountswithprefix两个方法。方法各有两个入参分别是prefix和flinkconfig,prefix的值为kubernetes.jobmanager.volumes;或者kubernetes.taskmanager.volumes;parsevolumeswithprefix通过prefix匹配出flinkconfig中自定义的volumes,parsevolumemountswithprefix通过prefix匹配出flinkconfig中自定义的mounts;3.3)在flinkmasterdeploymentdecorator的decorateinternalresource方法中调用parsevolumeswithprefix为jobmanager pod添加自定义volumes,在
createjobmanagercontainer方法中调用parsevolumemountswithprefix添加自定义mounts;3.4)在taskmanagerpoddecorator的decorateinternalresource方法中调用parsevolumeswithprefix为taskmanager pod添加自定义volumes,在createtaskmanagercontainer方法中调用parsevolumemountswithprefix添加自定义mounts;3.5)flink
‑
on
‑
k8s插件中将任务依赖文件从sftp上传至目标文件系统,组织自定义volume参数添加到flinkconfig中,然后提交任务到kubernetes。
8.本发明的有益效果是:本发明对于现有技术而言,实现了程序依赖包与docker镜像的解耦,开发迭代过程中镜像只需构建一次便可以满足用户后面的需求,并且使用这种方式不管是用户更新任务程序包还是更新flink本身依赖的包都不需要更新镜像,提高了开发迭代的效率。
附图说明
9.结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:图1是本发明中步骤1)的流程图;图2是本发明中步骤3)的流程图;图3为添加文件系统的相应设置界面;图4为上传依赖文件的设置界面。
具体实施方式
10.为使本发明的内容更加清楚易懂,以下结合说明书附图,对本发明的内容作进一步说明。当然本发明并不局限于该具体实施例,本领域内的技术人员所熟知的一般替换也涵盖在本发明的保护范围内。
11.实施例本发明提供了一种云原生场景下flink流计算依赖文件与镜像解耦方法,包括如下步骤:1)文件系统配置及依赖文件上传;以界面化的方式添加配置目标文件系统,选择创建的文件系统,上传依赖文件;2)构建任务基础镜像;提供任务运行的基础环境;3)实现flink
‑
on
‑
k8s插件及flink 自定义mount。
12.如图1所示,所述步骤1)包括如下步骤:1.1)添加配置文件系统,点击添加组件选择添加目标文件系统,根据不同文件系统给出不同的配置项填写;1.2)点击保存,测试添加的文件系统是否可以连通;1.3)选择界面的资源管理,点击上传资源,填写资源文件的属性信息,包括资源名,资源类型,存储位置及描述。
13.所述步骤2)包括如下步骤:
2.1)镜像基于openjdk:8u242
‑
jdk构建,创建flink用户,安装必要的环境依赖包;2.2)组织flink home目录结构,在flink home下创建目录conf,log,plugins和deps;lib和bin目录通过mount的方式挂载到flink home上;2.3)设置env flink_classpath=$flink_classpath:$flink_home/deps。
14.如图2所示,所述步骤3)包括如下步骤:3.1)定义创建volume和mount参数格式;3.2)在kubernetesutils 类中实现parsevolumeswithprefix和parsevolumemountswithprefix两个方法。方法各有两个入参分别是prefix和flinkconfig,prefix的值为kubernetes.jobmanager.volumes;或者kubernetes.taskmanager.volumes;parsevolumeswithprefix通过prefix匹配出flinkconfig中自定义的volumes,parsevolumemountswithprefix通过prefix匹配出flinkconfig中自定义的mounts;3.3)在flinkmasterdeploymentdecorator的decorateinternalresource方法中调用parsevolumeswithprefix为jobmanager pod添加自定义volumes,在createjobmanagercontainer方法中调用parsevolumemountswithprefix添加自定义mounts;3.4)在taskmanagerpoddecorator的decorateinternalresource方法中调用parsevolumeswithprefix为taskmanager pod添加自定义volumes,在createtaskmanagercontainer方法中调用parsevolumemountswithprefix添加自定义mounts;3.5)flink
‑
on
‑
k8s插件中将任务依赖文件从sftp上传至目标文件系统,组织自定义volume参数添加到flinkconfig中,然后提交任务到kubernetes。
15.本发明对于现有技术而言,实现了程序依赖包与docker镜像的解耦,开发迭代过程中镜像只需构建一次便可以满足用户后面的需求,并且使用这种方式不管是用户更新任务程序包还是更新flink本身依赖的包都不需要更新镜像,提高了开发迭代的效率。
16.本发明将应用到袋鼠云数栈的流计算开发套件中。通过在界面配置添加文件系统和上传依赖文件。附图3为添加文件系统的相应设置界面;附图4 为上传依赖文件的设置界面,这先将依赖文件上传至sftp。创建流计算任务的时候会选择上传的依赖文件,在flink插件端会将sftp中的依赖文件上传至配置的目标文件系统中,然后将目标文件系统中的依赖文件mount到flink pod上了。