我正在运行在AWS Data Pipes的EMRActivity
内部启动的py_spark步骤。目前它失败了,因为它似乎找不到我在zip文件中添加并以--py_files
arg形式发送的python模块。
File "/mnt/tmp/spark-74aaab55-c838-4a7c-8e27-519d6e58fd94/my_py_job.py", line 17, in <module>
from my_package.test import SomeClass
ModuleNotFoundError: No module named 'my_package'
我在手动启动的emr上执行相同的步骤,它运行没有任何问题。甚至控制程序中的命令似乎与参数顺序相同。
来自管道:
INFO startExec 'hadoop jar /var/lib/aws/emr/step-runner/hadoop-jars/command-runner.jar spark-submit s3://bucket.tmp/test-pyspark/my_py_job.py --master yarn --deploy-mode cluster --py-files s3://bucket.tmp/test-pyspark/test.zip --inputs s3://bucket.tmp/test-pyspark/input'
直接:
INFO startExec 'hadoop jar /var/lib/aws/emr/step-runner/hadoop-jars/command-runner.jar spark-submit --master yarn --deploy-mode cluster --py-files s3://bucket.tmp/test-pyspark/test.zip s3://bucket.tmp/test-pyspark/my_py_job.py --inputs s3://bucket.tmp/test-pyspark/input'
我使用argparse
来解析python
脚本的参数。
我在json中指定EMRActivity步骤的方式:
"step": ["command-runner.jar,spark-submit,s3://algoro.tmp/test-pyspark/my_py_job.py,--master,yarn,--deploy-mode,cluster,--py-files,s3://algoro.tmp/test-pyspark/test.zip,--inputs,s3://algoro.tmp/test-pyspark/inpuy"]