当我对 python 脚本使用 spark-submit 时,Spark master 不会在 UI 中显示正在运行的应用程序

Posted

技术标签:

【中文标题】当我对 python 脚本使用 spark-submit 时,Spark master 不会在 UI 中显示正在运行的应用程序【英文标题】:Spark master won't show running application in UI when I use spark-submit for python script 【发布时间】:2016-12-01 09:16:12 【问题描述】:

The image shows 8081 UI. 当我启动 scala shell 或 pyspark shell 时,master 显示正在运行的应用程序。但是当我使用spark-submit 运行python 脚本时,master 没有显示任何正在运行的应用程序。这是我使用的命令:spark-submit --master spark://localhost:7077 sample_map.py。网络用户界面位于:4040。我想知道我是否以正确的方式提交脚本,或者 spark-submit 是否从未真正显示正在运行的应用程序。

localhost:8080<master_ip>:8080 不会为我打开,但 <master_ip>:8081 会打开。它显示了执行者信息。

这些是我在 spark-env.sh 中的配置:

export SPARK_EXECUTOR_MEMORY=512m 
export SPARK_MASTER_WEBUI_PORT=4040
export SPARK_WORKER_CORES=2
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_INSTANCES=2 
export SPARK_WORKER_DIR=/opt/worker
export SPARK_DAEMON_MEMORY=512m
export SPARK_LOCAL_DIRS=/tmp/spark  
export SPARK_MASTER_IP 'splunk_dep'

我正在使用 CentOSpython 2.7spark-2.0.2-bin-hadoop2.7.

【问题讨论】:

【参考方案1】:

你可以打开spark master的web UI,默认为http://localhost:8080查看正在运行的应用程序(独立集群模式):

如果多个应用程序正在运行 - 它们将绑定到端口 4040、4041、4042 ...

您只需在网络浏览器中打开 http://:4040 即可访问此界面。如果多个 SparkContexts 在同一主机上运行,​​它们将绑定到以 4040 开头的连续端口(4041、4042 等)。

【讨论】:

是的。但同样的方法不仅适用于使用 python 脚本的 spark-submit。您展示的图片是针对 scala shell 的,对吗? Scala shell 在 4040 上也适用于我。 确实如此。我已经运行了 ./bin/spark-submit --master spark://node7:7077 examples/src/main/python/pi.py 1000,它确实出现在 4040 的 UI 和 8080 的已完成应用程序中。你是确定 spark-master 正在运行?试试 ./sbin/start-all.sh 您是在本地模式还是在独立集群中运行 spark shell?这是有关如何设置独立集群模式的文档spark.apache.org/docs/latest/spark-standalone.html @kaks 8081 说主 URL 是什么? 我已在问题中附上了图片。【参考方案2】:

对于本地运行,请使用:

val sparkConf = new SparkConf().setAppName("Your app Name").setMaster("local")
val sc = new SparkContext(sparkConf)

当您执行 sparkSubmit 时:

val sparkConf = new SparkConf().setAppName("Your app Name")
val sc = new SparkContext(sparkConf)

这在本地测试中不起作用,但是当您使用它编译并触发提交作业时,它将显示在 UI 中。

希望这能解释清楚。

【讨论】:

我没用过。但我确实像sc = SparkContext("local","test") 一样初始化了 SparkContext。如果我将其更改为sc = SparkContext("localhost","test"),则会出现解析错误:` 无法解析主 URL:'localhost'` 如果你在master上运行你不需要指定任何,删除本地并运行它会显示出来。 val sparkConf = new SparkConf().setAppName("Ad Request Metrics").setMaster("local") 使用这个,这里用于测试目的使用.setMaster("local")。但是,当您在 master 中运行时,请删除它 更新了我的答案看看 我正在使用 python。所以我尝试了sparkConf = new SparkConf().setAppName("test") sc = SparkContext(sparkConf),但SaprkConf() 的语法无效。我写对了吗?【参考方案3】:

您是在应用程序运行时还是在应用程序完成执行后访问 SPARK-UI?

尝试添加一些代码,等待按键(因此火花执行不会结束) - 看看它是否能解决您的问题。

【讨论】:

在脚本运行和完成后,我一直在刷新 UI。但它仍然没有显示。我尝试在两者之间添加用户输入,即使这样也没有任何变化。【参考方案4】:

您只需访问 localhost:8080 并检查您提交的申请是否已完成。

【讨论】:

仅在 spark-submit 中没有显示 4040 中任何已完成的应用程序。对我来说 8080 无法访问。

以上是关于当我对 python 脚本使用 spark-submit 时,Spark master 不会在 UI 中显示正在运行的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

python刷新/重新加载

使用 Python PyAudio 播放 2 声道声音

如何使用 python 列出应用于 azure 资源组的锁

当我仅使用脚本名称在 Windows 上运行 Python 脚本时无法重定向输出

使用 C++ 项目编译 python 脚本

当我从 SQL Server 代理运行 Python 脚本时,为啥它会失败?