如何在 Amazon EMR 上 运行 PySpark 作业(带有自定义模块)?

How to run a PySpark job (with custom modules) on Amazon EMR?

我想要 运行 一个 运行 在我的(本地)机器上运行良好的 PySpark 程序。

我有一个 Amazon Elastic Map Reduce 集群 运行ning,安装了所有必要的依赖项(Spark,Python 来自 PyPI 的模块)。

现在,我如何 运行 使用一些自定义模块的 PySpark 作业?我一直在尝试很多事情可能半天,现在,无济于事。到目前为止我发现的最好的命令是:

/home/hadoop/spark/bin/spark-submit --master yarn-cluster \
    --py-files s3://bucket/custom_module.py s3://bucket/pyspark_program.py 

然而,Python 失败,因为它没有找到 custom_module.py。不过,它似乎试图复制它:

INFO yarn.Client: Uploading resource s3://bucket/custom_module.py -> hdfs://…:9000/user/hadoop/.sparkStaging/application_…_0001/custom_module.py

INFO s3n.S3NativeFileSystem: Opening 's3://bucket/custom_module.py' for reading

这看起来是一个非常基本的问题,但是网络对此非常沉默,包括官方文档(Spark 文档似乎暗示了上面的命令)。

这是一个bug of Spark 1.3.0

解决方法包括为 YARN 定义 SPARK_HOME,尽管这应该是不必要的:

spark-submit … --conf spark.yarn.appMasterEnv.SPARK_HOME=/home/hadoop/spark \
               --conf spark.executorEnv.SPARK_HOME=/home/hadoop/spark …