Мы на своем рабочем месте используем бэкэнд на основе Django и часто нужно выполнять задачи анализа данных о данных в моделях Django. Этот пост обеспечивает базовую настройку для разрешения аналитиков данных для анализа данных с использованием ноутбука Jupyter.
Примечание. Это может быть сделано намного лучше, используя Docker, Jupyterlab, отдельные машины и т. Д., Нет предела. Этот пост только что направлен на намерение установку, которая была сделана в доступных ограничениях и временных шкале.
Используемые инструменты
Shell_plus — Django Shell со всеми моделями импортированы уже в ноутбуке Jupyter и многое другое.
руководитель — непрерывно запустить сервер ноутбука в фоновом режиме
PostgreSQL — База данных. Создание пользователя только для чтения, чтобы аналитики могли работать на последнем производственную БД без риска меняться.
cgroups — Для обеспечения того, чтобы ноутбук потребляет только ограниченное количество ЦП и памяти
Используйте django_extensions.
Установите Django_extensions в качестве приложения в вашем проекте Django. Инструкции по установке и использованию доступны на https://djang-extensions.readtheDocs.io/en/latest/ Отказ
После этого вы сможете запустить и проверить ноутбук через
./manage.py shell_plus --notebook
Настройка readly user для postgres
Помочь взять с https://stackoverflow.com/a/42044878/1660759 и https://stackovlow.com/a/54193832/1660759.
CREATE ROLE Read_Only_User WITH LOGIN PASSWORD 'Test1234' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
Заявления после этого необходимо запустить при подключении к вашему вашему
GRANT CONNECT ON DATABASE YourDatabaseName TO Read_Only_User; GRANT USAGE ON SCHEMA public TO Read_Only_User; GRANT SELECT ON ALL TABLES IN SCHEMA public TO Read_Only_User; GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO Read_Only_User; #So that new tables are in this database are automatically accessible to this user ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO Read_Only_User; #for functions GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO Read_Only_User;
Настройка отдельных настроек файл
[Или управлять через переменные среды. Если это то, что вы знаете, вы знаете, как это сделать для этого примера👌]
Создайте новый файл настроек, импортируйте настройки из основных настроек файла и замените настройки базы данных новым пользователем Readnly
settings_database_readonly.py
from .settings import * DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '', 'USER': ' ', 'PASSWORD' : ' ', 'HOST': ' ', 'PORT': ' ', } } NOTEBOOK_ARGUMENTS = [ '--port', '9999', ]
Ограничьте использование процесса ноутбука CPU и RAM
Для ограничения использования оперативной памяти и процессора я исследовал CPU_LIMIT и приятно, но CPU_LIMIT не дает память и приятно не дает гранулированного контроля над ограничениями. После некоторых исследований я доработал на CGroups.
CGOUPS имеет очень меньше постов там, и я не хотел писать только некоторые команды и скорее использовать файл конфигурации. Это решение оказалось недостаточно простым, чтобы последовать до документации.
Сравнение между CPulimiti, Nice и CGroups — https://scoutapm.com/blog/restricting-process-cpu-us-us-us-nice-cpulimit-and-cgroups.
Руководство для использования CGroups, используя файл конфигурации https://www.paranoids.at/cgroup-ubuntu-18-04-howto/
apt install cgroup-tools
Скопируйте файл conf из примеров
cp /usr/share/doc/cgroup-tools/examples/cgred.conf /etc/
/etc/cgconfig.conf — ограничение использования 10% загрузки процессора и 1G память
group notebooks { cpu { cpu.cfs_quota_us=10000; } memory { memory.limit_in_bytes = 1024m; } }
/etc/cgroules.conf — это ограничит каждый процесс процессов, работающих в групповых ноутбуках до 10% процессора и 1G памяти.
#notebooks cpu,memory notebooks
Для тестирования используйте это команды:
/usr/sbin/cgconfigparser -l /etc/cgconfig.conf /usr/sbin/cgrulesengd -vvv
Руководитель
Настройка руководителя — руководитель Отказ
Используйте следующую конфигурацию в Supervisor.conf для запуска ноутбука с помощью Cgroup
[program:readonly_shell_notebook] environment=DJANGO_SETTINGS_MODULE="dashboard.settings_database_readonly" command=cgexec -g cpu,memory:notebooks /home/videoken-engage/.virtualenvs/django_project/bin/python ../manage.py shell_plus --notebook directory=stdout_logfile= stderr_logfile=
Команда CGEExec используется для запуска любого процесса в данной CGroup.
Из-за использования файлов конфигурации для CGroups файл иногда не дает правильных разрешений. Я получал следующую ошибку при запуске команды CGEExec —
Cgroups error: cgroup change of group failed
Это исправило проблему
chown/sys/fs/cgroup/memory/notebooks/tasks chown /sys/fs/cgroup/cpu/notebooks/tasks
PS: Это было мое первое использование cgroups после первоначального чтения, которое я сделал для понимания докеров докеров. Я мог бы упускать из виду некоторые концепции, любые входы в отношении того, что конкретно приветствуются 👐.
Оригинал: «https://dev.to/sanchitsharma/data-analysis-setup-on-django-data-on-single-machine-57nn»