Flink 1.12.7版本在k8s上运行时,默认的本地flink路径下只有jobmanager.log或taskmanager.log日志。在原先我部署在yarn上执行时,会有jobmanager.log、jobmanager.err、jobmanager.out三个日志,我想知道是什么问题。
摸索一番,看了源码之后发现,在flink runtime项目下的Bootstrap类下,有一个getTaskManagerShellCommand方法
该方法下好像配置了启动命令,里面有一段代码:
startCommandValues.put(
"redirects",
"1> "
+ logDirectory
+ "/taskmanager.out "
+ "2> "
+ logDirectory
+ "/taskmanager.err");
将标准输出重定向到指定的日志目录下的 taskmanager.out 文件中,将标准错误输出重定向到指定的日志目录下的 taskmanager.err文件中。进一步地发现,在flink yarn项目的Utils类中,有一个createTaskExecutorContext方法,在该方法中调用了上面的getTaskManagerShellCommand方法获取launchCommand,并且在debug模式下,可以打印出该launchCommand,我打印后如下所示:
是有一个将标准输出和标准错误输出重定向的命令。
但是当将flink部署到k8s中时,因为在k8s中源码中没有上面的log debug日志打印,同时,我在flink kubernetes项目下的KubernetesUtils方法中,也发现了相应的getCommonStartCommand方法,但是在该方法中,flink1.11版本是有上面的重定向命令语句的,但是到了1.12版本之后我发现,这段命令没有了?
是因为flink 1.12版本后没有了这个重定向命令导致部署到k8s时,只有一个.log文件,而没有.err和.out文件吗?
有没有人遇到过类似的问题?恳请各位发表观点