Google 스토리지 (내 프로젝트 버킷)에서 다운로드 할 데이터를 처리하는 Python 객체의 실행을 병렬화하는 애플리케이션이 있습니다. 클러스터는 Google Dataproc을 사용하여 생성됩니다. 문제는 데이터가 다운로드되지 않는다는 것입니다! 문제를 이해하고 테스트하기위한 테스트 프로그램을 작성했습니다. 나는 양동이에서 파일을 복사하고 근로자에 파일을 작성하는 작업을 수행합니다 있는지 확인하기 위해 다음 함수를 썼다 : 나는 파이썬 쉘에서 호출하여이 기능을 테스트 한하고 작동Spark (Python) 및 Dataproc을 사용하여 Google 스토리지에서 파일 다운로드
from subprocess import call
from os.path import join
def copyDataFromBucket(filename,remoteFolder,localFolder):
call(["gsutil","-m","cp",join(remoteFolder,filename),localFolder]
def execTouch(filename,localFolder):
call(["touch",join(localFolder,"touched_"+filename)])
. 나는 불꽃 제출하여 다음 코드를 실행할 때, 파일이 다운로드되지 않습니다 (하지만 오류가 발생하지 않습니다) :
# ...
filesRDD = sc.parallelize(fileList)
filesRDD.foreach(lambda myFile: copyDataFromBucket(myFile,remoteBucketFolder,'/tmp/output')
filesRDD.foreach(lambda myFile: execTouch(myFile,'/tmp/output')
# ...
execTouch 기능 작동은하지만 copyDataFromBucket 기능 (I 각 노동자의 파일을 볼 수 있습니다) 아무것도하지 않는다.
그래서 내가 뭘 잘못하고 있니?
정밀도 : 응용 프로그램을 실행하기 위해 Anaconda2 패키지를 사용하지만 gsutil이 작동하려면 CLOUDSDK_PYTHON 변수를/usr/bin/python으로 설정해야합니다. – ma3oun
if 당신은 bash 나 쉘에서'gsutil -m cp ...'를 실행해야만했습니다. 현재 작동합니까? – Kristian
네, 마스터와 각 작업자 모두 잘 작동합니다. – ma3oun