我正在裸机Kubernetes集群上测试Spark 2.3.1(独立)。 我有一个包含两个虚拟机的群集,两个虚拟机都具有8GB的ram和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-shell --master spark://spark-master:7077
和sc.makeRDD(List(1,2,4,4)).count
作为作业,通过从容器中启动launchd spark-shell来执行基本的spark作业。
如果我在从属节点中使用spark-shell,则执行代码并得到结果。但是,如果从主服务器启动外壳程序,则会收到以下错误消息:
WARN TaskSchedulerImpl:初始作业没有接受任何资源;检查您的集群用户界面,以确保工作人员已注册 并有足够的资源
在搜索该错误消息时,我遇到了this issue from github。我很确定这是一个网络问题,因为该作业始于工作节点。该作业虽然在主容器中启动,但到达了工作人员,但看起来工作人员无法回复主数据。工作人员上的日志看起来像this。
worker用于与主服务器进行通信的所有端口都在Deployment.yml中打开,并且防火墙已禁用。
有人遇到过这种情况吗?
答案 0 :(得分:0)
Docker已安装在我的笔记本电脑上。该驱动程序是通过使用Docker NAT启动的。因此,工作人员无法回复驱动程序,因为他们试图到达docker Verthernet ip。禁用Docker解决了该问题。