理论上,您几乎可以按照与 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
但是,有两个问题阻止了它的工作:
-
您需要修改 Jupyter 配置,将以下内容添加到 /root/.jupyter/jupyter_notebook_config.py 的底部:
c.NotebookApp.allow_origin = '*'
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 作为网络预览端口。