我已经看到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笔记本和数据集群。
答案 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
但是,有两个问题阻碍了它的运作:
您需要修改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)的另一个可能的选择是在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"