无法在 Google DataProc 创建时间为 Jupyter 和 Zeppelin 自定义端口

Can't customize port for Jupyter and Zeppelin at Google DataProc creation time

我有一个初始化 DataLab 的 DataProc 集群,并安装 Jupyter 和 Zeppelin 作为可选组件。我想在集群创建时将 Jupyter 端口设置为 8124,将 Zeppelin 端口设置为 8081。我需要它们专门用于这两个端口,而不是任何其他端口。我在集群创建时对 gcloud dataproc clusters create 使用了以下命令:

--metadata ZEPPELIN-PORT=8081(也试过 --metadata zeppelin-port=8081

--metadata JUPYTER_PORT=8124

但是,它们都仍在使用默认端口,即 jupyter 的 8123 和 zeppelin 的 8080,而 8124 和 8081 不可用。更糟糕的是,由于 DataLab 默认也使用 8080,我无法从该端口访问 DataLab,只能访问 zeppelin。

我可以在创建时间后自定义端口,但这对我的用例来说并不理想。

如有任何建议,我们将不胜感激。谢谢。

不幸的是,目前确实无法在第一个 class 支持 属性 中执行此操作,但它可能会在未来某天成为 Dataproc 中的一项功能。

然而,与此同时,运行 修改端口的初始化操作应该实际上等同于通过 属性 修改它,只需几秒钟的延迟即可重新启动服务。

以下 init 操作将在集群创建时自动将 Jupyter 重新映射到 8124 和 Zeppelin 8081,如果启用,也可以与 Dataproc Component Gateway 一起使用。

#!/bin/bash
# change-ports.sh

ZEPPELIN_PORT=8081
JUPYTER_PORT=8124

readonly ROLE="$(/usr/share/google/get_metadata_value attributes/dataproc-role)"

if [[ "${ROLE}" == 'Master' ]]; then
  if [ -f /etc/zeppelin/conf/zeppelin-env.sh ]; then
    echo "export ZEPPELIN_PORT=${ZEPPELIN_PORT}" \
        >> /etc/zeppelin/conf/zeppelin-env.sh
    systemctl restart zeppelin
  fi

  if [ -f /etc/jupyter/jupyter_notebook_config.py ]; then
    echo "c.NotebookApp.port = ${JUPYTER_PORT}" \
        >> /etc/jupyter/jupyter_notebook_config.py
    systemctl restart jupyter
  fi

  if [ -f /etc/knox/conf/topologies/default.xml ]; then
    sed -i "s/localhost:8080/localhost:${ZEPPELIN_PORT}/g" \
        /etc/knox/conf/topologies/default.xml
    sed -i "s/localhost:8123/localhost:${JUPYTER_PORT}/g" \
        /etc/knox/conf/topologies/default.xml
    systemctl restart knox
  fi
fi

使用最新的 Dataproc 版本,您应该能够重新映射端口

Image 1.3 and 1.4: Allow remapping Jupyter and Zeppelin Optional Component ports via dataproc:{jupyter,zeppelin}.port properties

https://cloud.google.com/dataproc/docs/release-notes#may_9_2019