当前位置: 首页 > 知识库问答 >
问题:

Spark workers无法通过服务网格连接到Spark master

施驰
2023-03-14

我正在运行一个 Kubernetes 集群,我在不同场合启用了两个服务网格 Istio 和 Linkerd。

当我尝试部署Spark独立集群时,每个Spark工作人员和Master将在不同的pod中运行,工作人员无法连接到Spark Master。

可以通过服务(通过 sidecar 传递)从工作线程运行 curl 请求,以获取 Spark Master UI。但是,当尝试启动连接到主服务器的 Spark 工作线程时,它失败了。

下面是服务清单:

< code>apiVersion: v1种类:服务元数据:标签:app: sparkmaster名称:spark-submit2命名空间:spark规格:端口:-端口:7077协议:TCP目标端口:7077选择器:app: sparkmaster类型:ClusterIP

例如,当我跑步时

sparkuser@sparkslave-6897c9cdd7-frcgs:~$/opt/spark-2.4.4-bin-hadoop2.7/sbin/start-slave。嘘spark://spark-submit2:7077

我得到了如下所示的错误。

这个问题的正确解决方案是什么?

注意:如果我在一个没有启用服务网格的名称空间中执行完全相同的过程,它会工作。

20/02/13 15:05:55 INFO Worker: Connecting to master spark-submit2:7077...
20/02/13 15:05:55 INFO TransportClientFactory: Successfully created connection to spark-submit2/10.96.121.191:7077 after 259 ms (0 ms spent in bootstraps)
20/02/13 15:05:55 ERROR TransportResponseHandler: Still have 1 requests outstanding when connection from spark-submit2/10.96.121.191:7077 is closed
20/02/13 15:05:55 WARN Worker: Failed to connect to master spark-submit2:7077
org.apache.spark.SparkException: Exception thrown in awaitResult: 
    at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:226)
    at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75)
    at org.apache.spark.rpc.RpcEnv.setupEndpointRefByURI(RpcEnv.scala:101)
    at org.apache.spark.rpc.RpcEnv.setupEndpointRef(RpcEnv.scala:109)
    at org.apache.spark.deploy.worker.Worker$$anonfun$org$apache$spark$deploy$worker$Worker$$tryRegisterAllMasters$1$$anon$1.run(Worker.scala:253)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Connection from spark-submit2/10.96.121.191:7077 closed
    at org.apache.spark.network.client.TransportResponseHandler.channelInactive(TransportResponseHandler.java:146)
    at org.apache.spark.network.server.TransportChannelHandler.channelInactive(TransportChannelHandler.java:108)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:75)
    at io.netty.handler.timeout.IdleStateHandler.channelInactive(IdleStateHandler.java:277)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:75)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:75)
    at org.apache.spark.network.util.TransportFrameDecoder.channelInactive(TransportFrameDecoder.java:182)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:224)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1354)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:245)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:917)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:822)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    ... 1 more

共有1个答案

双恩
2023-03-14

像Istio这样的服务网格需要绑定地址作为0.0.0.0,因此无法在集群模式下运行Spark应用程序,除非您将exlude入站/出站Spark端口添加到配置中。

spark.kubernetes.executor.annotation.traffic.sidecar.istio.io/excludeOutboundPorts=7078,7079
spark.kubernetes.driver.annotation.traffic.sidecar.istio.io/excludeInboundPorts=7078,7079
 类似资料:
  • 我的入口pod无法通过IP访问两个集群IP服务。有很多其他集群IP服务它没有到达困难。包括在同一个命名空间中。另一个pod到达服务没有问题(我在同一个命名空间中尝试了默认后端,一切正常)。 我应该去哪里?以下是我的实际服务,它无法到达第一个,但可以到达第二个: 我的入口吊舱:

  • 我跟踪了服务,当它们部署在localhost中(通过eclipse)时,它们工作得很好。但在部署为单独的docker容器时无法调用rest服务。 我是一个新的docker并且参加了教程来了解这是如何工作的。 祖尔阿皮门路 用户服务 尤里卡注册服务信息 注意:“DE4396A354EA”是“用户服务”的容器id 请提供关于如何解决此问题的指导,并提供任何链接,我可以在这些链接中获得关于在docker

  • 我一直在寻找一个解决办法,但没有找到一个有效的解决办法。 我已经在我的MacBook中使用brew安装了postgres(),并且我目前正在使用brew服务运行它(将postgres显示为正在运行的服务)。但是,当我尝试运行时,我得到以下错误。 PSQL:无法连接到服务器:没有这样的文件或目录是本地运行并接受Unix域套接字“/tmp/.s.pgsql.5432”上的连接的服务器吗? 有人已经解决

  • 问题内容: 上传或提交页面时,我的网站上出现以下错误: mysql_real_escape_string()[function.mysql-real-escape- string]:无法通过套接字’/var/lib/mysql/mysql.sock’连接到本地MySQL服务器(2) 这到底是什么意思? 问题答案: 由于对该错误的调用引发了错误,因此它意味着您没有先调用该错误并将有效的数据库句柄传递

  • 据我所知,我的服务器运行正常,因为我(仅在我自己的计算机上)可以连接到服务器。 当我试图让任何其他计算机连接到它,它从来没有连接,我感到茫然和需要想法。 我使用谷歌chrome连接,就像我之前说的,它工作很好,但只在我的电脑上

  • 我最近尝试用自制软件安装MySQL(),当我尝试运行它时,我遇到以下错误: 错误2002(HY000):无法通过套接字'/tmp/mysql.sock'连接到本地MySQL服务器(2) 没有