工作日誌——基於k8s搭建spark叢集

店家小二發表於2018-12-16

使用k8s搭建spark叢集

這幾天嘗試在k8s中搭建spark叢集,踩了一些坑,跟大 家分享一下。

Spark的元件介紹可參考官方文件

大資料生態圈簡介可參考這篇文章

基於k8s官方示例

具體參考github k8s

FAQ

映象拉取問題

該方法需要訪問gcr.io下載映象(國內一般需要vpn),需要注意的是gcr.io/google_containers/spark:1.5.2_v1映象不能使用index.tenxcloud.com/google_containers/spark替換,替換後拉取映象時會出現“docker: filesystem layer verification failed”錯誤。

可將zeppelin-controller.yaml使用的映象修改為index.tenxcloud.com/google_containers/zeppelin:v0.5.6_v1

webui service使用問題

文件中的kubectl proxy –port=8001指令只能監聽127.0.0.1的代理請求,不適用於測試環境和虛擬機器環境,因為使用的ip地址不是127.0.0.1。

此時使用kubectl proxy –port=8001 –address=

pyspark示例執行錯誤

示例中的資料來源存在問題,可使用本地檔案執行,例如“sc.textFile(“/opt/spark/licenses/*”).map(lambda s: len(s.split())).sum()”

Zeppelin webui使用問題

同樣只能通過localhost或127.0.0.1訪問,可以通過將zeppelin service型別配置為NodePort。參考spark-20160427.zip中的zeppelin-service.yaml。

使用方法為:

使用zeppelin-service.yaml建立zeppelin service,可通過spec.ports.nodePort指定埠,不指定時為埠隨機。

使用kubectl describe svc zeppelin|grep NodePort指令檢視埠。

在瀏覽器中訪問任意節點ip:NodePort訪問zeppelin webui。

點選“Create new note”,輸入Note Name。

在新頁面中執行以下內容:

%pyspark

print sc.textFile(“/opt/spark/licenses/*”).map(lambda s: len(s.split())).sum()

該示例會統計zeppelin本地/opt/spark/licenses/目錄下的所有檔案的單詞數量,幾秒後會看到執行結果。

基於tenxcloud映象庫搭建

需要根據k8s原始碼中的examples/spark/下的yaml檔案搭建,將所有yaml檔案複製到工作目錄下。

修改spark-master-controller.yaml和spark-worker-controller.yaml:

* spec.template.spec.containers.command均修改為“/start.sh”

* spec.template.spec.containers.images分別修改為index.tenxcloud.com/google_containers/spark-master:1.5.2_v1和index.tenxcloud.com/google_containers/spark-worker:1.5.2_v1

zeppelin-controller.yaml使用的映象修改為index.tenxcloud.com/google_containers/zeppelin:v0.5.6_v1

修改完成後,按k8s官方示例的步驟啟動即可。

簡易的spark-driver

由於zeppelin映象非常大,拉取會消耗很多時間。可以使用下面的spark-driver.yaml建立一個簡易的spark-driver:

kind: ReplicationController

apiVersion: v1

metadata:

name: spark-driver

spec:

replicas: 1

selector:

component: spark-driver

template:

metadata:

labels:

component: spark-driver

spec:

containers:

– name: spark-driver

image: index.tenxcloud.com/google_containers/spark-driver:1.5.2_v1

resources:

requests:

cpu: 100m

建立後,使用kubectl exec <spark-driver-podname> -it pyspark即可訪問。

本文轉自CSDN-工作日誌——基於k8s搭建spark叢集


相關文章