本期,边肖将为您带来k8s上的spark和k8s上的spark operator的对比。文章内容丰富,从专业角度进行分析和描述。看完这篇文章,希望你能有所收获。
对于目前基于k8s的的spark应用,主要采用两种方式运行
火花在k8s上由火花原生支持
基于k8s算子的k8s算子火花
前者是spark社区引入k8s客户端支持资源管理框架K8S的实现。
后者是k8s社区为支持spark开发的运营商。
k8s上的差异spark在k8s上的操作者社区支持spark社区非官方支持版本的GoogleCloudPlatform要求根据官网安装Spark=2.3,Kubernetes=1.6 Spark 2.3,Kubernetes=1.13。K8s pod创建列表编辑删除的权限是必须的,需要自己编译源代码来构建镜像。构建过程繁琐,k8s管理员需要安装孵化器/sparkoperator,需要Pod的权限创建列表编辑删除才能通过spark submit直接提交。比如在:下,代码1支持客户端和集群模式,k8s上的spark通过yaml配置文件提交,支持客户端和集群模式,提交如代码2。具体参数参考火花操作员配置的优势,以符合火花的方式提交任务。对于习惯了spark的用户来说,更容易使用k8s配置文件提交任务,可重用性强。缺点:运行后,驱动的资源不会自动释放。运行后,驱动程序的资源不会自动释放。对于spark提交方法,无论是客户端提交还是集群提交,都继承了SparkApplication。客户端提交,子类是JavaMainApplication,通过反射运行。对于k8s任务分析,集群管理器是KubernetesClusterManager,与向纱线提交任务的方式没有区别。以集群模式提交。对于k8s任务,spark程序的入口是KubernetesClientApplication,客户端会建立一个clusterIp为None的服务,执行器会和这个服务进行rpc,比如任务提交的交互。并且会构建一个以driver-conf-map为后缀的configMap,在构建spark driver pod时以volumn mount的形式引用,在驱动提交任务时这个文件的内容最终以- properties-file的形式提交给spark driver。因此,spark.driver.host等配置项被传输到驱动程序,同时会建立一个后缀为-hadoop-config的configMap。但是k8s图像怎么区分是运行执行器还是驱动程序呢?一切都在dockerfile(根据hadoop和kerbeors的不同环境配置不同)和entrypoint中,其中shell区分了驱动程序和执行器;采用k8s CRD控制器机制定制CRD,根据操作员SDK监控相应的添加、删除、检查事件。如果监控到对应CRD的创建事件,则根据对应的yaml文件配置项建立pod提交spark任务。具体实施请参考k8s操作员设计上的火花。在集群和客户端模式下提交的具体原则与k8s上的spark一致,因为镜像重用是spark的官方镜像代码1。
-
bin/spark-提交\
-master k8 s ://3359192 . 1688888886
-部署-模式集群\
名字
park-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=2 \
--conf "spark.kubernetes.namespace=dev" \
--conf "spark.kubernetes.authenticate.driver.serviceAccountName=lijiahong" \
--conf "spark.kubernetes.container.image=harbor.k8s-test.uc.host.dxy/dev/spark-py:cdh-2.6.0-5.13.1" \
--conf "spark.kubernetes.container.image.pullSecrets=regsecret" \
--conf "spark.kubernetes.file.upload.path=hdfs:///tmp" \
--conf "spark.kubernetes.container.image.pullPolicy=Always" \
hdfs:///tmp/spark-examples_2.12-3.0.0.jar
code 2 --- apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: dev spec: type: Scala mode: cluster image: "gcr.io/spark-operator/spark:v3.0.0" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.0.0.jar" sparkVersion: "3.0.0" restartPolicy: type: Never volumes: - name: "test-volume" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.0.0 serviceAccount: lijiahong volumeMounts: - name: "test-volume" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.0.0 volumeMounts: - name: "test-volume" mountPath: "/tmp"
上述就是小编为大家分享的spark on k8s与spark on k8s operator的对比是怎样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147376.html