我在k8s
上使用Apache Spark(3.3.1版)时遇到了问题。
简而言之:当我运行语句时,
print(sc.uiWebUrl)
在pod中,我会得到一个URL
,它可以从k8s
集群外部访问。例如:
http://{{my-ingress-host}}
说来话长:我想在k8s
上为Apache Spark创建一个工作区,其中驱动程序的pod是我工作的工作区。我想让客户端使用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
的配置,但没有帮助。有时会把事情搞得更糟。
谢谢大家,任何帮助都将不胜感激。
1条答案
按热度按时间nx7onnlm1#
您可以通过设置
SPARK_PUBLIC_DNS
环境变量将Web UI的主机更改为所需的主机。这需要在驱动程序上完成,因为Web UI在驱动程序上运行。要设置Web UI的端口,可以使用
spark.ui.port
配置参数。因此,例如使用
spark-submit
将两者放在一起,就像下面这样: