spark如何在pod上运行时利用kubernetes的节点?

cu6pst1q  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(344)

我正在学习spark,我对运行docker感到困惑,因为docker上包含spark代码 Kubernetes 集群。
我读到了 spark 利用多个节点(服务器),它可以在不同的节点上运行代码,以便更快地完成作业(当数据太大时,使用每个节点的内存)
另一方面,我看到kubernetes pod(包含dockers/containers)运行在一个节点上。
例如,我运行以下命令 spark 代码来自 docker :

  1. num = [1, 2, 3, 4, 5]
  2. num_rdd = sc.parallelize(num)
  3. double_rdd = num_rdd.map(lambda x: x * 2)

一些笔记和提醒(据我所知):
当使用 map 命令的每个值 num 数组Map到不同的spark节点(从属工作节点) k8s 在一个节点上运行
所以我很困惑,当pod在一个节点上运行时,spark是如何利用多个节点的?
是吗 spark slave workers 运行在不同的节点上,这就是运行上述代码的pod如何与这些节点通信以利用spark框架?

2sbarzqh

2sbarzqh1#

当你在kubernetes上运行spark时,你有一些方法来进行设置。最常见的方法是将spark设置为在客户机模式下运行。
基本上spark可以在豆荚上的kubernetes上运行。。然后,应用程序本身(拥有k8s主程序的端点)就能够生成自己的worker pod,只要一切都配置正确。
此设置需要的是在kubernetes上部署spark应用程序(通常使用statefulset,但不是必须的)以及无头clusterip服务(这是使worker pods能够与产生它们的主应用程序通信所必需的)
您还需要为spark应用程序提供所有正确的配置,例如k8s masters端点、pod名称和其他设置参数。
还有其他方法可以设置spark,没有义务生成worker pod,您可以在本地运行代码的所有阶段(而且配置很简单,如果您有少量数据要执行的小作业,您不需要worker)
或者您可以从kubernetes集群外部执行spark应用程序,因此不必在pod上执行。。但是给它kubernetes主端点,这样它仍然可以在集群上生成worker(又称集群模式)
你可以在spark文档中找到更多的信息,它主要解释了所有的设置(https://spark.apache.org/docs/latest/running-on-kubernetes.html#client-模式),并可以在此处阅读有关statefulset及其无头clusterip服务的用法(https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)

相关问题