[英]How to pass java arguments to Flink job artifacts in Application Mode
我只是将 Flink 从 1.10 版本升级到 1.11。 在 1.11 中,Flink 提供了新的特性,用户可以在 Kube.netes 上以应用模式部署作业。 https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/deployment/kube.netes.html#deploy-session-cluster
在V1.10中,我们启动Flink K8s集群,然后通过run将作业提交给Flink
exec ./bin/flink run \
-d \
/streakerflink_deploy.jar \
--arg1 blablabla
--arg2 blablabla
--arg3 blablabla
...
我们通过这个命令传递 java arguments。
但是,在 V1.11 中,如果我们运行 Application 模式,则不需要运行上面的flink run
命令。 我想知道我们如何将 arguments 传递给应用程序模式下的 Flink 作业(也称为作业集群)?
任何帮助将不胜感激!
Flink 在 Kube.netes 上的应用模式在文档中有描述。 您必须创建一个包含您的作业的 Docker 图像。 可以使用./bin/flink run-application [...]
执行作业,如文档中所述。
由于您使用 helm chart 在 Kube.netes(又名 K8s)上启动 Flink 集群,我假设您在谈论独立的 K8s 模式。 其实Application模式和1.10之前的job cluster很像。 因此,您可以在jobmanager-job.yaml
的args
字段中设置作业 arguments,如下所示。
...
args: ["standalone-job", "--job-classname", "org.apache.flink.streaming.examples.join.WindowJoin", "--windowSize", "3000", "--rate", "100"]
...
如果你真的是说原生的K8s模式,那么直接在flink run-application
命令后面加上即可。
$ ./bin/flink run-application -p 8 -t kubernetes-application \
-Dkubernetes.cluster-id=<ClusterId> \
-Dtaskmanager.memory.process.size=4096m \
-Dkubernetes.taskmanager.cpu=2 \
-Dtaskmanager.numberOfTaskSlots=4 \
-Dkubernetes.container.image=<CustomImageName> \
local:///opt/flink/examples/streaming/WindowJoin.jar \
--windowSize 3000 --rate 100
注意:请记住,独立 K8s 和原生 K8s 模式之间的主要区别在于动态资源分配。 在原生模式下,我们有一个嵌入式 K8s 客户端,因此 Flink JobManager 可以按需分配/释放 TaskManager pod。 目前,native mode 只能在 Flink 命令( kube.netes-session.sh
、 flink run-application
)中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.