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

Posted 埋头过坎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这就是datalab系列之一(spark快速搭建)相关的知识,希望对你有一定的参考价值。

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

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

    

[root@host01 ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONhost01 Ready master 4d v1.19.3host02 Ready master 4d v1.19.3host03 Ready <none> 4d v1.19.3host04 Ready <none> 4d v1.19.3host05 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 sparkURL 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.


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.4NAME: my-sparkLAST DEPLOYED: Wed Nov 25 17:16:44 2020NAMESPACE: defaultSTATUS: deployedREVISION: 1

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

[root@host01 ~]# kubectl get pod |grep sparkmy-spark-livy-cff48c5fb-58vxk 1/1 Running 0 29hmy-spark-master-556b7bb9bd-47rlh 1/1 Running 0 29hmy-spark-worker-667f4dbc4f-8hfr4 1/1 Running 0 29hmy-spark-worker-667f4dbc4f-96727 1/1 Running 0 29hmy-spark-zeppelin-6b5997ccd8-hx5ws 1/1 Running 0 29h
[root@host01 ~]# kubectl get svc |grep sparkmy-spark-livy LoadBalancer ip01 <pending> 8998:27681/TCP 29hmy-spark-master ClusterIP ip02 <none> 7077/TCP 29hmy-spark-webui NodePort ip03 <none> 8080:8988/TCP,7077:31919/TCP 29hmy-spark-workerlb LoadBalancer ip04 <pending> 8085:17634/TCP,8081:28055/TCP,4040:30994/TCP,8888:12091/TCP,8889:24687/TCP,8080:30519/TCP 29hmy-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-webuiName: my-spark-webuiNamespace: defaultLabels: app.kubernetes.io/managed-by=Helm chart=spark-1.0.4 component=my-spark-spark-master heritage=Helm release=my-sparkAnnotations: meta.helm.sh/release-name: my-spark meta.helm.sh/release-namespace: defaultSelector: component=my-spark-spark-masterType: NodePortIP: ip01Port: web-port 8080/TCPTargetPort: 8080/TCPNodePort: web-port 8988/TCPEndpoints: ip02:8080Port: spark-port 7077/TCPTargetPort: 7077/TCPNodePort: spark-port 31919/TCPEndpoints:                ip03:7077Session Affinity: NoneExternal Traffic Policy: ClusterEvents: <none>

   在浏览器访问如下:

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

以上是关于这就是datalab系列之一(spark快速搭建)的主要内容,如果未能解决你的问题,请参考以下文章

Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战

精通Spark系列弹性分布式数据集RDD快速入门篇

精通Spark系列弹性分布式数据集RDD快速入门篇

精通Spark系列弹性分布式数据集RDD快速入门篇

SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解