将 kubernetes 中的 Spark 上下文 Web ui url 更改为可从集群外部访问的 url

问题描述 投票:0回答:1

大家好,我在

k8s
上遇到了 Apache Spark(版本 3.3.1)的问题。

简而言之: 当我运行该语句时

print(sc.uiWebUrl)

在 pod 内,我会得到一个

URL
,可以从
k8s
集群外部访问。 比如:

http://{{my-ingress-host}}

长话短说: 我想在

k8s
上为 Apache Spark 创建一个工作区,其中驱动程序的 pod 就是我工作的 workspace。我想让客户端使用
pyspark-shell
或使用
pyspark
python 库运行 Apache Spark。

无论哪种方式,我都希望 UI 的 Web URL 是可从外部世界(

k8s
集群外部)访问的 URL。 为什么?因为
UX
,我想让我的客户的生活更轻松。

因为我在

k8s
上运行,所以我的Apache Spark程序的部分配置是:

spark.driver.host={{driver-service}}.{{drivers-namespace}}.svc.cluster.local
spark.driver.bindAddress=0.0.0.0

因此,这段代码的输出:

print(sc.webUiUrl)

将是:

http://{{driver-service}}.{{drivers-namespace}}.svc.cluster.local:4040

同样在 pyspark-shell 中,也会显示相同的地址。

所以我的问题是,有没有办法将 ui web url 的主机更改为我在

ingress
中定义的主机,以使我的客户的生活更轻松? 所以新的输出将是:

http://{{my-defined-host}}

我想确保尽可能调整解决方案的其他要点:

  • 我的 k8s 集群中没有
    nginx
    入口。也许我有一个
    HAPROXY
    入口。但我希望尽可能最少与我的入口实现耦合。
  • 我希望客户端需要尽可能最少配置 Apache Spark。
  • 我希望在创建上下文时设置 Spark 上下文的 ui web url,这意味着在
    pyspark-shell
    显示欢迎屏幕之前。
  • 我尝试过弄乱
    ui.proxy
    配置,但没有帮助。有时会让事情变得更糟。

提前感谢大家,任何帮助将不胜感激。

apache-spark kubernetes pyspark configuration spark-ui
1个回答
0
投票

您可以通过设置

SPARK_PUBLIC_DNS
环境变量将 Web UI 的主机更改为您想要的主机。这需要在驱动程序上完成,因为 Web UI 在驱动程序上运行。

设置该环境变量的方法有多种,但如果您使用

spark-submit
,您可以执行以下操作:

bin/spark-submit \
   --class ... \
   --master k8s://... \
   ....
   ....
   ....
   --conf spark.kubernetes.driverEnv.SPARK_PUBLIC_DNS=YOUR_VALUE_HERE
   ...
© www.soinside.com 2019 - 2024. All rights reserved.