Spark on k8s Operator 部署安装
Spark on k8s Operator 部署安装
1. 背景
受限于公司内网环境,无法构建梯子及部分网络策略,不能使用网络资源直接部署,需要手动编译安装
2. 环境准备
centos 7
Kubernetes > 1.18
helm > 3
KubeSphere > 3.0
git
harbor
golang(第4步可选)
3. 镜像编译
受限于内网网络环境及大陆网络情况,采用阿里云容器镜像服务-------海外机器构建镜像并拉取到本地,上传harbor
1) 编写spark基础镜像工程
vim DockerfileFROM gcr.io/spark-operator/spark:v3.0.0:wq
2) 编写spark-operator基础镜像工程
vim DockerfileFROM gcr.io/spark-operator/spark-operator:v1beta2-1.2.0-3.0.0:wq
3) 将上述两个dockerfile分别上传至github不同项目工程, eg:
①https://github.com/leihongyang/gcr.io-spark-operator-spark-v3.0.0
②https://github.com/leihongyang/gcr.io-spark-operator-spark-operator-v1beta2-1.2.0-3.0.0
4) 采用阿里云容器镜像服务海外构建
https://cr.console.aliyun.com/cn-hangzhou/instance/repositories
第一步,创建镜像仓库(仓库名称和摘要任意填);
第二步,选择github并绑定自己账号,从git仓库中找到之前的项目工程,创建
第三步,在刚刚的镜像仓库中构建规则,并勾选海外构建,立即构建
另一个镜像同样如此操作
5) 拉取镜像至本地,并修改tag上传至内网harbor
拉取操作如图
## 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark:1.0
## 镜像更名,修改仓库
docker tag registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark:1.0 xxxxx:8000/spark-operator/spark:v3.0.0
## 推送镜像
docker push xxxxx:8000/spark-operator/spark:v3.0.0
## 删除老镜像
docker image rm registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark:1.0
4. spark-operator安装
1) 下载源码
git clone http://10.10.12.117/bigdata/spark-on-k8s-operator.git
cd spark-on-k8s-operator
2) 安装,有两种方式
① yaml 手动模式
a. 修改manifest/spark-operator.yaml文件中的image值为之前创建的spark-operator镜像
## 安装crd
kubectl apply -f manifest/crds
## 安装operator的服务账号与授权策略
kubectl apply -f manifest/spark-operator-rbac.yaml
## 安装spark任务的服务账号与授权策略
kubectl apply -f manifest/spark-rbac.yaml
## 安装spark-on-k8s-operator
kubectl apply -f manifest/spark-operator.yaml
② helm chart模式
修改charts/spark-operator-charts/values.yaml文件中的image.repository值为harbor中的spark-operator镜像目录
## 修改相关镜像参数后
helm install -n spark spark charts/spark-operator-chart
3) 安装完成
可以看到启动了一个sparkoperator的deployment,伴随着sparkoperator pod,负责监听spark请求
# kubectl get pods -n spark
NAME READY STATUS RESTARTS AGE
sparkoperator-7c57499f7b-6rwcf 1/1 Running 0 23s
4) 运行示例
运行官方自带示例
## 修改examples/spark-pi.yaml中的容器镜像为我们之前创建的spark镜像
## 如下所示, 主要修改spec.image 和 imagePullPolicy
## 其中,需要注意namespace和serviceAccount的对应关系,如果运行不成功,大概率是这两个导致的权限问题apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:name: spark-pinamespace: spark
spec:type: Scalamode: clusterimage: "xxxxx:8000/spark-operator/spark:v3.0.0"imagePullPolicy: IfNotPresentmainClass: org.apache.spark.examples.SparkPimainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0.jar"sparkVersion: "3.0.0"restartPolicy:type: Nevervolumes:- name: "test-volume"hostPath:path: "/tmp"type: Directorydriver:cores: 1coreLimit: "1200m"memory: "512m"labels:version: 3.0.0serviceAccount: sparkoperatorvolumeMounts:- name: "test-volume"mountPath: "/tmp"executor:cores: 1instances: 2memory: "512m"labels:version: 3.0.0volumeMounts:- name: "test-volume"mountPath: "/tmp"
然后运行kubectl执行创建任务
kubectl apply -f examples/spark-pi.yaml
查看结果
# kubectl get pods -n spark-operator
NAME READY STATUS RESTARTS AGE
spark-pi-driver 0/1 Completed 0 2m
sparkoperator-7c57499f7b-6rwcf 1/1 Running 0 23m# kubectl get sparkapplications -n spark-operator
NAME AGE
spark-pi 2m
容器运行完毕,可以查看容器日志,了解任务详细情况
# kubectl logs spark-pi-driver -n spark-operator
...
...
...
Pi is roughly 3.140515702578513
...## 在许多info日志中看到我们的输出结果
5. sparkctl编译(可选)
# 启用 Go Modules 功能
export GO111MODULE=on
# 配置 GOPROXY 环境变量
export GOPROXY=https://goproxy.io
# 或者
export GOPROXY=https://mirrors.aliyun.com/goproxy/
# 编译sparkctl工具
cd sparkctl && go build -o sparkctl && cp sparkctl /usr/bin/
这个工具是spark-operator在kubectl上的二次封装
更加规范化,简洁的查看spark任务生命周期
6. FAQ
问题1:
User "system:serviceaccount:sparknamespace:spark" cannot list resource "sparkapplications" in API group "sparkoperator.k8s.io" at the cluster scope
原因: sparknamespace 命名空间中的spark对这个api没有访问权限
解决:查看用户是否存在于这个命名空间中,查看用户是否绑定了clusterrole权限(需要edit,或者完全使用manifest下的授权策略)
问题2:只有driver启动,没有excutor执行
原因:一个可能是k8s apiserver未正常运行,一个是镜像有问题。
解决:在apiserver运行正常的情况下,检查spark task driver的日志,若command是spark-operator则是镜像使用错误,换成spark镜像,正确的command是spark-submit
7. 监控
## 需要额外获取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark_monitor:1.0
docker tag registry.cn-hangzhou.aliyuncs.com/leihongyang/gcr_spark_monitor:1.0 xxxxx:8000/spark-operator/spark:v3.0.0-gcs-prometheus
## 然后将运行的spark job中yaml的image从
## xxxxx:8000/spark-operator/spark:v3.0.0
## 改为
## xxxxx:8000/spark-operator/spark:v3.0.0-gcs-prometheus
## 在spec下添加以下内容
============================
monitoring:exposeDriverMetrics: trueexposeExecutorMetrics: trueprometheus:jmxExporterJar: "/prometheus/jmx_prometheus_javaagent-0.11.0.jar"port: 8090
============================
## 重新apply[root@k8s-master-1 spark-on-k8s-operator]# kubectl get pods -n spark-operator -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
spark-pi-d457cb78fd3a5777-exec-1 1/1 Running 0 52s 179.10.196.4 k8s-master-1 <none> <none>
spark-pi-driver 1/1 Running 0 66s 179.10.69.244 k8s-worker-3 <none> <none>
sparkoperator-7c57499f7b-6rwcf 1/1 Running 3 13d 179.10.140.6 k8s-worker-2 <none> <none># curl 179.10.69.244:8090
...
## 获得的就是本次spark任务的运行时资源使用明细
1/1 Running 0 66s 179.10.69.244 k8s-worker-3 <none> <none>
sparkoperator-7c57499f7b-6rwcf 1/1 Running 3 13d 179.10.140.6 k8s-worker-2
curl 179.10.69.244:8090
…
获得的就是本次spark任务的运行时资源使用明细
Spark on k8s Operator 部署安装相关推荐
- K8S—二进制部署安装(包含UI界面设置)
安装步骤 一.准备工作 二.部署单master K8S 2.1 部署etcd集群 master 节点 node 节点(1/2) 查看集群状态 2.2 部署docker引擎 node 节点(1/2) 2 ...
- 【网址收藏】spark on k8s operator github地址
https://github.com/GoogleCloudPlatform/spark-on-k8s-operator
- Spark on K8S及history服务部署
Spark on K8S环境部署细节 https://www.cnblogs.com/lanrish/p/12267623.html spark history helm部署 https://gith ...
- Spark On K8S(Standalone模式部署)
Spark on K8S 的几种模式 Standalone:在 K8S 启动一个长期运行的集群,所有 Job 都通过 spark-submit 向这个集群提交 Kubernetes Native:通过 ...
- 使用Spring Boot Operator部署SpringBoot到K8S
点击关注公众号,实用技术文章及时了解 来源:qingmu.io/2020/04/08/ Spring-Boot-Operator-User-Guide 前言 在Kubernetes中部署spring ...
- 通过helm在k8s上部署spark(伪集群版)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 首先要求你的k8s支持helm.阿里云自带的k8s已经包含了对helm的支持.关于服务器k8s的部分这里不讨论,我们考论如何用一个已经好的k8s来进行 ...
- Spark Operator 部署及入门示例
关于存算分离 目前企业级的大数据应用主流还是采用Yarn或者Mesos来进行资源分配和运行调度的,例如我行目前采用Yarn来进行作业调度,并使用HDFS作为大数据的存储平台,这是典型的计算和存储紧耦合 ...
- 1.24版本k8s集群安装部署rook-ceph存储集群
一.初始花基本环境 1.主机环境信息 系统 主机名 主机IP地址 配置说明 AlmaLinux release 8.6 (Sky Tiger) master01 192.168.3.31 k8s管理节 ...
- Spark集群完全分布式安装部署
Spark集群完全分布式安装部署 下载安装 配置Spark 1spark-envsh配置 2slaves配置 3profile配置 复制到其他节点 测试 总结 Spark集群完全分布式安装部署 本文中 ...
最新文章
- 简单总结一下 XSS
- 76. 最小覆盖子串(滑动窗口)
- 一个易用、易部署的Python遗传算法库
- Linux SHELL 学习随笔--for 循环
- 大神微服务笔记全过程博客
- 高德地图 map.setcenter 动画_娄底三维动画制作公司价格2020行情-立艺数字
- 实验四+067+冯艳芳
- 堆(基本介绍,代码实现,以及例题)
- 【优化求解】基于matlab GUI模拟退火算法求解全局最大值最小值问题【含Matlab源码 1242期】
- c语言 指针 地址溢出,堆栈溢出,指针在C中
- 编译cwm-recovery(含部分修改步骤)[转]
- 作为一名优秀的软件测试工程师,需要具备哪些能力?
- Linux系统下安装screen
- cbrt c语音_如何在C语言中实现功能重载?
- Android手机模拟器旋转快捷键
- [高数][高昆轮][高等数学上][第一章-函数与极限]09.连续函数的运算和函数的连续性...
- 维特比算法在隐马尔可夫模型中的应用
- 支付宝面对面支付(境外)
- Python爬虫4.2 — ajax(动态网页数据抓取)用法教程
- YOLO系列目标检测算法详解
热门文章
- 上市公司内审工作内容有哪些
- 滴滴 webapp 5.0 Vue 2.0 重构经验分享
- 查看git密码_新电脑配置git和github
- 四川大学江安校区计算机学院照片,几张图告诉你四川大学江安校区颜值到底有多高...
- access查询mysql_2017计算机二级Access数据库生成表查询教程
- cmd查看CPU信息
- 快速掌握 jQuery 操作 HTML 节点
- 基于 Mixup 数据增强的 LSTM-FCN 时间序列分类学习记录
- AI绘画 Midjourney
- Git 提示Your branch is up-to-date with 'origin/master'