簡體   English   中英

如何從 spark-submit 訪問 Spark Kubernetes 集群上的 kubectl 轉發端口?

[英]How to access the kubectl forwarded port on Spark Kubernetes cluster from spark-submit?

我有一個在 inhouse-kubernetes 集群上運行的 Spark 集群(由 Rancher 管理)。 我們公司和集群的配置不允許從以下位置訪問服務:

spark://SERVICE_NAME.namespace.svc.domain.....

我們使用Big data Europe 的 yaml 文件創建了集群,並進行了一些明顯的更改,例如資源。

鏈接到他們的github:

https://github.com/big-data-europe/docker-spark#kubernetes-deployment

這種方法最好的一點是我們不需要手動設置任何東西,部署,服務等。我們只需運行yaml文件,一切都在幾秒鍾內為我們構建。

Yaml 文件: https ://raw.githubusercontent.com/big-data-europe/docker-spark/master/k8s-spark-cluster.yaml

要訪問 spark-ui,我只需創建一個入口對象,我們就可以從外部訪問它。 涼爽的!

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: spark-master
    labels:
      app: spark-master
    annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/hsts: "false"
spec:
    rules:
    - host: RANDOM_NAME.NAMESPACE.svc.k8s.CLUSTER.DOMAIN.com
      http:
        paths:
          - path: /
            backend:
              serviceName: spark-master
              servicePort: 8080

我想要做的是,通過我工作站上的 CLI訪問由 BDE 給定的 yaml文件創建的 Spark 集群 因為我們還不支持服務方式(正確的方式)所以我嘗試使用端口轉發方式

一些見解:

  • 火花大師在7077
  • spark UI 在 8080 上(可通過 ingress 對象訪問)
  • 火花休息在 6066

kubectl -n <NAMESPACE> port-forward pods/spark-master-64bbbd7877-6vt6w 12345:7077

我的kubectl配置為連接到集群(感謝 Rancher 准備使用的配置文件)

但是當我嘗試通過以下方式向集群提交作業時:


spark-submit --class org.apache.spark.examples.SparkPi --master spark://localhost:12345 --deploy-mode cluster \
--conf  spark.kubernetes.namespace=NAMESPACE \
--conf \spark.kubernetes.authenticate.submission.oauthToken=MY_TOKEN  \
--conf spark.kubernetes.file.upload.path=/temp C:\opt\spark\spark-3.0.0-bin-hadoop2.7\examples\jars\spark-examples_2.12-3.0.0.jar 1000

我收到錯誤

Forwarding from 127.0.0.1:12345 -> 7077
Forwarding from [::1]:12345 -> 7077
Handling connection for 12345
E1014 13:17:45.039840   13148 portforward.go:400] an error occurred forwarding 12345 -> 7077: error forwarding port 7077 to pod f83c6b40d5af66589976bbaf69537febf79ee317288a42eee31cb307b03a954d, uid : exit status 1: 2020/10/14 11:17:45 socat[5658] E connect(5, AF=2 127.0.0.1:7077, 16): Connection refused

簡而言之,提交命令不會連接到從我的 CLI 部署的 Spark 集群。

我可以按照 BDE 文檔中的說明使用kubectl命令運行 spark submit 命令,但出於某些原因,我們的要求是通過 CLI 進行連接。

在這方面的幫助將不勝感激。 我的令牌和其他東西在k8s模式下是正確的,我可以輕松地 ping 集群(使用 url)

EDIT:

我假設 spark-master 進程創建了一個不明確綁定到地址 0.0.0.0 而是只綁定到它的主地址的套接字。 由於端口轉發將使用 pod 內的環回地址,因此連接失敗。並且我需要重新配置 spark-master 進程以顯式綁定到 0.0.0.0。 如果這是問題,有人知道這樣做的方法嗎?

感謝您提出問題,尤其是您的編輯。 它幫助我找出問題並解決它。

我正在使用 bitnami helm chart 在我的集群上安裝 spark。 問題是 spark 守護進程是通過參數“--host”啟動的,參數“--host”預填充了“hostname -f”,因此不會對 localhost 做出反應。 我通過將主 pod“SPARK_MASTER_HOST”的環境變量設置為 0.0.0.0 解決了位納米圖的問題。

編輯:此解決方案仍然存在問題,即啟動作業時的向后連接不起作用,因為主機假定請求的來源是 127.0.0.1 :(。可能需要 vpn 隧道才能解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM