在Kubernetes中为Spark执行器pod设置新名称

8yoxcaq7  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(106)

我在Kubernetes上使用Apache Zeppelin和Apache Spark。在创建Spark解释器Pod(它作为Spark驱动程序工作)之后,它尝试启动2个执行器。然而,在pod日志中,我遇到了一个错误:

Exception when notifying snapshot subscriber.

java.lang.stringindexoutofboundsexception: string index out of range: 63
...

字符串
从我的理解来看,这个错误与Pod的长名称有关。因此,需要在Kubernetes中为Spark executor pod配置新名称。我将感谢您的帮助解决这个问题!
我希望在更改pod的名称后,错误将得到解决。也有可能有另一种解决方案来解决这个问题。

wlwcrazw

wlwcrazw1#

spark执行器的名称默认基于应用程序名称和kubernetes生成的id,以确保集群中的唯一性+ -exec-$id,其中$id是spark定义的执行器的标识符。
基本上,你需要一个app name + kubernetes generated id size <= 47,因为-exec-[0-9]{1,10}将始终存在,并且有16个字符,接受的总大小为63。
所以,如果你有一个名为foo的应用,执行者pod的名称将是这样的:
foo-de0d85892012de3b-exec-1
foo-de0d85892012de3b-exec-2 ...
现在,此名称不应超过63个字符,因此:

  • 重命名应用程序(spark.app.name),这样应用程序名称+ kubernetes生成的id不会高于47
  • 使用选项spark.kubernetes.executor.podNamePrefix来设置前缀,而不将其留给kubernetes,则名称将为podNamePrefix-exec-[0-9]{1,10}

请注意,第二个选项可能比较棘手,因为您需要确保集群中有一个独特的作业类型,或者您需要在您这边实现唯一性的逻辑。
查看更多https://spark.apache.org/docs/latest/running-on-kubernetes.html#configuration

相关问题