工作日志——基于k8s搭建spark集群

使用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即可访问。

yaml配置参考这里


版权声明:本文为xts_huangxin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。