我有一个k8s集群。现在,我想在k8s集群上部署spark作业,我想知道是否需要在所有辅助计算机上安装和配置spark。
您可以使用Cluster Mode
启动Spark Pi。
Cluster Mode
通过将$ ./bin/spark-submit \ --master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port> \ --deploy-mode cluster \ --name spark-pi \ --class org.apache.spark.examples.SparkPi \ --conf spark.executor.instances=5 \ --conf spark.kubernetes.container.image=<spark-image> \ local:///path/to/examples.jar
命令行参数传递给--master
或通过在应用程序的配置中设置spark-submit
来指定的Spark master,必须是格式为spark.master
的URL。即使使用HTTPS端口443,也必须始终指定该端口。使用k8s://<api_server_host>:<k8s-apiserver-port>
前缀为主字符串将导致Spark应用程序在Kubernetes集群上启动,并通过k8s://
与API服务器联系。如果URL中未指定HTTP协议,则默认为api_server_url
。例如,将主机设置为https
等效于将其设置为k8s://example.com:443
,但是要在其他端口上不使用TLS进行连接的情况下,主机将设置为k8s://https://example.com:443
。在Kubernetes模式下,默认情况下使用
k8s://http://example.com:8080
或spark.app.name
的--name
参数指定的Spark应用程序名称来命名创建的Kubernetes资源,例如驱动程序和执行程序。因此,应用程序名称必须由小写字母数字字符spark-submit
和-
组成,并且必须以字母数字字符开头和结尾。您也可以设置
.
从Spark 2.4.0开始,可以在客户端模式下在Kubernetes上运行Spark应用程序。当您的应用程序在客户端模式下运行时,驱动程序可以在pod内或物理主机上运行。在客户端模式下运行应用程序时,建议考虑以下因素:客户端模式网络
Spark执行程序必须能够通过主机名和可从Spark执行程序路由的端口连接到Spark驱动程序。 Spark在客户端模式下工作所需的特定网络配置将因设置而异。如果您在Kubernetes Pod中运行驱动程序,则可以使用
Client Mode
允许通过稳定的主机名从执行程序路由您的驱动程序Pod。部署无头服务时,请确保服务的标签选择器仅与驱动程序容器匹配,而与其他容器不匹配;建议为您的驾驶舱分配足够唯一的标签,并在无头服务的标签选择器中使用该标签。通过Client Mode
指定驱动程序的主机名,并将Spark驱动程序的端口指定为headless service。...有关在Kubernetes上运行Spark的完整文档,
spark.driver.host
。
spark.driver.port
也对here给出了很好的解释