Spark 任务在 K8s 中作为一个 Pod 运行,K8s 负责分配资源,但 Spark 自身的状态监控和反馈是依赖其内部的驱动及执行计划。 此时,我利用 PlantUML 绘制了一个架构图,标记出故障点,帮助我进一步了解状态获取过程中涉及的关键组件: @startuml package "Kubernetes" { [K8s API Server] [K8s Sche
调试Spark on k8s 1. 调试spark-submit 启动命令 /root/spark/jdk1.8.0_171/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -cp /root/spark/spark-2.3.0-bin-hadoop2.7/conf/:/root/spark/spark.deploy.SparkSubmit --master k8s://172.22.12.11:6443 --deploy-mode...
首先根据 spark.master 配置中 scheme 来判断是不是 on k8s。我们上面也看到这个配置的形式为--master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port>。如果是 on k8s 的 cluster 模式,则去加载 Classorg.apache.spark.deploy.k8s.submit.KubernetesClientApplication,并运行其中的start方法。childArgs...
spark.local.dir/SPARK_LOCAL_DIRS 用于Spark 在 Shuffle阶段临时文件及RDD持久化存储等,可以使用逗号分隔配置多个路径对应到不同的磁盘,Spark on Yarn时这个路径默认会被Yarn集群的配置LOCAL_DIRS所取代。在Spark on k8s下,这个路径默认是emptyDir这个Volume所对应...
这样其实就很容易理解了,就是在spark-submit的时候,通过Java的 k8s client 来连接集群的 apiserver url,并且将 Driver Pod 的构建信息,通过POST请求发过去 k8s 集群的 apiserver,apiserver 在收到请求之后,创建出 Driver Pod。Spark 中封装的 k8s client 的主要代码在SparkKubernetesClientFactory,这里构建一个 client...
Standalone:在 K8S 启动一个长期运行的集群,所有 Job 都通过 spark-submit 向这个集群提交 Kubernetes Native:通过 spark-submit 直接向 K8S 的 API Server 提交,申请到资源后启动 Pod 做为 Driver 和 Executor 执行 Job,参考http://spark.apache.org/docs/2.4.6/running-on-kubernetes.html ...
早期Spark 2.2 版本的实验功能,将 shuffle service 作为 DaemonSet 部署到 K8s 集群。 缺陷就是需要用到 hostPath volume 来对接宿主机读写 shuffle 数据,跟宿主机绑死了(只能运行在能满足磁盘需求的宿主机上)。 remote storage for persisting shuffle data(SPARK-25299) ...
Spark从2.3开始支持 Native 的 K8S 作为 resourceManager 了,官网内容很多,就不赘述了,这里主要参考2018年的 Spark Submit 一个 Share,来尝试搭建一套做大数据计算时候经常碰到的一种场景: K8S 化的 Spark Job 和HDFS交互。 2 Practice Share 中有作者分享的几个 github 地址,非常有用,分别是本地部署一个 Kerber...
我们可以通过 Spark Operator[6] 的的方式, 如 kubectl apply -f <YAML file path>来创建和管理 Spark on k8s 应用。这种方式对于 Kubernetes 集群本身及用户而言无疑是最优雅的,而对没有 Kubernetes 经验的这部分 Spark 用户而言,有一定的学习成本。这种方式另一个好处是,Spark 的相关 lib 都可以通过 ...
spark on k8s(kubernetes) 中的DynamicResourceAllocation 参考之前的文章,我们知道在entrypoint中我们在启动executor的时候,我们传递了hostname参数 executor) shift 1 CMD=( ${JAVA_HOME}/bin/java "${SPARK_EXECUTOR_JAVA_OPTS[@]}" -Xms$SPARK_EXECUTOR_MEMORY -Xmx$SPARK_EXECUTOR_MEMORY -cp "$SPARK_CLASSPAT...