1

我有一個集羣啓動並運行。我想添加一個步驟來運行我的代碼。代碼本身在單個實例上正常工作。唯一的問題是,我無法讓它解決S3問題。亞馬遜emr從S3提交不工作

aws emr add-steps --cluster-id j-XXXXX --steps Type=spark,Name=SomeSparkApp,Args=[--deploy-mode,cluster,--executor-memory,0.5g,s3://<mybucketname>/mypythonfile.py] 

這正是我應該做的示例。我究竟做錯了什麼?

錯誤,我得到:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown/unsupported param List(--executor-memory, 0.5g, --executor-cores, 2, --primary-py-file, s3://<mybucketname>/mypythonfile.py, --class, org.apache.spark.deploy.PythonRunner) 

Usage: org.apache.spark.deploy.yarn.Client [options] 
Options: 
    --jar JAR_PATH   Path to your application's JAR file (required in yarn-cluster 
          mode) 
    . 
    . 
    . 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Command exiting with ret '1' 

當我指定爲這個代替:

aws emr add-steps --cluster-id j-XXXXX --steps Type=spark,Name= SomeSparkApp,Args=[--executor-memory,0.5g,s3://<mybucketname>/mypythonfile.py] 

我得到這個錯誤,而不是:

Error: Only local python files are supported: Parsed arguments: 
    master     yarn-client 
    deployMode    client 
    executorMemory   0.5g 
    executorCores   2 

編輯:沿時進一步得到我在SSH到集羣后手動創建python文件,並指定如下:

aws emr add-steps --cluster-id 'j-XXXXX' --steps Type=spark,Name= SomeSparkApp,Args=[--executor-memory,1g,/home/hadoop/mypythonfile.py] 

但是,沒有做好這項工作。

任何幫助表示讚賞。這非常令人沮喪,因爲AWS自己的博客https://blogs.aws.amazon.com/bigdata/post/Tx578UTQUV7LRP/Submitting-User-Applications-with-spark-submit上有記錄的方法無效。

+0

您的EMR羣集是否具有適當的IAM權限來訪問'S3'? – Kristian

+1

是的,因爲我可以在S3中完成引導操作。該部分成功。順便說一句 - 當我使用GUI時,它工作。現在真的很沮喪。 :) – Gopala

+0

你有沒有想過這個DId?我們遇到了同樣的問題。如果我使用本地FS的罐子,它可以工作。我通過S3傳入並且失敗。 – luckytaxi

回答

1

我會問,以防萬一,您使用了正確的存儲桶和集羣ID-s?

但無論如何,我有類似的問題,就像我從S3讀取時不能使用--deploy-mode,cluster。 當我在參數中使用--deploy-mode,client,--master,local[4]時,我認爲它工作。但我想我還是需要一些不同的東西,記不太清楚了,但我使出這樣一個解決方案:

首先,我用其中一個shell腳本運行的命令的引導作用:

aws s3 cp s3://<mybucket>/wordcount.py wordcount.py 

然後我添加一個步驟,羣集創建通過我的Go應用程序的SDK,但我可以記得這個信息,給你這樣的CLI命令:

aws emr add-steps --cluster-id j-XXXXX --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=["spark-submit",--master,local[4],/home/hadoop/wordcount.py,s3://<mybucket>/<inputfile.txt> s3://<mybucket>/<outputFolder>/] 
0

我搜索了幾天,終於發現this thread其中規定

PySpark目前只支持本地 文件。但這並不意味着它只能在本地模式下運行;你仍然可以在任何集羣管理器上運行PySpark(儘管只能在客戶端模式下運行)。所有 這意味着您的python文件必須位於本地文件系統上。 直到這被支持,直接的解決方法然後是 將文件複製到本地計算機。