aws emr没有工人添加到新工作

时间:2019-07-31 10:48:48

标签: apache-spark pyspark amazon-emr

我想通过spark-submit运行一个非常简单的pyspark应用。我通过在AWS EMR web-console中添加一个步骤来启动应用程序,然后从s3中选择应用程序,然后选择deploy mode cluster,其余部分留空。

from pyspark.sql.types import IntegerType
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
mylist = [1, 2, 3, 4]
df = spark.createDataFrame(mylist, IntegerType())
df.write.parquet('s3:/path/to/save', mode='overwrite')

现在,当我执行此操作时,火花作业会正确启动,但不会添加任何工作程序。 这是纱线的样子,我在那里有一个工人:

enter image description here

这就是未分配工作节点的火花作业视图的样子

enter image description here

在EC2上使用“自制”群集之前,我总是需要像这样将config添加到SparkSession.builder.getOrCreate()

from pyspark import SparkConf
conf = SparkConf().setAppName('EMR_test').setMaster('spark://MASTERDNS:7077')
spark = SparkSession.builder.config(conf=conf).getOrCreate()

但是当我这样做时,我只会得到一个19/07/31 10:19:28 WARN StandaloneAppClient$ClientEndpoint: Failed to connect to master MASTERDNS:7077

我也尝试了spark-submit --master yarnSparkConf().setAppName('EMR_test').setMaster('yarn-cluster')无济于事。在这两种情况下,我的spark应用程序都没有执行程序。

那么我该如何正确执行呢?当我启动pyspark consoleLivy Notebook时,我得到了带有分配的工作程序节点的工作spark会话。

2 个答案:

答案 0 :(得分:0)

我在spark-submit的文档中找到了这一点。

  

对于Python应用程序,只需将.py文件代替JAR传递,然后使用--py-files将Python .zip,.egg或.py文件添加到搜索路径。

添加参数--py-files。

答案 1 :(得分:0)

好的,我解决了。默认情况下,Amazon EMR Web UI传递以下信息:

spark-submit --deploy-mode cluster s3://mybucket/EMR_test.py

我偶然删除了--deploy-mode cluster并不能正常工作,并且一切正常,我的工作得到了执行者。就这样...

为使您在首次使用EMR Web UI时更加烦恼,您可以从下拉菜单中选择deploy-modecluster的两个选项。您显然想要client,因为cluster只会在主服务器上运行脚本。但是client将永远无法工作。

附录:

我通过它做了更多的自我工作,问题与cluster的{​​{1}}选项有关(如果已启用)(默认为Dynamic Resource Allocation){ {1}}将不起作用,而是您必须使用spark或什么都不用。如果关闭了动态资源分配,则AWS EMR可行。