sc.texfile("file:///.../myLocalFile.txt")我尝试在集群上运行 a并java.io.FileNotFoundException在工作人员上运行。
所以我用谷歌搜索,找到sc.addFile/SparkFiles.get将文件上传给每个工人。
所以这是我的代码:
sc.addFile("file:///.../myLocalFile.txt")
val input = sc.textFile(SparkFiles.get("myLocalFile.txt"))
Run Code Online (Sandbox Code Playgroud)
我看到驱动程序节点将文件上传到目录中/tmp,然后我的工作人员得到了,FileNotFoundException因为:
SparkFiles.get()是在驱动程序节点上运行,而不是在工作节点上运行(我通过添加 来确认println)。我尝试使用spark-submit --files选项,发现了完全相同的问题。
那么我做错了什么?我想要的只是sc.textFile()在一个集群上。
到目前为止,我确信需要 PVC 才能访问 PV,就像 k8s文档中的示例一样:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
Run Code Online (Sandbox Code Playgroud)
但后来我在Docker 文档中看到可以使用以下语法(使用 nfs 的示例):
kind: Pod
apiVersion: v1
metadata:
name: nfs-in-a-pod
spec:
containers:
- name: app
image: alpine
volumeMounts:
- name: nfs-volume
mountPath: /var/nfs # Please change the destination you like the share to be mounted too
command: ["/bin/sh"]
args: ["-c", "sleep 500000"]
volumes: …Run Code Online (Sandbox Code Playgroud) 鉴于以下 PVC 和 PV:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: packages-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
volumeName: packages-volume
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: PersistentVolume
metadata:
name: packages-volume
namespace: test
spec:
claimRef:
name: packages-pvc
namespace: test
accessModes:
- ReadWriteMany
nfs:
path: {{NFS_PATH}}
server: {{NFS_SERVER}}
capacity:
storage: 1Gi
persistentVolumeReclaimPolicy: Retain
Run Code Online (Sandbox Code Playgroud)
如果我创建 PV,那么 PVC,它们会绑定在一起。但是,如果我删除 PVC 然后重新创建它,它们不会绑定(pvc 挂起)。为什么?