【问题标题】:How to open Spark UI when working on Google Colab?在 Google Colab 上工作时如何打开 Spark UI?
【发布时间】:2021-11-08 22:09:35
【问题描述】:

如何通过 Spark WEB UI 监控作业的进度?在本地运行 Spark,我可以通过端口 4040 访问 Spark UI,使用 http://localhost:4040。

【问题讨论】:

    标签: apache-spark pyspark google-colaboratory spark-ui


    【解决方案1】:

    按照此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'])"
    

    我已经测试过了,它对我有用。

    【讨论】:

    • 我刚刚重新访问了 colab 笔记本,它对我有用。最后一步最初失败了,但这可能是因为应该有一个睡眠,让 UI 有一些时间来正确设置。您可以简单地重新运行它,它应该没问题。如果没有,请告诉我(您遇到了哪些错误/什么似乎不起作用)。
    • 在运行前等待 10-15 秒 !curl -s localhost:4040/api/tunnels
    • @ponadto 当我单击生成的链接时,它会将我带到 ngrok 的注册页面以获取授权令牌,我将如何访问交互式 spark UI?
    • @HiraTanveer 这是一项付费服务​​,限制每小时(或每天,不确定)生成的 URL 数量。我可能有的唯一建议是:尽量减少生成的 Spark UI 数量。
    【解决方案2】:

    方法可能很短:

    !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[^"]*'
    

    结果:

    【讨论】:

    • 这与一年前发布的另一个答案基本相同
    • 它更短,没有不必要的步骤。此外,另一个答案不能独立工作。
    • 当然。感谢您缩短步骤,但是,在同一个单元格中运行所有内容有点违背了探索笔记本的目的
    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多