我正试图构建一个包含Apache Spark的Docker镜像。它是基于openjdk-8-jre官方镜像构建的。
目标是以集群模式执行Spark,因此至少有一个主节点(通过sbin/start-master.sh
启动)和一个或多个从节点(sbin/start-slave.sh
)。有关我的Dockerfile和入口脚本,请参见spark-standalone-docker。
构建本身实际上是可以通过的,问题在于当我想运行容器时,它会在短时间内启动并停止。原因是Spark主节点启动脚本以守护进程模式启动主节点并退出。因此,容器终止,因为不再有前台运行的进程。
明显的解决方案是在前台运行Spark主进程,但我无法弄清楚如何做到这一点(即使在谷歌上也没有找到任何东西)。我“解决方法”是在Spark日志目录上运行tail -f
。
因此,我的问题是:
- 如何在前台运行Apache Spark Master?
- 如果第一个方法不可行/不可行/不可行,保持容器“活动”的首选(即最佳实践)解决方案是什么(我真的不想使用无限循环和睡眠命令)?
./start-master.sh
脚本(即将Spark容器化)时,这实际上非常有用。在我的情况下,Kubernetes始终报告容器崩溃(因为Spark作为守护程序服务启动)。然而,设置了这个环境变量后,在Docker容器内一切都可以完美运行! - bajro