在Docker设置中添加Flink Job Jar并通过Flink Rest API运行作业

pb3s4cty  于 2022-12-09  发布在  Apache
关注(0)|答案(2)|浏览(237)

我们在Cluster Session模式下运行Flink,并自动在Dockerfile中添加Jars:

ADD pipeline-fat.jar /opt/flink/usrlib/pipeline-fat.jar

因此,我们可以通过Flink Rest API运行此Jar,而无需提前上传Jar:

POST http://localhost:8081/:jarid/run

但现在显示了“静态”Jar,以获取:jarid

GET http://localhost:8081/jars

"所以我的问题是"
是否可以使用Flink Rest API运行userlib jar?
或者您只能通过

  • 命令行界面flink run -d -c ${JOB_CLASS_NAME} /job.jar
  • standalone-job --job-classname com.job.ClassName模式?

我的替代方法(解决方法)是将jar上载到jobmanager容器的Docker entrypoint.sh中:

curl -X POST http://localhost:8084/jars/upload \
    -H "Expect:" \
    -F "jarfile=@./pipeline-fat.jar"
hpcdzsge

hpcdzsge1#

我认为,遗憾的是,目前不可能在会话模式下启动flink集群,并在docker映像中预烘焙一个jar,然后使用REST API命令启动作业(如您所示)。
然而,你的变通方法对我来说似乎是个好主意。我很好奇,看看它在实践中是否对你有效。

a64a0gku

a64a0gku2#

我设法使用命令行界面运行了一个userlib jar。
我编辑了docker compose来运行自定义的docker-entrypoint.sh。我已经添加到原始的docker-entrypoint.sh

run_user_jars() {
echo "Starting user jars"
exec ./bin/flink run /opt/flink/usrlib/my-job-0.1.jar & }

run_user_jars
...

并在docker-compose.yml文件中编辑jobmanager的原始入口点。

entrypoint: ["bash", "/opt/flink/usrlib/custom-docker-entrypoint.sh"]

相关问题