我正在库伯内特斯(版本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
这应该会导致执行程序写入该位置。这仍然会出现与我的第二个测试相同的问题。
所以似乎有什么东西阻止了我在火花执行器中使用挂载的卷作为本地目录。有人知道这里会出什么问题吗?
多谢了一堆!
我遇到的问题是,我的挂载卷被挂载只读权限,即使我设置火花. kubernetes.执行器.卷。持久卷声明。[卷名].挂载.readOnly=false
。
在这篇SO文章中,我问了如何解决这个问题,这个问题得到了明确的回答。