gpt4 book ai didi

java - Apache Flink - 自定义 java 选项在作业中无法识别

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:26 26 4
gpt4 key购买 nike

我在 flink-conf.yaml 中添加了以下行:

env.java.opts: "-Ddy.props.path=/PATH/TO/PROPS/FILE"

当启动 jobmanager(jobmanager.sh 启动集群)时,我在日志中看到确实识别了 jvm 选项

2017-02-20 12:19:23,536 INFO  org.apache.flink.runtime.jobmanager.JobManager                -  JVM Options:
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -Xms256m
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -Xmx256m
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -XX:MaxPermSize=256m
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -Ddy.props.path=/srv/dy/stream-aggregators/aggregators.conf
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -Dlog.file=/srv/flink-1.2.0/log/flink-flink-jobmanager-0-flinkvm-master.log
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -Dlog4j.configuration=file:/srv/flink-1.2.0/conf/log4j.properties
2017-02-20 12:19:23,536 INFO org.apache.flink.runtime.jobmanager.JobManager - -Dlogback.configurationFile=file:/srv/flink-1.2.0/conf/logback.xml

但是当我运行一个 flink 作业 (flink run -d PROG.JAR) 时,System.getProperty("dy.props.path") 返回 null(并且在打印系统属性时,我发现它确实不存在。 )

真正的问题是 - 如何设置 flink-job 代码中可用的系统属性?

最佳答案

这个问题与 Flink 的运行时架构有很大关系 [1] .

我了解到您在独立集群中运行作业。请记住,JobManagerTaskManager 在不同的 jvm 实例中运行。您必须考虑每个代码块将在何处执行。

例如,mapfilter 等转换中的代码在 TaskManager 上执行。入口类的 main 方法中的代码是在命令行工具 flink 中执行的,它当然没有设置系统属性,因为它会产生一个临时的( -d) jvm 仅用于作业提交。

如果您通过 WebUI 提交您的作业,您的 main 方法中的代码将在 JobManager 上执行,因此该属性将被设置。

一般来说,我宁愿不鼓励通过系统属性传递程序参数,因为这是一种不好的做法。


下面是一个简单的例子:

我开始了:

  • JobManagerenv.java.opts:"-Ddy.props.path=jobmanager"
  • TaskManagerenv.java.opts:"-Ddy.props.path=taskmanager"

我的工作代码如下:

object Main {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
val stream = env.fromCollection(1 to 4)

val prop = System.getProperty("dy.props.path")
stream.map(_ => System.getProperty("dy.props.path") + " mainArg: " + prop).print()

env.execute("stream")
}
}

当我通过flink工具提交代码时输出如下:

taskmanager  mainArg: null
taskmanager mainArg: null
taskmanager mainArg: null
taskmanager mainArg: null

当通过 WebUI 提交时,我得到:

taskmanager  mainArg: jobmanager
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager

关于java - Apache Flink - 自定义 java 选项在作业中无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42344624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com