Flink on yarn日志输出
题主在做flink实时流时,一直不能在flink web上打印出日志,百思不得其解,想找到相应的日志文件,却也没找到,查阅了大量资料以及通过自己的实践,总算搞明白了flink on yarn的日志输出,这里写一篇文章,以此来记录。
首先,我们在看flink的日志输出时,要先明白flink/conf下面的日志配置文件的作用。
log4j-cli.properties 我们用flink run启动时的一些日志配置
log4j-yarn-session.properties 用yarn-session.sh启动时命令行执行时用的log配置
log4j.properties 在yarn模式下,jobManager和taskManager上用的log配置都是它。
logback-console.xml
logback-yarn.xml
logback.xml
以上三个日志文件分别对应上面的三个日志文件
之后,我们才能根据相应的情况,做出改变,不过对于我们在算子内的输出,是不需要改变log日志的。而web上的的日志一般没有数据的主要原因是因为如果大量日志输出,会直接将web页面卡住,如果点击刷新按钮,过一会也会出现相应的日志数据。
因此,我这里做个演示,将内存设置小一点,看是否能在web页面上输出数据来。通过以下命令启动集群,并启动脚本,在指定的yid上运行实时流脚本。
./bin/yarn-session.sh -n 2 -jm 512m -tm 1024m -d
./bin/flink run -m yarn-cluster -yid application_1565839843331_0024 -c TestFlinkSQL /opt/jar/stream-test-0.1.jar
这种情况下,我打印的输出是可以在web页面上输出的。
当然了,在web页面上日志,终究是有点麻烦的,我们可以在相关节点查看相应的taskManager的日志。
首先,要清楚我们flink的日志文件在哪个位置存放,如下图所示:我们的日志文件一般都默认在hadoop的logs下,(对于我的测试环境来说,就在这个下面所示的路径)
/opt/hadoop-2.7.7/logs/userlogs
从里面可以找到我们相应的jobManager的日志,以及相应的taskManager的日志,这样,我们就可以找到相应的日志,来观察我们的输出数据,寻找我们代码中的问题。
当然,对于taskManager我们需要先确定是在哪个work下存放,这个可以在web页面找到。