Поднимаем Apache Superset — необходимый и достаточный гайд

от автора

Эта статья вдохновлена опытом знакомства с инструментом Apache Superset: автору было очень интересно, что же представляет из себя один из главных представителей on-premise инструментов BI-визуализации (а также стояла соответствующая задача по работе, но это такие мелочи).

В процессе поиска информации возникло понимание, что полноценного руководства на русском по началу работы с данным инструментом нет. Пришлось заниматься вдумчивым поиском решений по наиболее быстрому и в то же время полноценному разавертыванию Superset. Одну из первых ссылок, которую, безусловно найдет любой интересующийся, можно указать сразу — статья на сайте официальной докуметации «Installing Superset Locally Using Docker Compose». Безусловно, с ее помощью можно загрузить и настроить все необходимые системы в виде композиции docker-контейнеров. Однако я хочу предложить способ с более простой архитектурой, а также с намного различных тонкостей и с более подробным объяснением подключения к приложению своей локальной базы данных.

С помощью знаний, собранных по крупицам по интернету и из советов коллег и товарищей получилось сравнительно небольшими усилиями решить задачу и поднять приложение Superset в базовом варианте. Однако этот вариант легко масштабируемый, и по возможности я старался избегать все костыли быстрого освоения (о которых мы потом с сожалением вспоминаем при использовании созданного). И оглянувшись назад после того, как все получилось, я понял, что собрав все полученные знания воедино, можно создать отличное руководство для тех, кто в дальнейшем столкнется с похожей необходимостью.

Итак, приступим. Гайд получился, по сути, от новичка для новичков, так что подсказки и предложения только приветствуются 🙂

Начальные условия

Чистая Ubuntu 18.04. На ней может, конечно, уже быть установлен docker и docker-compose, но для тех, у кого этих утилит не установлено, далее будет приведен раздел с инструкцией по установке.

Краткий план действий

  • Устанавливаем docker и docker-compose

  • Устанавливаем докер-образ Superset

  • Проверяем работу Superset

  • Устанавливаем Postgres и PgAdmin

  • Проверяем работу Postgres через PgAdmin

  • Подключаем Postgres к Superset

Устанавливаем docker и docker-compose

В первую очередь — что такое docker? Мы тут вообще-то Superset пришли устанавливать, ну и кажется еще Postgres. Однако без docker ничего не получится (точнее, будет очень неправильно, немасштабируемо и так далее).

За подробными разъяснениями рекомендую обратиться к следующим материалам: «Docker. Зачем и как», «Понимая Docker», «VM или Docker?», а также «Шпаргалка с командами Docker». Говоря коротко, можно отметить, что docker-контейнер суть та же виртуальная машина, но в немного урезанном варианте и без ее недостатков. Во время работы он использует исключительно оперативную память, и является для основной операционной системы просто очередным отдельным программным процессом. Это позволяет, например, динамически с другими процессами (в том числе с другими docker-контейнерами) пользоваться оперативной памятью основной машины.

Но мы здесь за практическими штуками, так что перейдем к вопросу его установки. Официальные ресурсы с инструкциями по установке docker и установке docker-compose. Далее в главе идут выдержки оттуда.

$ sudo apt-get update
$ sudo apt-get install \     ca-certificates \     curl \     gnupg \     lsb-release
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

После запуска команды curl система может спросить, перезаписать ли существующий файл docker-archive-keyring.gpg. В таком случае этот шаг можно и пропустить, но я бы рекомендовал все таки перезаписать на случай каких-либо обновлений.

$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
На этом установка docker завершена)
На этом установка docker завершена)

Проверим, что все установилось, вызвав информацию о версии программы.

$ sudo docker --version

Что такое docker-compose? Это утилита для управления группами docker-контейнеров. Открывает возможности по гибко настраиваемому масштабированию этих групп, удобной сепарации контейнеров на сетевом уровне и цетрализации управляющих механизмов. Ну а главное — в умелых руках парой команд docker-compose позволяет развернуть большие и сложные приложения всего парой команд.

Подробнее о docker-compose вот в этой хорошей статье «Руководство по Docker Compose для начинающих».

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
Обошлись без стен логов
Обошлись без стен логов

И снова проверим, что все хорошо с помощью команды вывода версии (порой эта команда отрабатывает не сразу, но такое в порядке вещей).

$ sudo docker-compose --version

Вуаля! Можем работать.

Устанавливаем докер-образ Superset

Docker имеет развитое сообщество и удобный интерфейс работы с продуктами деятельности этого сообщества. Простые пользователи и большие компании, такие как Apache, выкладывают там образы своих контейнеров, скачать которые можно одной командой. В частности, давайте скачаем образ docker-контейнера с Superset. Вот страница этого образа. Скачать его можно следующей командой:

$ sudo docker pull apache/superset

Псле красивой анимированной детализации процесса установки осталось только проверить, что образ контейнера присутсвует в системе. Да, и это все. До чего дошел прогресс)

$ sudo docker images

Проверяем работу Superset

Контейнер надо запустить. Запущенный контейнер в дальнейшем можно будет остановить. И важно не путать это действие с, скажем так, выключением контейнера и с удалением образа. Для работы нам будет достаточно только остановки, которую рассмотрим в конце статьи. Сейчас вашему вниманию представляется команда запуска docker-контейнера с Superset:

$ sudo docker run -d -p 8080:8088 --name superset apache/superset;

Флаг -d (detach) означает отключение контейнера от консоли. Флаг -p отвечает за проброс трафика между портами контейнера и указанными портами основной машины. А остальное, думаю, понятно).

Хорошим инструментом для мониторинга сети является утилита netstat. На чистой Ubuntu ее нет, так что установим ее такой командой:

$ sudo apt-get install net-tools

Да, помимо netstat, были установлены и другие программы, но они не нужны сейчас.

Теперь проверим, запустился ли контейнер.

$ sudo netstat -tupln

Эта команда покажет состояние портов. Описание флагов отразит суть отображаемой информации.

-t — (или --tcp) показать TCP порты;

-u — (или --udp) показать UDP порты;

-l — (или --listening) посмотреть только прослушиваемые порты;

-p — (или --program) показать имя программы и ее PID;

-n — (или --numeric) показывать ip адреса в числовом виде.

А следующая — какие контейнеры сейчас активны.

$ sudo docker ps

По итогу необходимо удостовериться, что порт 8080 занят процессом docker-proxy и прослушивается, а также в том, что присутствует активный контейнер с названием apache/superset.

Если у вас все так же, как на изображении, то идем дальше — то есть вводим IP адрес своей машины и открываем в браузере наш порт с Superset. Узнать свой IP можно, например, вот так:

$ wget -qO- eth0.me

У вас откроется данная страница:

И дальше пройти не получится, ведь пользователей мы никаих не создавали, к тому же в самом Superset никаких данных нет. Чтобы это исправить, нам надо все это настроить и создать.

$ sudo docker exec -it superset superset fab create-admin \                --username admin \                --firstname Superset \                --lastname Admin \                --email admin@admin.com \                --password postgres123; \ sudo docker exec -it superset superset db upgrade; \ sudo docker exec -it superset superset load_examples; \ sudo docker exec -it superset superset init;

Все команды собраны в одну так, чтобы для их исполнения можно было ограничиться однократным нажатием на Enter. Обратите внимание, что в команде указано в качестве пароля.

Команда docker exec позволяет нам передавать внутрь контейнера команды, как если бы мы заходили в виртуальную машину и вводили команды в консоль. Предназначение остальных команд, думаю, понятно из текста.

Дальше полетит многобуков, и в процессе (при наличии зеленого шрифта на темном фоне, как у меня) можно почувствовать себя настоящим hackerman’ом из фильмов.

Зайдем под админом. И если вы видите то же, что и скриншоте ниже — отлично, идем дальше!

Устанавливаем Postgres и PgAdmin

Здесь было бы сложно (хотя кому как), если бы не было этой статьи.

Posgtres — база данных, все это знают. Сам по себе сервер с СУБД может управляться единственным образом путем подключения приложения к нему. И с одной стороны, мы подключимся нашим сервером Superset внутри docker-контейнера к Postgres, что еще надо то. Но настраивать и следить за БД так не получится. Для этого для кожанных мешков людей предусмотрен специальный сервер-интерфейс СУБД. Соответственно, под этот сервер также необходим docker-контейнер. Подробнее PgAdmin будет рассмотрен дальше.

И вот тут мы начинаем говорить о контейнерах, работающих в паре. Здесь отлично подойдет docker-compose. Для запуска композиций наиболее удобно применять так называемые docker-compose-файлы. В них прописываются все настройки запускаемых контейнеров, а дальше все включается одной командой. По сути, мы таким уже пользовались, когда создавали образ контейнера для Superset. Но файл мы скачали из интернета, а сейчас пишем вручную.

Содержание файла:

version: '3.3'  services:   postgres:     image: library/postgres:13     volumes:       - postgres-data:/var/lib/postgresql/data     environment:       POSTGRES_USER: postgres       POSTGRES_HOST_AUTH_METHOD: trust     ports:       - '5432:5432'     restart: always     networks:       - pg-net    pgadmin:     image: dpage/pgadmin4     volumes:       - pgadmin-data:/var/lib/pgadmin     ports:       - '5050:80'     environment:       PGADMIN_DEFAULT_EMAIL: postgres@pg.com       PGADMIN_DEFAULT_PASSWORD: xxx     depends_on:       - postgres     networks:       - pg-net  volumes:   postgres-data:   pgadmin-data:  networks:   pg-net: 

СтрокаPOSTGRES_HOST_AUTH_METHOD: trust устанавливает беспарольный вход в БД. Можно использовать и вход по паролю. Для этого необходимо написать POSTGRES_PASSWORD: xxx.

Этот текст можно скопировать, а далее создать файл docker-compose.yml, написав:

$ nano docker-compose.yml

Далее вставляем текст и выходим нажатием Ctrl+X -> Y -> Enter. После этого в директории с созданным файлом поднимаем сервера postgres и pgadmin с помощью команды

$ sudo docker-compose up -d

-d, как и в прошлый раз, значит, что STDIN, STDOUT и STDERR для контейнера отключены.

Проверяем работу Postgres через PgAdmin

Для начала заходим на порт 5050. На открывшейся странице вводим почту и пароль от pgadmin из yml-файла.

Отлично, мы в панели администратора. Регистрируем новый сервер (подключаемся к нему, иными словами). Нужная кнопка на картинке ниже.

Открыватеся список полей для заполнения. Обязательных два. Первое — name на вкладке General заполняем, как нравится. Исключательно косметическое действие в данный момент. Второй параметр важный — Host name/address на вкладке Connection, здесь надо вписать адрес сервера с СУБД. Вписываем postgres. Проверяем, что port совпадает с тем, что был указан в графе ports: в конфиг-файле docker-compose.yml (то есть 5432). Если да, то жмём Save и любуемся красивыми графиками.

Для надежности можно еще раз посмотреть на открытые порты с помощью netstat -tulpn.

Подключаем Postgres к Superset

В свое время на этом этапе я провел очень много времени, и, когда я нашел решение, оно мне даже показалось излишне простым. Сейчас, перечитывая документацию, я понял, что все лежало на поверхности. А именно, в руководстве «Installing Superset Locally Using Docker Compose» в последней главе указаны все необходимые шаги для подключения локальной БД к Superset.

Отдельно оговорюсь, что созданная и подключенная в качестве примера к Superset БД слишком уж далека от характеристики «гибкая», так как в нее даже нельзя данные свои загрузить. Поэтому о ней мы забудем, а подключим лучше свой Postgres.

Итак, сделать надо следующее.

С помощью Connect database (локация кнопки на скриншоте) мы окрываем меню с настройками нового подключения. В появившемся окне выбираем PostgreSQL.

Далее вводим в HOST адрес 172.17.0.1, PORT5432, DATABASE NAME — как указали в конфиге, то есть postgres. Если у вас не появилось под вышеперчисенными полями никаких красных подписей — полдела сделано, осталась буквально пара мелочей.

В частности, нажимаем CONNECT. После чего перед вами появляется меню дополнительных настроек. Интересна нам только галочка, находящаяся в разделе Security под названием Allow data upload. Её надо включить. Именно благодаря этому вы сможете в дальнейшем загрузить, например, csv-файл со своим данными. И теперь FINISH.

Проверяем, что все есть — для этого захдим в Data -> Databases и если видим строчку с нашей БД, то открываем шампанское можно откинуться в кресле и выдохнуть. Все готово, Superset с Postgres работают.

Дальнейшая эксплуатация

Любой уважающий себя технический специалист знает, что документация по эксплуатации любого изделия должна включать в себя описание таких этапов жизненного цикла, как поддержка функционирования изделия и его вывод из эксплуатации. Так как же работать дальше с нашими контейнерами?

Когда мы хотим завершить работу и, к примеру, погасить нашу рабочую машину, необходимо остановить контейнеры. Композиция postgres + pgadmin останавливается следующим образом (необходимо находится в директории с docker-compose.yml):

$ sudo docker-compose down

Superset у нас работает, как отдельный контейнер, поэтому команда другая:

$ sudo docker container stop superset

А для возвращения к работе с приложениями их необходимо вывести из состония «сна» и поднять снова. Это делается вот так:

$ sudo docker-compose up -d
$ sudo docker container start superset

На этом действительно можно закончить. Кажется, статья достаточно полно охватывает все нюансы и детали и я надеюсь, поможет людям)


Вот и все. Желаю вам жить-поживать, да свой Maven Superset наглаживать.


ссылка на оригинал статьи https://habr.com/ru/post/661159/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *