2

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 각 노동자의 파일을 볼 수 있습니다) 아무것도하지 않는다.

그래서 내가 뭘 잘못하고 있니?

+0

정밀도 : 응용 프로그램을 실행하기 위해 Anaconda2 패키지를 사용하지만 gsutil이 작동하려면 CLOUDSDK_PYTHON 변수를/usr/bin/python으로 설정해야합니다. – ma3oun

+0

if 당신은 bash 나 쉘에서'gsutil -m cp ...'를 실행해야만했습니다. 현재 작동합니까? – Kristian

+0

네, 마스터와 각 작업자 모두 잘 작동합니다. – ma3oun

답변

1

문제가 분명히 Spark 컨텍스트였습니다. 전화로 "하둡 FS"에 의해 호출 "인 gsutil"를 교체하면 해결 : 나는 또한 테스트가 버킷에 데이터를 보내 않았다

from subprocess import call 
from os.path import join 

def copyDataFromBucket(filename,remoteFolder,localFolder): 
    call(["hadoop","fs","-copyToLocal",join(remoteFolder,filename),localFolder] 

. 하나는 "-copyToLocal"을 "-copyFromLocal"로 바꿔야 만합니다.