1. 背景
今天看到之前通过YarnApp方式运行Flink的JobManager启动命令代码,看到部分-D参数后面带空格很疑惑。相信之前这么做是有原因的,但想不起之前为什么这部分参数-D后面要带空格。
代码如下:
StringBuilder cmdBld = new StringBuilder().append(Environment.JAVA_HOME.$$())
.append("/bin/java -Xmx").append(memSize).append(" -Xms").append(memSize)
.append(" -XX:MaxMetaspaceSize=").append(memSize/4)
.append(" -Dlog.file=\"").append(ApplicationConstants.LOG_DIR_EXPANSION_VAR).append("/jobmanager.log\"")
.append(" -Dlog4j.configuration=file:log4j.properties")
.append(" -Dlog4j.configurationFile=file:log4j.properties")
.append(" org.apache.flink.yarn.entrypoint.YarnSessionClusterEntrypoint")
.append(" -D jobmanager.memory.off-heap.size=").append(memSize/8).append('b')
.append(" -D jobmanager.memory.jvm-overhead.min=").append(memSize/5).append('b')
.append(" -D jobmanager.memory.jvm-metaspace.size=").append(memSize/4).append('b')
.append(" -D jobmanager.memory.heap.size=").append(memSize).append('b')
.append(" -D jobmanager.memory.jvm-overhead.max=").append(memSize/5).append('b')
.append(" 1> ").append(ApplicationConstants.LOG_DIR_EXPANSION_VAR).append("/jobmanager.out")
.append(" 2> ").append(ApplicationConstants.LOG_DIR_EXPANSION_VAR).append("/jobmanager.err")
2. 过程记录
首先猜测这些参数-D后面加空格是给YarnSessionClusterEntryPoint使用的。
- 类:org.apache.flink.yarn.entrypoint.YarnSessionClusterEntrypoin- 类:org.apache.flink.runtime.entrypoint.DynamicParametersConfigurationParserFactory
- 类:org.apache.flink.runtime.entrypoint.DynamicParametersConfigurationParserFactory