【问题标题】:How spark get utilized the nodes of kubernetes when running on pod?spark在pod上运行时如何利用kubernetes的节点?
【发布时间】:2021-02-10 16:12:37
【问题描述】:

我正在学习 spark,但我对在 Kubernetes 集群上运行包含 spark 代码的 docker 感到困惑。

  • 我读到spark 使用多个节点(服务器),它可以在不同的节点上运行代码,以便更快地完成作业(并在数据太大时使用每个节点的内存)

  • 另一方面,我了解到 Kubernetes pod(包含 docker/containers)在一个节点上运行。

例如,我从docker 运行以下spark 代码:

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

一些笔记和提醒(根据我的理解):

  • 使用map命令时,num数组的每个值都映射到不同的spark节点(slave worker)
  • k8s pod 在一个节点上运行
  1. 所以我很困惑当 pod 在一个节点上运行时 spark 如何利用多个节点?
  2. spark slave workers 是否在不同的节点上运行,这就是运行上述代码的 pod 如何与这些节点通信以利用 spark 框架?

【问题讨论】:

    标签: docker apache-spark kubernetes


    【解决方案1】:

    在 Kubernetes 上运行 Spark 时,您可以通过多种方式进行设置。最常见的方法是将 Spark 设置为在客户端模式下运行。

    基本上,Spark 可以在 Pod 上的 Kubernetes 上运行。然后,只要一切配置正确,拥有 k8s 主节点端点的应用程序本身就能够生成自己的工作 Pod .

    此设置需要在 Kubernetes 上部署 Spark 应用程序(通常使用 StatefulSet,但不是必须的)以及无头 ClusterIP 服务(使工作 Pod 能够与主应用程序通信所必需的)产生了它们)

    您还需要为 Spark 应用程序提供所有正确的配置,例如 k8s master 端点、Pod 名称和其他参数以进行设置。

    还有其他设置 Spark 的方法,没有义务生成工作 Pod,您可以在本地运行代码的所有阶段(并且配置很简单,如果您有少量数据执行的小作业,您不必'不需要工人)

    或者您可以在 Kubernetes 集群的外部执行 Spark 应用程序,因此不在 pod 上......而是给它 Kubernetes 主端点,以便它仍然可以在集群上生成工作人员(又名集群模式)

    您可以在 Spark 文档中找到更多信息,该文档主要解释了设置的所有内容 (https://spark.apache.org/docs/latest/running-on-kubernetes.html#client-mode) 并且可以在此处阅读有关 StatefulSet 及其对无头 ClusterIP 服务的使用 (https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)

    【讨论】:

      猜你喜欢
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2018-10-09
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      相关资源
      最近更新 更多