如何通过在 Apache Flink 中使用上传的 jar 来提交作业?
Posted
技术标签:
【中文标题】如何通过在 Apache Flink 中使用上传的 jar 来提交作业?【英文标题】:How to submit a job, by using an uploaded jar in Apache Flink? 【发布时间】:2018-01-17 14:15:03 【问题描述】:我已经通过 curl 的 HTTP Post 请求将一个 jar(通过字数统计 java 程序生成)上传到 Apache Flink
Web 控制台,get jars api 会显示上传的 jar。
当我尝试使用该 jar 提交作业时,它会抛出此错误:
引起:org.apache.flink.client.program.ProgramInvocationException: JAR 文件不存在 '/tmp/flink-web-8aa36f99-87fb-4fbc-b155-237fd833fc32/:949611ce-345a-4cd5-986b-8ff9b0700852_WordCount.jar'
这就是我的 POST 请求的样子:
http://localhost:8081/jars/:949611ce-345a-4cd5-986b-8ff9b0700852_WordCount.jar/run
我关注了他们的官方docs 供参考。我哪里错了?任何帮助都将不胜感激。
【问题讨论】:
【参考方案1】:确保 jar 文件位于您的临时目录中。路径中有':',对吗?
我最近在学习 REST API,并通过 POST 请求成功提交了我的作业
http://host:port/jars/29525e98-3ece-49c1-85d1-5301a5a38900_myjob.jar/run?allowNonRestoredState=false&entry-class=¶llelism=&program-args=&savepointPath=
您还可以通过 Flink Dashboard 提交作业,并通过 Chrome DevToos 在网络选项卡(或类似的东西)检测正确的 url
【讨论】:
谢谢,我会试试这个并回复你。根据我上面在问题中提到的文档,说要在 jar id 之前添加一个:
。
我尝试了您的上述请求参数,但仍然向我抛出错误。我继续检查 tmp/flink-web-8aa36f99-87fb-4fbc-b155-237fd833fc32/ 目录,jar 确实存在。
您是否从路径中删除了 ':' 并且仍然出现错误?显然 /jars/:jarid/run 中的 ':jarid' 只是真实案例的模板。
是的,我这样做了,一旦我这样做了,它就会引发另一个错误:Could not run the jar
和 Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file
。但是后来我在创建 jar 时指定了主类,当我通过 cli 运行它时它可以完美运行。
现在它找到了 jar 并且似乎是 jar 文件的问题。检查 jar 中的 META-INF/MANIFEST.MF 文件是否包含“Main-Class”(您可能应该在 maven-shade-plugin 中设置)。您的 jar 是否通过 Flink Dashboard 成功提交?如果是这样,只需查看通过浏览器 DevTools 发送的 http 请求以上是关于如何通过在 Apache Flink 中使用上传的 jar 来提交作业?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Flink 任意 Jar 包上传致 RCE 漏洞复现
复现CVE-2020-17518——Apache Flink upload 远程命令执行漏洞
Apache Flink:如何计算 DataStream 中的事件总数
Apache-Flink 1.11 无法在 Java Flink Streamming Job 中通过 SQL Function DDL 使用 Python UDF