Errors
JupyterHub

JupyterHub: How to set NotebookApp.iopub_data_rate_limit and others NotebookApp settings in JupyterHub?

Ты ~~законнектился~~ зашел в JupyterHub, запустил ноутбук и уперся в лимит iopub_data_rate. Полез в документацию, нашел волшебный флаг `--NotebookApp.iopub_data

Ты законнектился зашел в JupyterHub, запустил ноутбук и уперся в лимит iopub_data_rate. Полез в документацию, нашел волшебный флаг --NotebookApp.iopub_data_rate_limit=10000000000. И тут же осознал проблему: ты же не запускаешь jupyter notebook вручную, за тебя это делает хаб.

Где вписать этот флаг? В конфиг самого JupyterHub, очевидно. Но не туда, куда кажется.

Конфиг NotebookApp изнутри хаба

JupyterHub — это надстройка. Он порождает отдельные сервера (single-user servers) для каждого пользователя, и каждый такой сервер — это по сути инстанс jupyter notebook. Настройки для этих инстансов задаются не через аргументы командной строки, а через конфигурацию.

Ключевой момент: нужно сказать JupyterHub, какие конфигурационные параметры он должен прокинуть в каждый запускаемый им NotebookApp.

Делается это через c.Spawner.environment или, что чаще и правильнее, через отдельный Python-конфиг для самого notebook.

Практическое решение: extra_config_files

Самый чистый способ — вынести настройки NotebookApp в отдельный файл, например, jupyter_notebook_config.py. А потом указать JupyterHub подгружать его при старте user-серверов.

В основном конфиге JupyterHub (jupyterhub_config.py) пропиши:

# jupyterhub_config.py
c.Spawner.extra_config_files = ['/path/to/jupyter_notebook_config.py']

А в самом jupyter_notebook_config.py задавай любые параметры NotebookApp стандартным способом:

# jupyter_notebook_config.py
c.NotebookApp.iopub_data_rate_limit = 10000000000
c.NotebookApp.tornado_settings = {'headers': {'Content-Security-Policy': "frame-ancestors 'self' *"}}
# ... любые другие настройки

JupyterHub при запуске юзер-серва прочитает этот файл и применит настройки. Это гибко и не захламляет основной конфиг хаба.

Альтернатива: environment

Можно и напрямую через переменные окружения, которые JupyterLab/Notebook подхватывает:

# jupyterhub_config.py
c.Spawner.environment = {
    'JUPYTERHUB_SINGLEUSER_APP': 'notebook.notebookapp.NotebookApp',
    'JUPYTER_NOTEBOOK_APP_CONFIG': '{"iopub_data_rate_limit": 10000000000}'
}

Но способ с extra_config_files обычно надежнее и нагляднее для сложных конфигов.

Итог

Не пытайся передать аргументы в командную строку спawner-а. Создай отдельный конфигурационный файл с настройками c.NotebookApp.*, подключи его через c.Spawner.extra_config_files в основном jupyterhub_config.py. Перезапусти хаб — и все новые user-сервера получат твои лимиты.

Порядок: создай файл с конфигом → пропиши путь к нему в конфиге JupyterHub → перезапусти JupyterHub. После этого проверь логи запуска юзер-сервера — там должно быть видно применение конфига.