我已将以下行添加到 flink-conf.yaml 中:
env.java.opts: "-Ddy.props.path=/PATH/TO/PROPS/FILE"
启动 jobmanager (jobmanager.sh start cluster)时,我在日志中看到 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] https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/runtime.html.
我了解您正在独立集群中运行您的作业。请记住,JobManager
和TaskManager
在单独的 jvm 实例中运行。您必须考虑每个代码块将在哪里执行。
例如,转换中的代码如下map
or filter
执行于TaskManager
。
中的代码main
你的入口类的方法在命令行工具中执行flink
,当然没有设置系统属性,因为它会生成一个临时(-d)jvm 只是为了作业提交。
如果您通过以下方式提交工作WebUI
来自你的代码main
方法执行于JobManager
所以属性将被设置。
一般来说,我宁愿不鼓励通过系统属性传递程序参数,因为这是一种不好的做法。
下面有一个简单的例子:
我已开始:
- a
JobManager
with env.java.opts:"-Ddy.props.path=jobmanager"
- a
TaskManager
with env.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
I get:
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)