docker 部署flink和遇到webui 下taskmanager的无stdout 打印解决

部署教程

# 拉取镜像
$ docker pull flink:1.13.6-scala_2.12-java8
# 设置FLINK_PROPERTIES, 这里我设置了slot的插槽数,需要在创建容器的时候就进行设置,
# 之后进入到容器里面的flink-conf.yaml里面再进行修改重启是没有用的,默认是1
$ FLINK_PROPERTIES="jobmanager.rpc.address: jobmanager 
taskmanager.numberOfTaskSlots: 8 
"
$ docker network create flink-network
# 创建容器运行 jobmanager
$ docker run -d\
    --name=jobmanager \
    --network flink-network \
    --publish 8081:8081 \
    --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
    flink:1.13.6-scala_2.12-java8 jobmanager
# 创建容器运行 taskmanager 
$ docker run -d\
    --name=taskmanager \
    --network flink-network \
    --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
    flink:1.13.6-scala_2.12-java8 taskmanager
# 查看容器是否在运行,两个进程都在运行就可以在ip:8081下进入webui界面进行查看
$ docker ps

问题1:webui界面 有log打印但是没有stdout 输出

这个问题的解决办法我网上参考了很多教程,在下面这个教程找到了一点思路

https://blog.csdn.net/Allocator/article/details/106858679

我跟他的情况稍有不一样:

1. 他是log和stdout都没有显示,我是有log显示但是没有stdout显示

2. flink 的版本不一样,所以里面的一些脚本不太一致,按照他的方法进行改动导致我taskmanager启动不了

但是还是给了我一些思路,下面是排查过程,不感兴趣的可以跳过

  1. webui界面查看stdout的请求:我之前的错误,不是下面这个,之前的错误异常大概是找不到.out文件这样的(我懒得复现,就口头说了)大概就是没有生成.out文件,查看log界面的请求,是有返回的。

2. 当我按照上面的思路,把docker-entrypoint.sh 的start-foregroud  改成start  且在最后一行添加

exec /bin/bash -c "tail -f $FLINK_HOME/log/*.log"  之后,我的taskmanager起不来,日志是这样的。

3. 到这里我很感谢原博主提供的思路,查找原因在哪,以及为什么要添加最后一行,观察上面的日志我猜测,大概是没有执行到最后一行的代码,所以导致容器判断没有程序在运行,所以自己退出了,所以下面是我的修改

/docker-entrypoint.sh

通过查找日志打印的   “daemon on host”  定位到了/opt/flink/bin/flink-daemon.sh 文件,在执行java命令的下面添加了exec /bin/bash -c "tail -f $FLINK_HOME/log/*.log"  命令  然后保存配置文件,传到容器里面。然后重启,就可以发现log和stdout显示就都有了,至少我实测是这样的(docker里面修改配置的命令我下面会提到)

 问题二:  通过修改flink-conf.yaml 里面的taskmanager.numberOfTaskSlots 来改动slot的数量不生效

这块我通过修改 flink-conf.yaml的taskmanager.numberOfTaskSlots: 8配置,然后保存重启,发现不生效,然后我查看容器里面这个文件发现又被改成了 默认的1,然后看了一下日志,这个选项是通过命令行进行指定的

 所以修改有两个途径:

1. 修改docker-compose.yml 里面的taskmanager.numberOfTaskSlots 配置,但是这个还要重新build镜像太麻烦了,我没用

 2. 观察上面可以发现它使用了FLINK_PROPERTIES 变量,这个是可以通过外部传入的,所以可以通过这个变量进行修改  修改步骤放在了部署教程里面,这里就不赘述了。

docker 容器里面没有vi 怎么修改配置文件

我也是参考这个文章的Docker修改容器内部文件的方法_docker内部如何修改文件_Miracle42的博客-CSDN博客

上面用到的两个docker-entrypoint.sh和flink-daemon.sh的文件传输命令,我贴在这里,需要的自取

# 获取镜像内部的文件,注意我这里需要创建  flink目录
docker cp jobmanager:/docker-entrypoint.sh ./flink/docker-entrypoint.sh
docker cp jobmanager:/opt/flink/bin/flink-daemon.sh ./flink/flink-daemon.sh
# 覆盖镜像内部的文件
docker cp ./flink/docker-entrypoint.sh taskmanager:/docker-entrypoint.sh
docker cp ./flink/flink-daemon.sh taskmanager:/opt/flink/bin/flink-daemon.sh

 完结撒花

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值