Рубрики
Uncategorized

Настройка анализа данных на данных Django на одной машине

Мы на своем рабочем месте используйте Django на основе Backend и часто нужно выполнять задачи анализа данных на … Теги с Джанго, Postgres, DevOps, Cgroup.

Мы на своем рабочем месте используем бэкэнд на основе 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»