如何从云端shell连接到具有Jupyter笔记本的数据集群

时间:2017-04-13 21:37:18

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

我已经看到https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook这里的说明用于设置带数据流的Jupyter笔记本,但我无法弄清楚如何改变流程以便使用Cloud shell而不是在本地创建SSH隧道。我已经能够通过运行

连接到datalab笔记本
AcroFields fields = stamper.AcroFields;
fields.SetField("Product", "Product1");
fields.SetField("Index", "XQAA-0000-000");
fields.SetField("Quality", "USP,");
MoveUp(stamper, "Grade", "Customer", 1);
fields.SetField("Customer", "Customer1");
fields.SetField("Market", "England, Germany");

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

2 个答案:

答案 0 :(得分:3)

理论上,您几乎可以按照与https://cloud.google.com/shell/docs/features#web_preview相同的说明使用本地端口转发通过Cloud Shell的“Web预览”功能访问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的支持。

  3. 如果你不这样做(1)那么在尝试创建笔记本时你会遇到弹出错误,因为Jupyter拒绝了云shell代理域。不幸的是(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支持是一个常见问题,因为它仍然相对较新;随着时间的推移,越来越多的东西将开始支持开箱即用的websockets。

    <强>可替换地:

    Dataproc还支持使用Datalab初始化操作;这被设置为使得代替的websockets代理已经被处理。因此,如果你不是特别依赖于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上选择通常的“Web预览”。或者您可以为本地绑定选择其他Cloud Shell支持的端口,如:

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

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

答案 1 :(得分:0)

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

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

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

您必须创建一个到您的主节点的SSH隧道(&#34; vmname-m&#34;如果您的群集名称是&#34; vmname&#34;),并且:

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