我有一个初始化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。
我可以在创建时间之后自定义端口,但这对我的用例来说并不理想。
任何建议表示赞赏。谢谢。
不幸的是,目前在一流支持的属性中确实没有办法做到这一点,但它有可能在未来的某一天成为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版本,您应该能够重新映射端口
图1.3和1.4:允许通过dataproc重新映射Jupyter和Zeppelin可选组件端口:{jupyter,zeppelin} .port属性
https://cloud.google.com/dataproc/docs/release-notes#may_9_2019