当我对 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'
我正在使用 CentOS
、 python 2.7
和 spark-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 中显示正在运行的应用程序的主要内容,如果未能解决你的问题,请参考以下文章