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

Sot*_*her 7 cluster-computing apache-spark pyspark

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

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

但是,我怎么弄清楚我是否在client模式下运行spark ?

des*_*aut 7

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

$ 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.
Run Code Online (Sandbox Code Playgroud)

检查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" "$@"
Run Code Online (Sandbox Code Playgroud)

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

  • 你认为这个原因是为了贬低?最后,我的回答确实解决了这个问题,即如何*知道*...问题也很明显是关于pyspark API,而不是Scala - 尽管如此,我提出了你的答案,因为我学到了一些东西(这是我的主要标准)为了upvoting ...). (3认同)
  • 谢谢回复.我认为虽然"稍微偏离"的答案不值得贬低... (3认同)

Jac*_*ski 6

由于sc.deployMode在PySpark中不可用,您可以查看spark.submit.deployMode

scala> sc.getConf.get("spark.submit.deployMode")
res0: String = client
Run Code Online (Sandbox Code Playgroud)

这在PySpark中不可用

使用 sc.deployMode

scala> sc.deployMode
res0: String = client

scala> sc.version
res1: String = 2.1.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)