Как подключиться к кластеру dataproc с ноутбуками Jupyter из облачной оболочки
Я видел инструкции здесь https://cloud.google.com/dataproc/docs/tutorials/jupyter-notebook для настройки ноутбуков Jupyter с помощью dataproc, но я не могу понять, как изменить процесс для использования оболочки Cloud вместо создания SSH-туннеля локально. Я смог подключиться к ноутбуку datalab, запустив
datalab connect vmname
из облачной оболочки, а затем с помощью функции предварительного просмотра. Я хотел бы сделать что-то подобное, но с ноутбуками Jupyter и кластером dataproc.
2 ответа
Теоретически, вы можете в основном следовать тем же инструкциям, что и https://cloud.google.com/shell/docs/features, чтобы использовать локальную переадресацию портов для доступа к вашим ноутбукам Jupyter в Dataproc через тот же "предварительный просмотр в Интернете" в Cloud Shell. особенность. Что-то вроде следующего в вашей облачной оболочке:
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 необходимо добавить поддержку веб-сокетов.
Если вы не сделаете (1), вы получите всплывающие ошибки при попытке создать блокнот из-за отказа Jupyter от прокси-домена облачной оболочки. К сожалению (2) требуется более глубокая поддержка самой Cloud Shell; это будет проявляться как ошибки A connection to the notebook server could not be established.
Другой возможный вариант без ожидания (2) - запустить собственный прокси-сервер nginx как часть действия инициализации jupyter в кластере Dataproc, если вы можете соответствующим образом получить его для веб-сокетов прокси. Смотрите эту тему для аналогичной ситуации: https://github.com/jupyter/notebook/issues/1311
Обычно этот тип поддержки неработающих веб-сокетов в прокси-слоях является распространенной проблемой, поскольку он все еще является относительно новым; со временем все больше и больше вещей будут поддерживать веб-сокеты из коробки.
В качествеальтернативы:
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. Или вы можете выбрать другие поддерживаемые Cloud Shell порты для локальной привязки, например:
gcloud compute ssh my-datalab-cluster-m -- -L 8082:my-datalab-cluster-m:8080
В этом случае вы бы выбрали 8082
в качестве порта предварительного просмотра.
Вы не можете подключиться к Dataproc через Datalab, установленный на виртуальной машине (на GCE).
В качестве документации, которую вы упомянули, вы должны запустить Dataproc с действием инициализации Datalab.
Кроме того Datalab connect
Команда доступна только если вы создали Datalab благодаря Datalab create
команда.
Вы должны создать SSH-туннель к своему главному узлу ("vmname-m", если имя вашего кластера "vmname") с помощью:
gcloud compute ssh --zone YOUR-ZONE --ssh-flag="-D 1080" --ssh-flag="-N" --ssh-flag="-n" "vmname-m"