【发布时间】:2019-05-24 21:34:59
【问题描述】:
我们有包括 Apache Spark 在内的多种服务的 k8s 部署。所有服务似乎都可以运行。我们的应用程序连接到 Spark 主服务器以使用集群的 k8s DNS 服务提交作业,其中主服务器称为spark-api,因此我们使用master=spark://spark-api:7077,我们使用spark.submit.deployMode=cluster。我们通过 API 提交作业,而不是通过 spark-submit 脚本。
这将在集群上运行“驱动程序”和所有“执行程序”,这部分似乎可以工作,但是我们的应用程序中的启动代码会从某个 Spark 进程回调。由于某种原因,它试图连接到harness-64d97d6d6-4r4d8,这是 pod ID,而不是 k8s 集群 IP 或 DNS。
这个 pod ID 是如何进入系统的? Spark 似乎以某种方式认为它是调用它的服务的地址。不用说任何与 k8s pod ID 的连接都会失败,工作也是如此。
知道 Spark 怎么会认为 pod ID 是 IP 地址或 DNS 名称吗?
顺便说一句,如果我们使用 master=local 运行一个小样本作业,一切都很好,但是使用上述配置执行的同一作业会尝试连接到虚假的 pod ID。
BTW2:调用 pod 的 k8s DNS 是 harness-api
【问题讨论】:
-
您可以通过将容器的主机名设置为
spark-api来欺骗提交过程,因此当它尝试宣传自己时,它将使用该名称,但老实说,您的问题还不清楚关于你故事中的哪个 Pod 是harness-64etcetc -
向 Spark 提交作业的 pod 的 pod ID 为
harness-64etcetc,因此连接从 Spark 返回到启动作业的 pod,但使用这个虚假名称,就好像它是一个地址或名字。
标签: apache-spark kubernetes amazon-eks