我正在尝试在 EMR 集群中提交 pyspark 作业。作业代码位于放置在 S3 中的压缩包中:
/bin/spark-submit \
--py-files s3://my-dev/scripts/job-launchers/dev/pipeline.zip \
pipeline.job_1.job_1.py -h
这是我的 pipeline.zip 结构
$ unzip -L pipeline.zip
Archive: pipeline.zip
extracting: pipeline/__init__.py
creating: pipeline/common/
inflating: pipeline/common/__init__.py
inflating: pipeline/common/error_message.py
creating: pipeline/job_1/
inflating: pipeline/job_1/__init__.py
inflating: pipeline/job_1/job_1.py
creating: pipeline/job_2/
inflating: pipeline/job_2/__init__.py
inflating: pipeline/job_2/job_2.py
然后将压缩包放入
s3://my-dev/scripts/job-launchers/dev/
$ aws s3 ls s3://my-dev/scripts/job-launchers/dev/pipeline.zip
2024-10-11 17:54:28 13219 pipeline.zip
提交作业后,我收到错误:
/usr/bin/python3:无法打开文件 '/home/hadoop/pipeline.job_1.job_1.py': [Errno 2] 没有这样的文件或 目录
zip 文件似乎没有放置在 PYTHONPATH 中。任何故障排除指示都会有很大帮助。
我认为在 zip 文件中包含所需的依赖项是更常见的,那么你可以将主要的 python 文件放在 zip 之外并像这样调用它
spark-submit --deploy-mode cluster --master yarn --py-files s3://my-dev/scripts/job-launchers/dev/pipeline.zip s3://my-dev/scripts/job-launchers/dev/job.py