这就是datalab系列之一(spark快速搭建)
Posted 埋头过坎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这就是datalab系列之一(spark快速搭建)相关的知识,希望对你有一定的参考价值。
前面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.
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类型的,如下:
~]# 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
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集群就完成了, 当然后面还要做一些配置, 至于如何使用等信息我们后面再介绍。
以上是关于这就是datalab系列之一(spark快速搭建)的主要内容,如果未能解决你的问题,请参考以下文章
Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战