日志位置
Flink-on-yarn模式的job日志输出路径是:
$HADOOP_HOME/logs/userlogs/<APPLICATION_ID>/<CONTAINER_ID>/
以上$HADOOP_HOME/logs/userlogs是yarn容器的默认日志路径, 可通过在yarn-site.xml中进行如下配置来修改:
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/logs/yarn</value>
</property>
log4j配置
Flink的log配置是在启动脚本中指定输出目标文件和log4j配置文件的。而且由于生命周期的不同,日志的输出路径和配置文件也都不一样。
不同生命周期的配置
1.启动yarn-session过程
当启动一个yarn-session(Hadoop yarn启动一个Application的时候), 执行命令如下:
yarn-session.sh -d -jm 1024 -tm 4096 -s 12
其中涉及的脚本:bin/yarn-session.sh中有如下代码:
log=$FLINK_LOG_DIR/flink-$FLINK_IDENT_STRING-yarn-session-$HOSTNAME.log
log_setting="-Dlog.file="$log" -Dlog4j.configuration=file:"$FLINK_CONF_DIR"/log4j-yarn-session.properties -Dlogback.configurationFile=file:"$FLINK_CONF_DIR"/logback-yarn.xml"
//...
// java启动程序中引入log_setting
// java ... "${log_setting}"
2.执行Flink命令的时候(提交job)
当我们往一个存在的yarn-session中提交任务的时候(或者提交job的时候创建yarn-session), 我们会执行如下命令:
flink run xxx.jar
其中的脚本flink中有如下代码:
log=$FLINK_LOG_DIR/flink-$FLINK_IDENT_STRING-client-$HOSTNAME.log
log_setting=(-Dlog.file="$log" -Dlog4j.configuration=file:"$FLINK_CONF_DIR"/log4j-cli.properties -Dlogback.configurationFile=file:"$FLINK_CONF_DIR"/logback.xml)
//...
// java启动程序中引入log_setting
// java ... "${log_setting}"
3.TaskManager运行中
当我们往提交了job,yarn为Job启动了TaskManager,会执行bin/taskmanager.sh
该脚本中有如下代码:
if [[ $STARTSTOP == "start-foreground" ]]; then
exec "${FLINK_BIN_DIR}"/flink-console.sh $ENTRYPOINT "${args[@]}"
else
"${FLINK_BIN_DIR}"/flink-daemon.sh $STARTSTOP $ENTRYPOINT "${args[@]}"
fi
以上代码是说如果是命令行前端操作,则走flink-console.sh,如果是后端服务走flink-daemon.sh,Job的运行显然是走后端服务脚本flink-daemon.sh的
bin/flink-daemon.sh中有代码
FLINK_LOG_PREFIX="${FLINK_LOG_DIR}/flink-${FLINK_IDENT_STRING}-${DAEMON}-${id}-${HOSTNAME}"
log="${FLINK_LOG_PREFIX}.log"
out="${FLINK_LOG_PREFIX}.out"
log_setting=("-Dlog.file=${log}" "-Dlog4j.configuration=file:${FLINK_CONF_DIR}/log4j.properties" "-Dlogback.configurationFile=file:${FLINK_CONF_DIR}/logback.xml")
//...
// java启动程序中引入log_setting
// java ... "${log_setting}"
jobmanager执行的也是在bin/flink-daemon.sh指定
log4j or logback?
日志框架的选择是用log4j还是logback,取决于我们在$FLINK_HOME/lib中添加的日志框架jar是Log4j相关的jar,还是logback相关的jar
若要修改成logback,则除了lib下Jar包的替换,还要将$FLINK_HOME/conf/log4j.properties删掉替换成logback.xml
小结
- 启动yarn-session过程中的日志,我们需要在FLINK_IDENT_STRING-yarn-session-$HOSTNAME.log文件中查看,配置一般不需要自定义修改
- 提交job过程中的日志,我们需要在FLINK_IDENT_STRING-client-$HOSTNAME.log中查看,配置一般不需要自定义修改
- 程序中的日志输出(job执行), 我们在FLINK_HOME/conf下面修改