如何使用云中的 Jupyter 笔记本连接到 dataproc 集群 shell
How do I connect to a dataproc cluster with Jupyter notebooks from cloud shell
我已在此处 https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook 看到有关使用 dataproc 设置 Jupyter 笔记本的说明,但我不知道如何更改流程以使用云 shell 而不是创建 SSH本地隧道。我已经能够通过 运行
连接到数据实验室笔记本
datalab connect vmname
从云端shell然后使用预览功能。我想做类似的事情,但使用 Jupyter notebooks 和 dataproc 集群。
您无法通过安装在 VM(在 GCE 上)上的 Datalab 连接到 Dataproc。
正如您提到的文档,您必须使用 Datalab 初始化操作启动 Dataproc。
此外,Datalab connect
命令仅在您通过 Datalab create
命令创建了 Datalab 时才可用。
您必须创建到您的主节点的 SSH 隧道("vmname-m" 如果您的集群名称是 "vmname"):
gcloud compute ssh --zone YOUR-ZONE --ssh-flag="-D 1080" --ssh-flag="-N" --ssh-flag="-n" "vmname-m"
理论上,您基本上可以按照与 https://cloud.google.com/shell/docs/features#web_preview 相同的说明使用本地端口转发通过云端访问 Dataproc 上的 Jupyter notebooks Shell 与 "web preview" 相同特征。您的云 shell:
中类似以下内容
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 拒绝云 shell 代理域,您将在尝试创建笔记本时收到弹出错误。不幸的是 (2) 需要 Cloud Shell 本身更深入的支持;它会显示为 A connection to the notebook server could not be established.
之类的错误
另一个无需等待 (2) 的可能选项是 运行 您自己的 nginx 代理作为 Dataproc 集群上 jupyter 初始化操作的一部分,如果您可以将其适当地代理 websockets。有关类似情况,请参阅此线程:https://github.com/jupyter/notebook/issues/1311
一般来说,代理层中这种损坏的 websocket 支持是一个常见问题,因为它仍然相对较新;随着时间的推移,越来越多的东西将开始支持开箱即用的 websockets。
或者:
Dataproc 还支持使用 Datalab 初始化操作;这是设置使得 websockets 代理已经得到处理。因此,如果您不是特别依赖 Jupyter,那么以下内容适用于云 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
然后 select 通常 "Web Preview" 在端口 8080 上。或者您可以 select 其他云 Shell 支持本地绑定的端口,例如:
gcloud compute ssh my-datalab-cluster-m -- -L 8082:my-datalab-cluster-m:8080
在这种情况下,您将 select 8082
作为 Web 预览端口。
我已在此处 https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook 看到有关使用 dataproc 设置 Jupyter 笔记本的说明,但我不知道如何更改流程以使用云 shell 而不是创建 SSH本地隧道。我已经能够通过 运行
连接到数据实验室笔记本datalab connect vmname
从云端shell然后使用预览功能。我想做类似的事情,但使用 Jupyter notebooks 和 dataproc 集群。
您无法通过安装在 VM(在 GCE 上)上的 Datalab 连接到 Dataproc。
正如您提到的文档,您必须使用 Datalab 初始化操作启动 Dataproc。
此外,Datalab connect
命令仅在您通过 Datalab create
命令创建了 Datalab 时才可用。
您必须创建到您的主节点的 SSH 隧道("vmname-m" 如果您的集群名称是 "vmname"):
gcloud compute ssh --zone YOUR-ZONE --ssh-flag="-D 1080" --ssh-flag="-N" --ssh-flag="-n" "vmname-m"
理论上,您基本上可以按照与 https://cloud.google.com/shell/docs/features#web_preview 相同的说明使用本地端口转发通过云端访问 Dataproc 上的 Jupyter notebooks Shell 与 "web preview" 相同特征。您的云 shell:
中类似以下内容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 拒绝云 shell 代理域,您将在尝试创建笔记本时收到弹出错误。不幸的是 (2) 需要 Cloud Shell 本身更深入的支持;它会显示为 A connection to the notebook server could not be established.
另一个无需等待 (2) 的可能选项是 运行 您自己的 nginx 代理作为 Dataproc 集群上 jupyter 初始化操作的一部分,如果您可以将其适当地代理 websockets。有关类似情况,请参阅此线程:https://github.com/jupyter/notebook/issues/1311
一般来说,代理层中这种损坏的 websocket 支持是一个常见问题,因为它仍然相对较新;随着时间的推移,越来越多的东西将开始支持开箱即用的 websockets。
或者:
Dataproc 还支持使用 Datalab 初始化操作;这是设置使得 websockets 代理已经得到处理。因此,如果您不是特别依赖 Jupyter,那么以下内容适用于云 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
然后 select 通常 "Web Preview" 在端口 8080 上。或者您可以 select 其他云 Shell 支持本地绑定的端口,例如:
gcloud compute ssh my-datalab-cluster-m -- -L 8082:my-datalab-cluster-m:8080
在这种情况下,您将 select 8082
作为 Web 预览端口。