【发布时间】:2021-11-08 22:09:35
【问题描述】:
如何通过 Spark WEB UI 监控作业的进度?在本地运行 Spark,我可以通过端口 4040 访问 Spark UI,使用 http://localhost:4040。
【问题讨论】:
标签: apache-spark pyspark google-colaboratory spark-ui
如何通过 Spark WEB UI 监控作业的进度?在本地运行 Spark,我可以通过端口 4040 访问 Spark UI,使用 http://localhost:4040。
【问题讨论】:
标签: apache-spark pyspark google-colaboratory spark-ui
按照此colab notebook,您可以执行以下操作。
首先,配置 Spark UI 并启动 Spark 会话:
import findspark
findspark.init()
from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf
conf = SparkConf().set('spark.ui.port', '4050')
sc = SparkContext(conf=conf)
spark = SparkSession.builder.master('local[*]').getOrCreate()
在下一个单元格运行中:
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip
get_ipython().system_raw('./ngrok http 4050 &')
这将安装 ngrok 并创建一个 URL,您可以通过该 URL 访问 Spark UI(等待 10 秒以启动)。
现在,要访问 URL,请调用:
!curl -s http://localhost:4040/api/tunnels
它打印出一个看起来像这样(截断)的 JSON:
{"tunnels":[{"name":"command_line","uri":"/api/tunnels/command_line","public_url":"https://1b881e94406c.ngrok.io","proto":"https", ... }
-- 您正在寻找上面的 "public_url",这是您的 Spark UI 的 URL。
或者,运行这个:
!curl -s http://localhost:4040/api/tunnels | python3 -c "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
我已经测试过了,它对我有用。
【讨论】:
方法可能很短:
!pip install -q pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.config('spark.ui.port', '4050').getOrCreate()
!wget -qnc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip -n -q ngrok-stable-linux-amd64.zip
get_ipython().system_raw('./ngrok http 4050 &')
!sleep 5
!curl -s http://localhost:4040/api/tunnels | grep -Po 'public_url":"(?=https)\K[^"]*'
结果:
【讨论】: