提问者:小点点

使用kubernetes卷作为本地火花目录供执行程序溢出


我正在库伯内特斯(版本1.21)上运行火花3.1.3。

我正在尝试使用以下配置在我的执行器上安装库伯内特斯PVC,灵感来自火花文档:

--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.[VolumeName].options.claimName=OnDemand
--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.[VolumeName].options.storageClass=someClaimName
--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.[VolumeName].options.sizeLimit=100Gi
--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.[VolumeName].mount.path=//local-data
--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.[VolumeName].mount.readOnly=false

[VolumeName]位对我的问题至关重要。

第一个测试:非本地卷

我的第一个测试是[VolumeName]==test,所以该块的第一行是:

--conf spark.kubernetes.executor.volumes.persistentVolumeClaim.test.options.claimName=OnDemand

这成功地在我的执行程序中的/local-data挂载了100Gi的卷!唯一的问题是我的执行程序仍然没有将其用作本地目录来写入数据。这是有道理的,因为文档指定如果您希望您的执行程序使用k8s卷作为本地目录,则[VolumeName]必须以spack-local-di-开头。

第二次测试:本地卷

所以我的下一个测试是让[VolumeName]==spack-local-dir-1

执行此操作后,我在kubectl get event中获取以下日志:

0s          Warning   FailedScheduling         pod/eng-47c8e482f8775c25-exec-1                                  0/30 nodes are available: 30 persistentvolumeclaim "eng-47c8e482f8775c25-exec-1-pvc-0" not found.
0s          Normal    ProvisioningSucceeded    persistentvolumeclaim/eng-47c8e482f8775c25-exec-1-pvc-0          Successfully provisioned volume pvc-2ad06d14-1eaf-41c2-8e50-4a07b87fd7c4 using kubernetes.io/vsphere-volume
0s          Normal    Scheduled                pod/eng-47c8e482f8775c25-exec-1                                  Successfully assigned spark-namespace/eng-47c8e482f8775c25-exec-1 to fe5ab9bb-69a7-4a3b-9230-3a7cd01e4f18
0s          Normal    SuccessfulAttachVolume   pod/eng-47c8e482f8775c25-exec-1                                  AttachVolume.Attach succeeded for volume "pvc-2ad06d14-1eaf-41c2-8e50-4a07b87fd7c4"
0s          Normal    Pulling                  pod/eng-47c8e482f8775c25-exec-1                                  Pulling image "our-repo/bbi-dios/spark:3.1.3"
0s          Normal    Pulled                   pod/eng-47c8e482f8775c25-exec-1                                  Successfully pulled image "our-repo/bbi-dios/spark:3.1.3" in 97.72301ms
0s          Normal    Created                  pod/eng-47c8e482f8775c25-exec-1                                  Created container spark-kubernetes-executor
0s          Normal    Started                  pod/eng-47c8e482f8775c25-exec-1                                  Started container spark-kubernetes-executor

不知何故,当我试图将我的一些卷作为本地卷挂载时,这似乎出错了。

第三次测试:本地卷,第二种方式

然后我尝试用另一种方式指定本地目录,通过在执行器中设置SPARK_LOCAL_DIRS环境变量。所以,我简单地使用[VolumeName]==test(与我的第一个测试相同)并添加了一行额外的行:

--conf spark.executorEnv.SPARK_LOCAL_DIRS=/local-data

这应该会导致执行程序写入该位置。这仍然会出现与我的第二个测试相同的问题。

所以似乎有什么东西阻止了我在火花执行器中使用挂载的卷作为本地目录。有人知道这里会出什么问题吗?

多谢了一堆!


共1个答案

匿名用户

我遇到的问题是,我的挂载卷被挂载只读权限,即使我设置火花. kubernetes.执行器.卷。持久卷声明。[卷名].挂载.readOnly=false

在这篇SO文章中,我问了如何解决这个问题,这个问题得到了明确的回答。