저는 Python 스크립트를 사용하여 Linux의 외부 디스크에서 읽기/쓰기를 시도하고 있는데 훌륭하게 작동합니다. 작업 스케줄러를 사용하여 Python 프로그램을 실행할 때 문제가 발생합니다.
저는 이 모든 것을 Rocks Cluster(Linux 버전은 CentOS 6.5)에서 실행하고 있으며 작업 스케줄러는 Sun Grid Engine(SGE)입니다. 모든 사용자가 읽기 및 쓰기 액세스를 가질 수 있도록 외부 디스크를 마운트했습니다. 디스크를 마운트하는 데 사용되는 fstab의 줄은 다음과 같습니다.
/dev/sdb1 /mnt/drive ntfs-3g auto,users,permissions 0 0
실패한 간단한 예를 들어 보겠습니다. 다음 Python 프로그램(simple_write.py):
#!/usr/bin/env python2.7
f = open('/mnt/drive/sean/test.txt', 'w')
f.write('Writing in the file')
f.close()
다음과 같이 터미널에서 실행하면 제대로 작동합니다.
python2.7 /home/sean/simple_write.py
그런 다음 작은 bash 스크립트(job_submit.sh)를 만들어 다음과 같이 스케줄러(SGE)에 제출하면:
#!/bin/bash
#
#$ -cwd
#$ -j y
#$ -S /bin/bash
python2.7 /home/sean/simple_write.py
터미널에서 제출:
qsub job_submit.sh
그러면 다음과 같은 (Python) 오류가 발생합니다.
IOError: [Errno 2] No such file or directory: '/mnt/drive/sean/test.txt'
(a) 터미널에서 simple_write.py를 직접 실행하거나 (b) simple_write.py의 쓰기 위치를 외부 디스크가 아닌 로컬 디스크의 위치로 변경하면 문제를 해결할 수 있습니다(파일을 읽을 때 유사한 오류가 발생함). ) / 쓰기 대신 디렉토리). 그래서 스케줄러가 마운트된 드라이브와 잘 작동하지 않는 것 같습니다. 확실히 문제가 있는 것 같지만 다음에 무엇을 시도해야 할지 모르겠습니다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
클러스터 작업 스케줄러(예: Sun Grid Engine, HTCondor, SLURM 등)는 마스터 또는 작업 제출 호스트 이외의 시스템에서 작업을 실행할 수 있습니다. 따라서 마스터 또는 작업 제출 호스트에만 노출되는 파일 시스템은 클러스터의 작업 실행 시스템에서 사용하지 못할 수도 있습니다. 작업 스케줄러에는 작업이 실행 중인 시스템을 나타내는 로그나 플래그가 있을 수 있으며, 작업을 제출 ls
하거나 df
작업이 실행 중인 시스템에서 사용 가능한 파일 시스템을 확인하여 작업을 실행할 수도 있습니다 . 사용할 수 없는 NFS 하드 마운트가 있는 경우, 디렉터리나 어떤 파일 시스템을 사용할 수 있는지 확인하기 위해 작업이 중단됩니다(클러스터 소프트웨어에 따라 다름). 파일 시스템을 사용할 수 없는 경우 NFS(또는 다른 네트워크 파일 시스템)를 통해 사용할 수 있도록 해야 합니다. 또 다른 옵션은 작업 스케줄러 소프트웨어가 필요한 파일을 작업이 실행될 호스트에 복사하도록 하는 것입니다. 단, 이를 수행하는 방법은 사용된 작업 스케줄러에 따라 다르며 출력을 복사해야 할 수도 있습니다. 파일은 다른 곳에 복사됩니다. 작업이 완료되었습니다.)
네트워크 파일 시스템을 복제할지 아니면 의존할지 여부는 데이터 양에 따라 다릅니다. 소량의 데이터는 쉽게 복제할 수 있지만 작업에 필요한 대규모 데이터 저장소는 네트워크 파일 시스템을 사용하는 것이 좋습니다. 또한 다수의 클라이언트는 쉽게 NFS 서버에 과부하를 일으킬 수 있습니다. 출력(특히 임시 출력)은 작업이 실행 중인 시스템의 로컬 파일 시스템에 기록되어야 하며 결과만 NFS 서버에 기록됩니다. .