我已将以下行添加到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代码中可用的系统属性?
答案 0 :(得分:1)
这个问题与Flink [1]的运行时架构有很大关系。
我了解您在独立群集中运行您的工作。请记住JobManager
和TaskManager
在单独的jvm实例中运行。您必须考虑每个代码块的执行位置。
例如map
或filter
等转换中的代码在TaskManager
上执行。
您的条目类的main
方法中的代码在命令行工具flink
上执行,当然,它没有设置系统属性,因为它只为作业提交生成临时(-d)jvm。
如果您通过WebUI
提交作业,则main
方法中的代码会在JobManager
上执行,因此将设置属性。
但基本上通过系统属性传递程序参数我会说相当沮丧。
下面是一个简单的例子:
我已经开始了:
JobManager
与env.java.opts:"-Ddy.props.path=jobmanager"
TaskManager
与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
提交时,我得到:
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager
taskmanager mainArg: jobmanager