暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

这就是datalab系列之一(spark快速搭建)

埋头过坎 2020-11-26
805

    前面kubespray系列介绍了搭建k8s集群的过程,细心的读者会发现集群的名字叫做datalab。 笔者目前在做数据中台相关的项目, 涉及到从数据采集、ETL、作业调度、流批计算、关系及非关系数据库、数据仓库、关系图谱、微服务、 API网关等一系列技术栈,在结合不同的项目做方案时, 需要对相关的大数据组件进行评测, 所以有了datalab这么一个k8s集群, 目标就是使用k8s作为资源管理/调度层, 来评测相关的存储及计算组件以及微服务架构等, 后续系列文章将分别介绍整个过程。

    当前已经完成了5台机器的k8s集群的搭建, 当前集群状态如下:

    

    [root@host01 ~]# kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    host01 Ready master 4d v1.19.3
    host02 Ready master 4d v1.19.3
    host03 Ready <none> 4d v1.19.3
    host04 Ready <none> 4d v1.19.3
    host05 Ready <none> 4d v1.19.3

     小目标是希望在k8s上搭建小spark集群, 具备相关实验的条件, spark on k8s方案官方有相关的文章介绍(http://spark.apache.org/docs/latest/running-on-kubernetes.html), 从spark 2.3/k8s v1.6开始已经支持了, 官方spark github也有相关的代码   (https://github.com/apache/spark/tree/master/resource-managers/kubernetes), google也提供了operator方式   (https://github.com/GoogleCloudPlatform/spark-on-k8s-operator),  支持通过helm的方式进行安装, k8s版本要求1.3+, spark版本为2.4/3.0, 但目前项目状态为beta状态。

        前面文章介绍利用kubespary快速安装了helm组件, 在helm的官方的hub里面检索了一下spark, 结果如下:

      [root@host01 ~]# helm search hub spark
      URL CHART VERSION APP VERSION DESCRIPTION
      https://hub.helm.sh/charts/banzaicloud-stable/s... 0.0.20 A Helm chart for Spark in Kubernetes
      https://hub.helm.sh/charts/bitnami/spark 4.1.0 3.0.1 Spark is a fast and general-purpose cluster com...
      https://hub.helm.sh/charts/microsoft/spark 1.0.4 2.4.4 Fast and general-purpose cluster computing system.
      https://hub.helm.sh/charts/banzaicloud-stable/s... 0.2.4 A Helm chart for Spark HS in Kubernetes
      https://hub.helm.sh/charts/banzaicloud-stable/s... 0.0.6 A Helm chart for Spark RSS in Kubernetes
      https://hub.helm.sh/charts/banzaicloud-stable/s... 0.0.5 A Helm chart for Spark Shuffle in Kubernetes
      https://hub.helm.sh/charts/banzaicloud-stable/z... 0.0.25 An umbrella Helm chart for Zeppelin and Spark
      https://hub.helm.sh/charts/duyet/spark-shuffle 0.1.0 1.0 A Helm chart to deploy Spark shuffle service de...
      https://hub.helm.sh/charts/gradiant/spark-stand... 0.1.0 2.4.4 Apache Spark™ is a unified analytics engine fo...
      https://hub.helm.sh/charts/ibm-charts/ibm-dsx-dev 1.0.3 IBM Data Science Experience (DSX) Developer Edi...
      https://hub.helm.sh/charts/cetic/fadi 0.2.5 0.2.5 FADI is a Cloud Native platform for Big Data ba...
      https://hub.helm.sh/charts/gradiant/jupyter 0.1.6 6.0.3 Helm for jupyter single server with pyspark sup...
      https://hub.helm.sh/charts/biodatageeks/pysequila 0.1.3 0.1.6 pysequila is an SQL-based solution for large-sc...


          看到微软提供的spark chart

        https://hub.helm.sh/charts/microsoft/spark          1.0.4          2.4.4        Fast and general-purpose cluster computing system.


            在浏览器打开该地址, 可以了解到microsoft提供的spark chart相关信息如下:

        1.  char详情

        a. 1个Spark Master实例, 类型为LoadBalancer, 端口为8080。  (可以修改为NodePort端口)。

        b. 3个Spark Workers实例, 支持水平pod自动缩扩容, 条件为CPU使用率达到100m的一半, 最大扩展为10个pods。  对外暴露了LoadBalancer, 端口为8080、 8888、 8889。

        c. 1个Zeppelin实例(可选), 类型为LoadBalancer, 端口为8080

        d. 1个Livy实例(可选), 类型为LoadBalancer, 端口为8998

        e. 全部基于k8s部署

        2. 提供了一系列的配置选项(包括spark master、 spark webui、 spark worker、 zepplin、livy等),提供了缺省值, 允许用户自定义通过 -f values.yml 或者 --set key=value的方式进行覆盖

        3. 当前支持spark 2.4.4, chart为20200703发布的1.0.4版本, 为stable版本

        4. 安装只需要一条命令, 如果是缺省安装的话不用加-f参数

          helm install --name my-release -f values.yaml stable/spark

              具体的安装过程如下:

            [root@host01 ~]# helm repo add microsoft https://microsoft.github.io/charts/repo/
            "microsoft" has been added to your repositories
            [root@host01 ~]# helm install my-spark microsoft/spark --version 1.0.4
            NAME: my-spark
            LAST DEPLOYED: Wed Nov 25 17:16:44 2020
            NAMESPACE: default
            STATUS: deployed
            REVISION: 1

                稍等片刻就安装完成了。到集群上查看pod和service(安装在default namespace):

              [root@host01 ~]# kubectl get pod  |grep spark
              my-spark-livy-cff48c5fb-58vxk 1/1 Running 0 29h
              my-spark-master-556b7bb9bd-47rlh 1/1 Running 0 29h
              my-spark-worker-667f4dbc4f-8hfr4 1/1 Running 0 29h
              my-spark-worker-667f4dbc4f-96727 1/1 Running 0 29h
              my-spark-zeppelin-6b5997ccd8-hx5ws 1/1 Running 0 29h


              [root@host01 ~]# kubectl get svc |grep spark
              my-spark-livy LoadBalancer ip01 <pending> 8998:27681/TCP 29h
              my-spark-master ClusterIP ip02 <none> 7077/TCP 29h
              my-spark-webui NodePort ip03 <none> 8080:8988/TCP,7077:31919/TCP 29h
              my-spark-workerlb LoadBalancer ip04 <pending> 8085:17634/TCP,8081:28055/TCP,4040:30994/TCP,8888:12091/TCP,8889:24687/TCP,8080:30519/TCP 29h
              my-spark-zeppelin LoadBalancer ip05 <pending> 8080:20953/TCP 29h

                  从pod的状态中看到都运行成功了, 从service的状态来看, 有几个pedding的, 这是因为这些服务缺省的类型都是LoadBalancer的, 笔者的集群目前没有配置这一项, 可以修改为NodePort的, 其中的my-spark-webui服务就是修改为NodePort类型的,如下:

                [root@host01 ~]# kubectl describe svc my-spark-webui
                Name: my-spark-webui
                Namespace: default
                Labels: app.kubernetes.io/managed-by=Helm
                chart=spark-1.0.4
                component=my-spark-spark-master
                heritage=Helm
                release=my-spark
                Annotations: meta.helm.sh/release-name: my-spark
                meta.helm.sh/release-namespace: default
                Selector: component=my-spark-spark-master
                Type: NodePort
                IP: ip01
                Port: web-port 8080/TCP
                TargetPort: 8080/TCP
                NodePort: web-port 8988/TCP
                Endpoints: ip02:8080
                Port: spark-port 7077/TCP
                TargetPort: 7077/TCP
                NodePort: spark-port 31919/TCP
                Endpoints:                ip03:7077
                Session Affinity: None
                External Traffic Policy: Cluster
                Events: <none>


                   在浏览器访问如下:

                    至此, 使用helm在datalab集群快速搭建spark集群就完成了, 当然后面还要做一些配置, 至于如何使用等信息我们后面再介绍。

                文章转载自埋头过坎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论