【问题标题】:How do I connect to a dataproc cluster with Jupyter notebooks from cloud shell如何从 Cloud Shell 连接到带有 Jupyter 笔记本的 dataproc 集群
【发布时间】:2017-09-10 03:48:32
【问题描述】:

我已经在 https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook 看到了使用 dataproc 设置 Jupyter 笔记本的说明,但我不知道如何更改流程以使用 Cloud shell 而不是在本地创建 SSH 隧道。我已经能够通过运行连接到数据实验室笔记本

datalab connect vmname 

从云端外壳,然后使用预览功能。我想做类似的事情,但要使用 Jupyter 笔记本和 dataproc 集群。

【问题讨论】:

    标签: google-cloud-platform jupyter-notebook google-cloud-dataproc gcp


    【解决方案1】:

    理论上,您几乎可以按照与 https://cloud.google.com/shell/docs/features#web_preview 相同的说明使用本地端口转发通过 Cloud Shell 的相同“网络预览”功能访问 Dataproc 上的 Jupyter 笔记本。在您的云外壳中类似于以下内容:

    gcloud compute ssh my-cluster-m -- -L 8080:my-cluster-m:8123
    

    但是,有两个问题阻止了它的工作:

    1. 您需要修改 Jupyter 配置,将以下内容添加到 /root/.jupyter/jupyter_notebook_config.py 的底部:

      c.NotebookApp.allow_origin = '*'
      
    2. Cloud Shell 的网页预览版需要添加对 websockets 的支持。

    如果您不这样做 (1),那么由于 Jupyter 拒绝云外壳代理域,您将在尝试创建笔记本时收到弹出错误。不幸的是(2)需要 Cloud Shell 本身更深层次的支持;它会表现为错误,如A connection to the notebook server could not be established.

    另一个无需等待 (2) 的可能选项是在 Dataproc 集群上运行自己的 nginx 代理作为 jupyter 初始化操作的一部分,前提是您可以将其适当地代理 websockets。类似情况见此帖:https://github.com/jupyter/notebook/issues/1311

    一般来说,代理层中这种类型的破坏 websocket 支持是一个常见问题,因为它仍然相对较新;随着时间的推移,越来越多的东西将开始支持开箱即用的 websocket。

    或者:

    Dataproc 还支持使用 Datalab 初始化操作;这是这样设置的,以便已经处理了 websockets 代理。因此,如果您不是特别依赖 Jupyter,那么以下内容可以在 Cloud Shell 中使用:

    gcloud dataproc clusters create my-datalab-cluster \
        --initialization-actions gs://dataproc-initialization-actions/datalab/datalab.sh
    gcloud compute ssh my-datalab-cluster-m -- -L 8080:my-datalab-cluster-m:8080
    

    然后在端口 8080 上选择通常的“Web 预览”。或者您可以选择其他 Cloud Shell 支持的端口进行本地绑定,例如:

    gcloud compute ssh my-datalab-cluster-m -- -L 8082:my-datalab-cluster-m:8080
    

    在这种情况下,您将选择 8082 作为网络预览端口。

    【讨论】:

    • 您列出的替代方案对我有用!非常感谢!
    【解决方案2】:

    您无法通过安装在 VM(GCE 上)上的 Datalab 连接到 Dataproc。

    正如您提到的文档,您必须使用 Datalab 初始化操作启动 Dataproc。

    此外,Datalab connect 命令仅在您使用 Datalab create 命令创建 Datalab 时可用。

    您必须创建一个到您的主节点的 SSH 隧道(如果您的集群名称为“vmname”,则为“vmname-m”):

    gcloud compute ssh --zone YOUR-ZONE --ssh-flag="-D 1080" --ssh-flag="-N" --ssh-flag="-n" "vmname-m"
    

    【讨论】:

    • 我希望有一个不涉及 SSH 隧道的选项
    • 由于我的专业网络限制,我几乎尝试了所有方法,但没有任何成功。对不起。
    猜你喜欢
    • 2017-09-10
    • 2021-02-16
    • 2017-02-07
    • 2017-09-24
    • 2019-06-07
    • 2018-12-01
    • 2020-08-10
    • 2020-11-13
    相关资源
    最近更新 更多