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. После этого проверь логи запуска юзер-сервера — там должно быть видно применение конфига.