如何知道PySpark应用程序的部署模式?

时间:2016-07-14 21:04:27

标签: apache-spark cluster-computing pyspark

我正在尝试修复内存不足的问题,我想知道是否需要在spark home文件夹中的默认配置文件(spark-defaults.conf)中更改这些设置。或者,如果我可以在代码中设置它们。

我看到了这个问题PySpark: java.lang.OutofMemoryError: Java heap space,它说这取决于我是否在client模式下运行。我在集群上运行spark并使用独立监控它。

但是,如何判断我是否在client模式下运行spark?

3 个答案:

答案 0 :(得分:7)

如果您正在运行交互式shell,例如pyspark(CLI或通过IPython笔记本),默认情况下,您以client模式运行。您可以轻松验证无法pyspark模式运行cluster或任何其他交互式shell:

$ pyspark --master yarn --deploy-mode cluster
Python 2.7.11 (default, Mar 22 2016, 01:42:54)
[GCC Intel(R) C++ gcc 4.8 mode] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Error: Cluster deploy mode is not applicable to Spark shells.

$ spark-shell --master yarn --deploy-mode cluster
Error: Cluster deploy mode is not applicable to Spark shells.

检查bin/pyspark文件的内容也可能是有益的 - 这是最后一行(实际可执行文件):

$ pwd
/home/ctsats/spark-1.6.1-bin-hadoop2.6
$ cat bin/pyspark
[...]
exec "${SPARK_HOME}"/bin/spark-submit pyspark-shell-main --name "PySparkShell" "$@"

即。 pyspark实际上是由spark-submit运行的脚本,名称为PySparkShell,您可以在Spark History Server UI中找到它;并且因为它是这样运行的,所以它的spark-submit命令包含了任何参数(或默认值)。

答案 1 :(得分:6)

由于PySpark中没有sc.deployMode,您可以查看spark.submit.deployMode

scala> sc.getConf.get("spark.submit.deployMode")
res0: String = client

这在PySpark中不可用

使用sc.deployMode

scala> sc.deployMode
res0: String = client

scala> sc.version
res1: String = 2.1.0-SNAPSHOT

答案 2 :(得分:1)

从Spark 2+开始,以下工作。

for item in spark.sparkContext.getConf().getAll():print(item)

(u'spark.submit.deployMode', u'client') # will be one of the items in the list.