Spark on k8s 试用步骤
背景:
Spark 2.3.0 开始支持使用k8s 作为资源管理原生调度spark。使 用k8s原生调度的spark主要有以下好处:
采用k8s原生调度,不再需要二级调度,直接使用k8s原生的调度模块,实现与其他应用的混布;
资源隔离:任务可以提交到指定的namespace,这样可以复用k8s原生的qouta限制,实现任务资源的限制;
资源分配:可以指定每个spark任务的指定资源限制,任务之间更加隔离;
用户自定义:用户可以在spark基础镜像中打上自己的application, 更加灵活和方便;
试用条件:
一个k8s 1.7版本以上的集群,由于spark on k8s 任务提交后实际上在集群中是以custom resources和custom controller的形式,故你需要一个1.7+版本的k8s集群,同时需要启动k8s dns和RBAC。
下载spark2.3.0版本https://www.apache.org/dyn/closer.lua/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz
试用步骤:
制作镜像:
以下为基础镜像,包含了spark和官方exemples,本文的试用使用的是该官方的exemple。
cd /path/to/spark-2.3.0-bin-hadoop2.7 docker build -t <your.image.hub/yourns>/spark:2.3.0 -f kubernetes/dockerfiles/spark/Dockerfile . docker push <your.image.hub/yourns>/spark:2.3.0
用户可以将自己的application和该基础镜像打在一起,并设置启动main class以及application的路径就可以实现用户application的任务提交。
任务提交:
bin/spark-submit \ --master k8s://<k8s apiserver address> \ --deploy-mode cluster \ --name spark-pi \ --class org.apache.spark.examples.SparkPi \ --conf spark.executor.instances=5 \ --conf spark.kubernetes.container.image=<your.image.hub/yourns>/spark:2.3.0 \ local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar
更多默认的参数配置请参考:1.spark running on k8s
注意以下坑:
spark 自带的exemples是用jdk1.8编译的,如果启动过程中提示Unsupported major.minor version 52.0请更换jdk版本;
spark-submit默认会去~/.kube/config去加载集群配置,故请将k8s集群config放在该目录下;
spark driver 启动的时候报错Error: Could not find or load main class org.apache.spark.examples.SparkPi
spark 启动参数的local://后面应该跟你自己的spark application在容器里的路径;
spark driver 启动抛异常Caused by: java.net.UnknownHostException: kubernetes.default.svc: Try again, 请保证 k8d let节点间网络互通;
spark driver 启动抛异常system: serviceaccount: default: default" cannot get pods in the namespace "default, 权限问题,执行一下两条命令:
kubectl create rolebinding default-view --clusterrole=view --serviceaccount=default:default --namespace=defalut 和
kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default --namespace=default 后就可以了
任务执行:
spark demo跑了起来后,可以看到spark-submit相当于起了一个controller, 用于管理单个spark任务,首先会创建该任务的service和driver,待driver运行后,会启动exeuctor,个数为--conf spark.executor.instances=5 指定的参数,待执行完毕后,submit会自动删除exeuctor, driver会用默认的gc机制清理。
Reference: spark running on k8s issue #34377
本文转自CSDN-Spark on k8s 试用步骤
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
k8s RBAC 多租户权限控制实现
访问到权限分两部分 1.Authenticating认证授权配置由kube-apiserver管理 这里使用的是 Static Password File方式。apiserver启动yaml里配置basic-auth-file即可,容器 启动apiserver的话要注意这个文件需要是在容器内能访问到的。(可以通过挂载文件,或者在已经挂载的路径里增加配置文件)basic-auth-file文件格式见官方文档https://kubernetes.io/docs/admin/authentication/#static-password-file注意password在第一个,之前没注意被卡了很久。修改了文件以后需要重启apiserver才能生效。这里kubectldelete删除pod有问题,使用docker命令查看apiserver容器其实没有重启。解决方案是使用dockerkill杀掉容器。自动重启。 [root@tensorflow1 ~]# curl -u admin:admin "https://localhost:6443/api/v1/pods" -k { "kind": "S...
- 下一篇
kubernetes(k8s)以及涉及组件简单介绍
什么是kubernetes? Kubernetes是一个全新的基于容器技术的分布式架构领先方案。是Google内部集群管理系统Borg的一个开源版本。直到2015年4月,随着论文发布,才被众人熟知。Kubernetes是一个开放的开发平台。不局限于任何一种语言,没有限定任何编程接口。是一个完备的分布式系统支撑平台。它构建在docker之上,提供应用部署、维护、扩展机制等功能,利用Kubernetes能方便地管理跨机器运行 容器化的应用。Kubernetes在大概两三周前,正式发布1.5版本。 主要功能体现在如下:–使用Docker对应用程序包装、实例化–以集群的方式运行、管理跨机器的容器–解决Docker跨机器容器之间的通讯问题–Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态基本概念: Kubernetes中的大部分概念Node、Pod、Replication Controller、Service等都可以看作一种“资源对象”,几乎所有的资源对象都可以通过kubectl工具(API调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,ku...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境