我正在裸机Kubernetes集群上测试Spark 2.3.1(独立)。我有一个带有两个虚拟机的集群,它们都有8GB内存和2个内核。我已经部署了一个集群,其中包含一个主节点和两个从节点。节点日志似乎是正确的,工作人员正确地注册了主人:
kubectl exec spark-master cat /opt/spark/logs/spark-logs
kubectl exec spark-worker1 cat /opt/spark/logs/spark-logs
而且,根据GUI,工作人员似乎已准备好并能够与主人沟通。 Spark GUI
我在spark容器上打开了以下端口:
然后,我试图通过使用spark-shell --master spark://spark-master:7077
和sc.makeRDD(List(1,2,4,4)).count
作为工作,从容器中通过launchind spark-shell执行基本的spark工作。
如果我在从属节点内使用spark-shell,则执行代码并获得结果。但是,如果我从主服务器启动shell,我收到以下错误消息:
WARN TaskSchedulerImpl:初始作业未接受任何资源;检查群集UI以确保工作人员已注册并具有足够的资源
谷歌搜索这个错误信息时,我来自this issue from github。我很确定这是一个网络问题,因为作业从工作节点开始。同时,在主容器内启动的作业到达工作人员,但看起来工作人员无法回复主人。工人的日志看起来像this。
在deployment.yml中打开工作者用于与主服务器通信的所有端口,并禁用防火墙。
有没有人已经经历过这种情况?
Docker安装在我的笔记本电脑上。驱动程序首先使用Docker NAT。因此,工作人员无法回答司机,因为他们试图到达码头工人Verthernet ip。禁用docker解决了这个问题。