Как подключиться к кластеру 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

Однако есть две проблемы, которые мешают этому работать:

  1. Вам нужно изменить конфигурацию Jupyter, чтобы добавить следующее в конец /root/.jupyter/jupyter_notebook_config.py:

    c.NotebookApp.allow_origin = '*'
    
  2. Для предварительного просмотра в 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"
Другие вопросы по тегам