Docker Kubernetes上的Spark:如何处理缺少的配置文件夹

Docker Kubernetes上的Spark:如何处理缺少的配置文件夹,docker,apache-spark,kubernetes,Docker,Apache Spark,Kubernetes,我正试图在kubernetes集群中运行spark,如下所述 它适用于一些基本脚本,如提供的示例 我注意到,尽管“docker image tool.sh”将config文件夹添加到映像构建中,但它会被一个配置映射卷的装载覆盖 我有两个问题: spark使用什么源生成配置映射,或者如何编辑它?据我所知,在删除最后一个pod时,卷会被删除,在创建新pod时,卷会重新生成 如何处理无法添加到简单配置映射的spark-env.sh脚本 关于Kubernetes,最初不明显的一点是,更改ConfigMa

我正试图在kubernetes集群中运行spark,如下所述

它适用于一些基本脚本,如提供的示例

我注意到,尽管“docker image tool.sh”将config文件夹添加到映像构建中,但它会被一个配置映射卷的装载覆盖

我有两个问题:

  • spark使用什么源生成配置映射,或者如何编辑它?据我所知,在删除最后一个pod时,卷会被删除,在创建新pod时,卷会重新生成
  • 如何处理无法添加到简单配置映射的spark-env.sh脚本

  • 关于Kubernetes,最初不明显的一点是,更改ConfigMap(一组配置值)不会被检测为对部署(一个Pod或一组Pod应如何部署到集群上)或引用该配置的Pod的更改。这种期望可能会导致无意中过时的配置持续存在,直到Pod规范发生更改。这可能包括由于自动缩放事件而新创建的Pod,甚至在崩溃后重新启动,从而导致整个集群的错误配置和意外行为

    注意:这不会影响作为卷装载的ConfigMaps,每个节点上运行的kubelet会定期同步这些卷。

    要更新configmap,请执行以下操作:

    $ kubectl replace -f file.yaml
    
    必须先创建ConfigMap,然后才能使用它。所以我建议首先修改configMap,然后重新部署pod

    请注意,使用ConfigMap作为卷装载的容器将不会接收ConfigMap更新

    该资源提供了一种将配置数据注入POD的方法。存储在ConfigMap对象中的数据可以在ConfigMap类型的卷中引用,然后由Pod中运行的容器化应用程序使用

    引用configMap对象时,只需在卷中提供其名称即可引用它。您还可以自定义用于ConfigMap中特定条目的路径

    更新卷中已使用的ConfigMap时,最终也会更新投影的密钥。Kubelet正在检查装载的ConfigMap是否在每次定期同步时都是新的。但是,它正在使用基于本地ttl的缓存来获取ConfigMap的当前值。因此,从更新ConfigMap到将新密钥投影到pod的总延迟可以与kubelet同步周期(默认为1分钟)+kubelet中ConfigMaps缓存的ttl(默认为1分钟)一样长

    但我强烈建议您使用。它支持在Spark Pod中装载卷和配置映射以进行自定义,这是自2.4版起Apache Spark中不提供的功能

    SparkApplication可以使用可选字段.spec.sparkConfigMap(其值为ConfigMap的名称)指定存储Spark配置文件(如Spark-env.sh或Spark-defaults.conf)的Kubernetes ConfigMap。假设ConfigMap与SparkApplication位于同一命名空间中。K8S上的Spark提供配置选项,允许将某些卷类型安装到驱动程序和执行器吊舱中。卷从Kubernetes端“交付”,但可以从Spark中的本地存储交付。如果没有将卷设置为本地存储,Spark会在洗牌和其他操作期间使用临时暂存空间将数据溢出到磁盘。使用Kubernetes作为资源管理器时,将为spark.local.dir或环境变量spark_local_DIRS中列出的每个目录创建一个emptyDir卷。如果没有明确指定目录,则会创建默认目录并进行相应配置


    有用的博客:。

    configmap卷与普通卷不同。因此,请使用所需的值更新configmap。只需重新部署吊舱。这将更新配置。当您为此特定应用程序启动spark应用程序时,会创建configmap(卷),并立即使用。实际上没有时间去改变它,你也不能事先创建它。示例:您有一个驱动程序pod“spark-pi-15711121880383-driver”服务器执行器pods“spark-pi-15711121880383-exec-X”(X是执行器的编号)。它们共享一个配置图“spark-pi-15711121880383-driver-conf-Map”。该映射在启动应用程序(“spark submit--master…”)时生成,仅用于该应用程序。我不认为你可以预测配置映射的名称,你可以修改配置映射并重新处理pod,这正是我的建议。