0

我已经在这里看到了使用Dataproc设置Jupyter笔记本的说明https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook,但我无法弄清楚如何改变进程以便使用云外壳在本地创建SSH隧道。我已经从云shell中运行如何使用云外壳的Jupyter笔记本连接到Dataproc群集

datalab connect vmname 

,然后使用预览功能已经能够连接到datalab笔记本。我想要做类似的事情,但使用Jupyter笔记本和一个dataproc集群。

回答

2

在理论上,你可以大都遵循相同的指令如发现https://cloud.google.com/shell/docs/features#web_preview通过云端Shell的相同“网络预览”功能使用本地端口转发访问Dataproc上的Jupyter笔记本。喜欢的东西在你的云壳以下:

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

不过,也有其阻止这样做的两个问题:

  1. 您需要修改Jupyter config来添加以下的底部/root/.jupyter/jupyter_notebook_config.py

    c.NotebookApp.allow_origin = '*' 
    
  2. 云壳牌公司的网页预览需要增加对WebSockets的支持。

如果你不这样做(1),那么你就当试图创建一个笔记本,由于Jupyter拒绝云壳代理领域得到弹出错误。不幸的是(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初始化动作;这被设置为使得代理的websocket已经被处理。因此,如果你不是太依赖只是Jupyter具体而言,然后在云壳以下工作:

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端口上惯用的“网页预览”或者你可以选择其他云壳牌支持本地结合样口:

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

在这种情况下,你会选择8082作为网页预览端口。

+0

您列出的替代方案适合我!非常感谢! – dobbysock1002

0

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

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

而且,Datalab connect命令仅在您创建Datalab时才可用,这要归功于Datalab create命令。

您必须创建一个SSH隧道到您的主节点(“虚拟机名称-M”,如果你的群集名称为“虚拟机名称”)有:

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

我希望可能有一个不涉及SSH隧道的选项 – dobbysock1002

+0

由于专业网络的局限性,我尝试了几乎所有的东西,没有任何成功。 对不起。 – Olivier