摘要:在本文的例子中,你將使用和創建一個功能型集群。第二步啟動你的服務是集群的服務。這可能需要一些時間來拉取鏡像并啟動。注將含有到的超鏈接。這些鏈接是不能正常工作的鏈接將嘗試連接到集群,而不會自動代理的集群。快速使用使用連接到驅動并運行。
在本文的例子中,你將使用 Kubernetes 和 Docker 創建一個功能型Apache Spark集群。
你將使用Spark standalone模式 安裝一個 Spark master服務和一組Spark workers。
對于已熟悉這部分內容的讀者,可以直接跳到 tl;dr 章節。
源代碼Docker 鏡像主要基于 https://github.com/mattf/dock...。 源碼托管在 https://github.com/kubernetes...
步驟零:準備工作本示例假定你已經具備以下條件:
● 有已安裝并運行的 kubernetes集群。
● 已在某個path路徑中安裝了kubectl 命令行工具。
● 已運行了一個spark-master的k8s service,可以使用‘spark-master’域名在kube DNS實例中自動發現該服務。
更多詳細內容可在源碼的Dockerfile中查看。
第一步:創建命名空間$ kubectl create -f examples/spark/namespace-spark-cluster.yaml
現在列出所有命名空間:
$ kubectl get namespaces NAME LABELS STATUS defaultActive spark-cluster name=spark-cluster Active
對于kubectl 客戶端使用的命名空間,我們定義一個環境并使用它:
$ kubectl config set-context spark --namespace=spark-cluster --cluster=${CLUSTER_NAME} --user=${USER_NAME} $ kubectl config use-context spark
你可以在Kubernetes配置文件~/.kube/config中查看集群名稱以及用戶名稱。
第二步:啟動你的master服務Master service 是 Spark集群的master服務。
使用 examples/spark/spark-master-controller.yaml 文件來創建一個replication controller 運行Spark Master服務。
$ kubectl create -f examples/spark/spark-master-controller.yaml replicationcontroller "spark-master-controller" created
然后,用examples/spark/spark-master-service.yaml 文件來創建一個邏輯上的服務端點,Spark workers可以使用該服務來訪問Master pod
$ kubectl create -f examples/spark/spark-master-service.yaml service "spark-master" created
然后你可以為Spark Master WebUI 創建一個服務:
$ kubectl create -f examples/spark/spark-webui.yaml service "spark-webui" created
查看 Master 是否能運行和可訪問
$ kubectl get podsNAME READY STATUS RESTARTS AGEspark-master-controller-5u0q5 1/1 Running 0 8m
檢查日志以查看master的狀態。(使用上一條指令輸出的pod名稱)
{{{$ kubectl logs spark-master-controller-5u0q5 starting org.apache.spark.deploy.master.Master, logging to /opt/spark -1.5.1-bin-hadoop2.6/sbin/../logs/spark--org.apache.spark.deploy.master. - Master-1-spark- master-controller-g0oao.out Spark Command: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -cp / opt/spark-1.5.1-bin-hadoop2.6/sbin/../conf/:/opt/spark-1.5.1-bin- hadoop2.6/lib/spark-assembly-1.5.1-hadoop2.6.0.jar:/opt/spark-1.5.1 -bin-hadoop2.6/lib/datanucleus-rdbms-3.2.9.jar:/opt/spark-1.5.1-bin - -hadoop2.6/lib/datanucleus-core-3.2.10.jar:/opt/spark-1.5.1-bin- - hadoop2.6/lib/datanucleus-api-jdo-3.2.6.jar -Xms1g -Xmx1g org.apache.spark.deploy.master.Master --ip spark-master --port 7077 - --webui-port 8080 ======================================== 15/10/27 21:25:05 INFO Master: Registered signal handlers for [TERM, HUP, INT] 15/10/27 21:25:05 INFO SecurityManager: Changing view acls to: root 15/10/27 21:25:05 INFO SecurityManager: Changing modify acls to: root 15/10/27 21:25:05 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(root); users with modify permissions: Set(root) 15/10/27 21:25:06 INFO Slf4jLogger: Slf4jLogger started 15/10/27 21:25:06 INFO Remoting: Starting remoting 15/10/27 21:25:06 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkMaster@spark-master:7077] 15/10/27 21:25:06 INFO Utils: Successfully started service "sparkMaster" on port 7077. 15/10/27 21:25:07 INFO Master: Starting Spark master at spark://spark-master: 7077 15/10/27 21:25:07 INFO Master: Running Spark version 1.5.1 15/10/27 21:25:07 INFO Utils: Successfully started service "MasterUI" on port 8080. 15/10/27 21:25:07 INFO MasterWebUI: Started MasterWebUI at http:// spark-master:8080 15/10/27 21:25:07 INFO Utils: Successfully started service on port 6066. 15/10/27 21:25:07 INFO StandaloneRestServer: Started REST server for submitting applications on port 6066 15/10/27 21:25:07 INFO Master: I have been elected leader! New state: ALIVE}}}
確認master正常運行后,你可以使用k8s集群代理訪問Spark WebUI:
kubectl proxy --port=8001
此時可以通過http://localhost:8001/api/v1/...訪問UI
第三步:啟動 Spark workersSpark workers 在 Spark 集群中扮演十分重要的角色。他們為程序提供執行資源和數據緩存功能。
Spark workers 需要 Master service處于運行狀態。
使用examples/spark/spark-worker-controller.yaml 文件創建一個replication controller來管理 worker pods 。
$ kubectl create -f examples/spark/spark-worker-controller.yaml replicationcontroller "spark-worker-controller" created
查看 workers 是否正常運行
如果你啟動Spark WebUI,當worker就緒后應該出現在UI 中。(這可能需要一些時間來拉取鏡像并啟動pods。)你也可以用以下方式查詢狀態:
$ kubectl get pods NAME READY STATUS RESTARTS AGE spark-master-controller-5u0q5 1/1 Running 0 25m spark-worker-controller-e8otp 1/1 Running 0 6m spark-worker-controller-fiivl 1/1 Running 0 6m spark-worker-controller-ytc7o 1/1 Running 0 6m $ kubectl logs spark-master-controller-5u0q5 [...] 15/10/26 18:20:14 INFO Master: Registering worker 10.244.1.13:53567 with 2 cores, 6.3 GB RAM 15/10/26 18:20:14 INFO Master: Registering worker 10.244.2.7:46195 with 2 cores, 6.3 GB RAM 15/10/26 18:20:14 INFO Master: Registering worker 10.244.3.8:39926 with 2 cores, 6.3 GB RAM
假如上一節中kubectl proxy仍在運行,你應該也能在UI中看到workers。注:UI 將含有到 worker Web UI的超鏈接。 這些鏈接是不能正常工作的(鏈接將嘗試連接到集群IP,而Kubernetes不會自動代理的集群IP)。
第四步:在 Spark 集群中啟動 Zeppelin UI來加載工作任務Zeppelin UI pod可以用來在Spark集群加載jobs,加載操作既可以通過web端的筆記本完成,也可以通過傳統的Spark命令行方式完成。更多細節見 Zeppelin和 Spark architecture架構。
$ kubectl create -f examples/spark/zeppelin-controller.yaml replicationcontroller "zeppelin-controller" created
Zeppelin 需要 Master service處于運行狀態。
查看 Zeppelin 是否正常運行
$ kubectl get pods -l component=zeppelin NAME READY STATUS RESTARTS AGE zeppelin-controller-ja09s 1/1 Running 0 53s第五步:操作集群
現在你有兩個選擇:可以通過圖形界面訪問Spark 集群,也可以保持使用CLI。
快速使用pyspark
使用 kubectl exec連接到Zeppelin 驅動并運行pipeline。
使用 kubectl exec連接到Zeppelin 驅動并運行pipeline。
$ kubectl exec zeppelin-controller-ja09s -it pyspark Python 2.7.9 (default, Mar 1 2015, 12:57:24) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. Welcome to ____ __ / __/__ ___ _____/ /__ _ / _ / _ `/ __/ "_/ /__ / .__/\_,_/_/ /_/\_ version 1.5.1 /_/ Using Python version 2.7.9 (default, Mar 1 2015 12:57:24) SparkContext available as sc, HiveContext available as sqlContext. >>> sc.textFile("gs://dataflow-samples/shakespeare/*").map (lambda s: len(s.split())).sum() 939193
恭喜你,你把所有莎士比亞戲劇中的單詞個數統計出來了。
使用圖形界面,亮瞎你的眼!
使用之前創建的Zeppelin pod,設置WebUI的轉發端口:
$ kubectl port-forward zeppelin-controller-ja09s 8080:8080
這條指令將訪問localhost 8080端口的請求轉發到容器中的8080端口。然后你可以通過https://localhost:8080/ 訪問Zeppelin。
創建一個“New Notebook”。在其中輸入:
%pyspark print sc.textFile("gs://dataflow-samples/shakespeare/*").map (lambda s: len(s.split())).sum()
結論
現在你已為Spark master,Spark workers 和 Spark driver創建了service和replication controller。你可以用這個例子來進行下一步,并開始使用剛才創建的Apache Spark集群,更多信息見Spark 文檔。
tl;dr
kubectl create -f examples/spark
設置后:
kubectl get pods # Make sure everything is running kubectl proxy --port=8001 # Start an application proxy, if you want to see the Spark Master WebUI kubectl get pods -lcomponent=zeppelin # Get the driver pod to interact with.
此時Master UI 可以通過http://localhost:8001/api/v1/...訪問。
你可以通過kubectl exec使用傳統的spark-shell / spark-subsubmit / pyspark 命令行與Spark 集群進行交互,或者如果你想與Zeppelin交互:
kubectl port-forward zeppelin-controller-abc123 8080:8080 & kubectl port-forward zeppelin-controller-abc123 8080:8080 &
然后訪問http://localhost:8080/
使用Spark 的已知問題
● 該方案提供了一個僅限于集群網絡的Spark 配置,這意味著Spark master 只能通過集群service訪問。如果你需要在 zeppelin pod 中使用除了Zeppelin 或spark-submit 之外的外部客戶端來提交 jobs ,你需要為客戶端提供一種訪問examples/spark/spark-master-service.yaml 的方式。參見service以了解更多信息。
使用 Zeppelin 的已知問題
● Zeppelin pod 很大,因此拉取鏡像可能會消耗一段時間,拉取速度取決于你的網絡條件。Zeppelin pod 的尺寸是我們正要解決的問題,詳見問題# 17231。
● 第一次運行Zeppelin 時, pipeline可能會花費很多時間(約一分鐘)。似乎需要相當多的時間來加載。
● 在GKE環境中, kubectl port-forward 不可能長時間保持穩定狀態。如果你發現Zeppelin變成斷開狀態,port-forward很可能出現故障,并需要重啟。詳見# 12179。
本文由時速云翻譯,如若轉載,需注明轉載自“時速云”
原文鏈接:
https://github.com/kubernetes...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32498.html
摘要:是一個集群管理器,提供了有效的跨分布式應用或框架的資源隔離和共享,可以運行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統。你在這里可以看到使用的列表和有什么關聯嗎是一個為分布式應用提供一致性服務的軟件,而是一個分布式應用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...
摘要:是一個集群管理器,提供了有效的跨分布式應用或框架的資源隔離和共享,可以運行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統。你在這里可以看到使用的列表和有什么關聯嗎是一個為分布式應用提供一致性服務的軟件,而是一個分布式應用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...
閱讀 3324·2023-04-25 16:25
閱讀 3837·2021-11-15 18:01
閱讀 1609·2021-09-10 11:21
閱讀 3016·2021-08-02 16:53
閱讀 3087·2019-08-30 15:55
閱讀 2494·2019-08-29 16:24
閱讀 2104·2019-08-29 13:14
閱讀 1037·2019-08-29 13:00