首页 > 解决方案 > 如何从 Kubernetes 访问 Spark shell?

问题描述

我使用helm chart在 GCE 中将 Spark 部署到 Kubernetes。根据 values.yaml 中的默认配置,Spark 被部署到 path /opt/spark。我已经通过运行检查 Spark 是否已成功部署kubectl --namespace=my-namespace get pods -l "release=spark"。有 1 个 master 和 3 个 worker 在运行。

但是,当我尝试通过spark-submit --version从 Google 云控制台执行来检查 Spark 版本时,它返回了-bash: spark-submit: command not found.

我已导航到该/opt目录,但该/spark文件夹已丢失。我应该怎么做才能打开 Spark shell 终端并执行 Spark 命令?

标签: bashscalaapache-sparkkubernetesgoogle-cloud-platform

解决方案


您可以通过检查服务来验证

kubectl get services -n <namespace>

您可以端口转发特定服务并尝试在本地运行以检查

kubectl port-forward svc/<service name> <external port>:<internal port or spark running port>

在本地,您可以尝试运行 spark 终端,它将连接到在 GCE 实例上运行的 spark。

如果您查看 helm chart 文档,还有 UI 选项,您也可以通过端口转发访问 UI

在 pod 内通过 SSH 访问

Kubectl exec -it <spark pod name> -- /bin/bash

在这里你可以直接运行 spark 命令。spark-submit --version

访问用户界面

如果您在 helm chart 中启用了 UI,则通过端口转发访问 UI。

kubectl port-forward svc/<spark service name> <external port>:<internal port or spark running port>

外部负载均衡器

这个特定的掌舵图也可以创建External Load balancer您也可以External IP使用

Kubectl get svc -n <namespace>

访问外壳

如果想通过 LB IP & port 连接

./bin/spark-shell --conf spark.cassandra.connection.host=<Load balancer IP> spark.cassandra-connection.native.port=<Port>

使用端口转发创建连接

kubectl port-forward svc/<spark service name> <external(local) port>:<internal port or spark running port>

./bin/spark-shell --conf spark.cassandra.connection.host=localhost spark.cassandra-connection.native.port=<local Port>

推荐阅读