2
我有一個應用程序可以並行執行處理要從Google Storage(我的項目存儲桶)下載的數據的Python對象。該羣集使用Google Dataproc創建。問題是數據永遠不會被下載!我寫了一個測試程序來試圖理解這個問題。 我寫了下面的功能將文件從桶複製,看看是否對工人創建文件不工作:使用Spark(Python)和Dataproc從Google Storage下載文件
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)])
我已經從一個Python外殼調用它測試了這個功能,它的工作原理。但是,當我使用火花提交運行下面的代碼,這些文件未下載(但不會引發錯誤):
# ...
filesRDD = sc.parallelize(fileList)
filesRDD.foreach(lambda myFile: copyDataFromBucket(myFile,remoteBucketFolder,'/tmp/output')
filesRDD.foreach(lambda myFile: execTouch(myFile,'/tmp/output')
# ...
的execTouch功能工程(我可以看到每個工人的文件),但copyDataFromBucket功能什麼也沒做。
那麼我做錯了什麼?
一個精度:我使用Anaconda2包來運行我的應用程序,但我必須將CLOUDSDK_PYTHON變量設置爲/ usr/bin/python以使gsutil能夠工作 – ma3oun
if你用bash或shell運行'gsutil -m cp ...',目前工作嗎? – Kristian
是的,它在主人和每個工人身上都能正常工作。 – ma3oun