Greenplum DB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:11, 9 декабря 2017.
Greenplum Database
Greenplumlogo.jpg
Разработчики: Pivotal Software
Постоянный выпуск: 4.3.11.1 / январь 2017
Состояние разработки: Активное
Операционная система: Linux
Тип ПО: СУБД
Лицензия: Apache License
Веб-сайт greenplum.org

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

Основные особенности

База данных Greenplum основана на технологии PostgreSQL с открытым исходным кодом. По сути, это несколько экземпляров базы данных PostgreSQL, которые действуют вместе как одна сплоченная система управления базами данных (СУБД). Greenplum (GP) – реляционная СУБД, имеющая массово-параллельную (massive parallel processing) архитектуру без разделения ресурсов (Shared Nothing).

Связь с PostgreSQL

Внутренние элементы PostgreSQL были модифицированы или дополнены для поддержки параллельной структуры базы данных Greenplum. Например, системный каталог, оптимизатор, исполнитель запросов и компоненты диспетчера транзакций были изменены и расширены, чтобы иметь возможность выполнять запросы одновременно во всех параллельных экземплярах базы данных PostgreSQL. Соединение Greenplum (сетевой уровень) обеспечивает связь между отдельными экземплярами PostgreSQL и позволяет системе вести себя как одна логическая база данных.

Массовый параллелизм

Архитектура базы данных Greenplum обеспечивает автоматическое распараллеливание всех данных и запросов в архитектуре с масштабируемым общим доступом. [Источник 1]

Дополнительное машинное обучение

Предоставлена ​​Apache MADlib, библиотека для масштабируемой аналитики в базе данных, расширяющей возможности базы данных через пользовательские функции.

Архитектура

Архитектура GreenPlum DB
  • Master instance (он же просто «мастер») – инстанс Postgres. Мастер - это точка входа в систему базы данных Greenplum. Это экземпляр базы данных, к которому клиенты подключаются и отправляют SQL-запросы. Мастер координирует свою работу с другими экземплярами базы данных в системе, называемыми сегментами, которые хранят и обрабатывают данные. Конечные пользователи базы данных Greenplum взаимодействуют с базой данных Greenplum (через мастера), как и с обычной базой данных PostgreSQL. Они подключаются к базе данных с помощью клиентских программ, таких как psql или через интерфейсы прикладного программирования (API), такие как JDBC или ODBC. Мастер - это место, где находится глобальный системный каталог. Глобальный системный каталог представляет собой набор системных таблиц, содержащих метаданные о самой базе данных Greenplum. Мастер не содержит никаких пользовательских данных; данные хранятся только на сегментах. Мастер аутентифицирует клиентские соединения, обрабатывает входящие команды SQL, распределяет рабочие нагрузки между сегментами, координирует результаты, возвращаемые каждым сегментом, и представляет конечные результаты клиентской программе.
  • Master host («сервер-мастер») – сервер, на котором работает Master instance.
  • Secondary master instance — инстанс Postgres, являющийся резервным мастером, включается в работу в случае недоступности основного мастера (переключение происходит вручную);
  • Primary segment instance («сегмент») — инстанс Postgres. Ячейки сегментов базы данных Greenplum являются независимыми базами данных PostgreSQL, каждая из которых хранит часть данных, выполняет с ними операции и отдают результаты мастеру (в общем случае). Когда пользователь подключается к базе данных с помощью мастера Greenplum и выдает запрос, в каждой базе данных сегмента создаются процессы для обработки работы этого запроса. Пользовательские таблицы и их индексы распределяются по доступным сегментам в системе базы данных Greenplum. Каждый сегмент содержит свою часть данных. Процессы сервера базы данных, обслуживающие данные сегмента, выполняются в соответствующих экземплярах сегмента. Пользователи взаимодействуют с сегментами Greenplum через мастера.
  • Mirror segment instance («зеркало») — инстанс Postgres, являющийся зеркалом одного из primary сегментов, автоматически принимает на себя роль primary в случае падения оного.

GP поддерживает только 1-to-1 репликацию сегментов: для каждого из primary может быть только одно зеркало.

  • Segment host («сервер-сегмент») – Сегменты выполняются на серверах, называемых сегментами хостов. Хост сегмент обычно держит от двух до восьми сегментов Greenplum, в зависимости от ядер процессора, оперативной памяти, хранилища, сетевых интерфейсов и рабочих нагрузок. Ожидается, что хост сегменты будут идентично настроены. Ключом к достижению наилучшей производительности в базе данных Greenplum является равномерное распределение данных и рабочих нагрузок по большому числу сегментов, с одинаковыми мощностями, чтобы все сегменты одновременно работали над задачей и выполняли свою работу одновременно.[Источник 2]

Установка

Следующий пример будет для установки на CentOs 7.

Подготовка к установке

Установка nano и исправление проблем с сетью

Этот раздел не обязателен, если Вы разумист не по годам.

Для выполнения следующих действий, будем использовать текстовой редактор nano. Можно использовать vi, но nano удобнее. Если сборка его не содержит, установим его следующей командой:

yum install nano

При этом может возникнуть следующая ошибка:

Cannot find a valid baseurl for repo: base/7/x86_64@.

Если при вводе

ping 8.8.8.8

Выходит ошибка Сеть недоступна или Network is unreachable, делаем следующие действия:

  • С помощью команды cd переходим в директорию /etc/sysconfig/network-scripts/
  • Используя команду ls находим файл, с названием наиболее похожим на ifcfg-eth0. В моем случае это ifcfg-enp0s3
  • Необходимо, чтобы в этом файле было прописано ONBOOT = “yes”
  • Для редактирования будем использовать редактор VI, вводим следующую команду:
vi ifcfg-enp0s3
  • Для редактирования с помощью VI нужно знать следующие команды:

Для выхода из файла без сохранения:

    ESC  :  q  ! Enter

Для выхода из файла, сохранив изменения:

    ESC  :  w ! Enter
    ESC  :  q   Enter

Для выхода из файла с сохранением, одной командой:

    ESC  :  wq  Enter

Для перехода в режим ввода нужно нажать команды типа:

  "i"   вставлять здесь
  "A"   вставлять с конца строки
  "cw"  заменять текущее слово
  ESC    чтобы вернуться в командный режим
  • После внесения изменения, сохранения его и выхода из редактора, нужно перезапустить сеть следующей командой:
 service network restart
  • Проверяем работоспособность сети с помощью команды:
ping 8.8.8.8
  • Если пингуется бесконечно, то выйти из этого состояния можно комбинацией клавиш "Crtl+C"
  • Теперь можем установить nano:
yum install nano
  • Не забываем пару раз нажать клавишу y, когда это потребуется

Настройка Linux перед установкой GreenplumDB

  • В файле /etc/hosts должны быть прописаны названия хостов и адреса для всего, что является частью GreenplumDB. Можем редактировать его с помощью nano, установленным в предыдущей части:
nano /etc/hosts
  • Устанавливаем следующие параметры в файле /etc/sysctl.conf
nano /etc/sysctl.conf 
kernel.shmmax = 500000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 10000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
vm.overcommit_memory = 2
  • После чего перезагружаем систему, сделать это можно введя команду reboot в консоли.
  • Устанавливаем следующие параметры в /etc/security/limits.conf :
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

Также нужно заглянуть в каталог /etc/security/limits.d/ в файле x0-nproc.conf могут быть значения параметров, отличные от установленных, и тут у них больший приоритет. Меняем их на нужные нам и в x0-nproc.conf.

  • У каждого диска параметр read-ahead должен быть равен 16384
  • Узнаем название диска, например
df -h

После чего увидим следующее:

Результат команды df -h

Где sda1 - нужное нам название.

  • Устанавливаем значение read-ahead (blockdev):
# /sbin/blockdev --setra 16384 /dev/sda1
  • Чтобы узнать значение этого параметра вводим команду:
# /sbin/blockdev --getra /dev/sda1
  • Для GreenplumDB рекомендовано использовать планировщик ввода/вывода (I/O Scheduler) под названием deadline. Для CentOs 7.x этот параметр можно установить с помощью утилиты grubby, запущенной из под рута:
grubby --update-kernel=ALL --args="elevator=deadline"

После чего необходимо перезапустить систему.

  • Проверить настройки ядра можно с помощью команды
grubby --info=ALL
  • Отключаем Transparent Huge Pages (THP), аналогично используем grubby:
# grubby --update-kernel=ALL --args="transparent_hugepage=never"

После чего требуется перезагрузка Проверить состояние параметра THP можно следующей командой:

$ cat /sys/kernel/mm/*transparent_hugepage/enabled

Ответ должен быть never.

  • Также настройка RemoveIPC=yes убирает IPC соединения, когда не системный пользователь разлогинивается. Это мешает работе GreenplumDB. Чтобы этого не случалось, в файле /etc/systemd/logind.conf необходимо прописать RemoveIPC=no.

Установка GreenplumDB

  • Сперва нужно зарегистрироваться на сайте https://network.pivotal.io для получения API токена. Который можно посмотреть перейдя в настройки аккаунта:
Настройки аккаунта
  • После чего находим нужную нам версию GreenplumDB и получаем ссылку для скачивания:
Ссылка для скачивания
  • Далее формируем wget запрос следующего вида
wget -O "<filename>" --header="Authorization: Token <API Token>" https://network.pivotal.io/api/v2/products/<product-id>/releases/<release-id>/product_files/<product-file-id>/download
  • Распаковываем установщик:
unzip greenplum-loaders-<version>-PLATFORM.bin.zip
  • Запускаем установщик:
/bin/bash greenplum-loaders-<version>-PLATFORM.bin

Во время установки нужно будет согласиться с лицензионным соглашением и указать путь установки.

Работа с БД

Добавление пользователей и ролей

База данных Greenplum управляет доступом к базе данных с использованием ролей. Первоначально существует одна роль суперпользователя - роль, связанная с пользователем ОС, который инициализировал экземпляр базы данных, обычно gpadmin. Этот пользователь владеет всеми файлами базы данных Greenplum и операциями ОС, поэтому важно оставить роль gpadmin только для системных задач.

Создание пользователя с помощью команды createuser

  • Необходимо выполнить вход как gpadmin.
  • Ввести следующую команду:
$ createuser -P user1

Где user1 - имя нового пользователя.

Создание пользователя с помощью команды CREATE USER

  • Подключаемся к базе данных template1 как gpadmin:
$ psql template1
  • Создаем пользователя с именем user2 с паролем 'wkvles':
template1=# CREATE USER user2 WITH PASSWORD 'wkvles' NOSUPERUSER;
  • Выводим список ролей:
template1=# \du
List of roles
Role name |            Attributes             | Member of
-----------+-----------------------------------+-----------
gpadmin   | Superuser, Create role, Create DB |
gpmon     | Superuser, Create DB              |
user1     | Create DB                         |
user2     |                                   |

Создание группы и добавление к ней пользователей

  • Пока подключены к базе данных template1 вводим следующие sql команды:
 template1=# CREATE ROLE users;
 template1=# GRANT users TO user1, user2;
  • Теперь при выводе списка ролей, можно увидеть принадлежность пользователей user1 и user2 к группе users
template1=# \du
List of roles
Role name |            Attributes             | Member of
-----------+-----------------------------------+-----------
gpadmin   | Superuser, Create role, Create DB |
gpmon     | Superuser, Create DB              |
user1     | Create DB                         | {users}
user2     |                                   | {users}
users     | Cannot login                      |
  • Выходим из базы данных:
template1=# \q

Создание и подготовка базы данных

Создайте новую базу данных с помощью команды CREATE DATABASE SQL в psql или командой утилиты createdb в терминале. Новая база данных является копией базы данных template1, если вы не указали другой шаблон. Чтобы использовать команду CREATE DATABASE, вы должны быть подключены к базе данных. С недавно установленной базой данных Greenplum вы можете подключиться к базе данных template1, чтобы создать свою первую пользовательскую базу данных.

Создание базы данных

  • Введем следующую команду для уничтожения уже существующей базы данных:
$ dropdb tutorial

Где tutorial - название базы данных

  • Создадим базу данных tutorial с дефолтными параметрами:
$ createdb tutorial
  • Убедимся, что база данных была создана с помощью команды psql -l:
[gpadmin@gpdb-sandbox ~]$ psql -l
List of databases
Name    |  Owner  | Encoding |  Access privileges
-----------+---------+----------+---------------------
gpadmin   | gpadmin | UTF8     |
gpperfmon | gpadmin | UTF8     | gpadmin=CTc/gpadmin
: =c/gpadmin
postgres  | gpadmin | UTF8     |
template0 | gpadmin | UTF8     | =c/gpadmin
: gpadmin=CTc/gpadmin
template1 | gpadmin | UTF8     | =c/gpadmin
: gpadmin=CTc/gpadmin
tutorial  | gpadmin | UTF8     |
(6 rows)
  • Подключаемся к базе данных tutorial как пользователь user1
psql -U user1 tutorial

Предоставление прав пользователям базы данных

В работающей базе данных необходимо предоставить пользователям минимальные разрешения для выполнения своей работы. Например, пользователю может потребоваться разрешение SELECT для просмотра данных таблицы, но не UPDATE, INSERT или DELETE для изменения данных.

  • Подключаемся к базе данных tutorial как gpadmin:
$ psql -U gpadmin tutorial
  • Даем пользователям user1 и user2 все права на использование базы данных:
tutorial=# GRANT ALL PRIVILEGES ON DATABASE tutorial TO user1, user2;
  • Выходим из базы данных
tutorial=# \q

Создание схемы и задание пути поиска

Схема базы данных - это именованный контейнер для набора объектов базы данных, включая таблицы, типы данных и функции. База данных может иметь несколько схем. Объекты в схеме ссылаются путем добавления имени объекта к имени схемы, разделенным точкой. Например, таблица человека в схеме сотрудника написана employee.person. Схема предоставляет пространство имен для содержащихся в нем объектов. База данных содержит путь поиска схемы, который представляет собой список схем для поиска имен объектов, которые не имеют имени схемы. Первая схема в пути поиска также является схемой, в которой новые объекты создаются, когда не указана никакая схема. Путь поиска по умолчанию - пользовательский, общедоступный, поэтому по умолчанию каждый созданный вами объект принадлежит схеме, связанной с вашим именем входа. Далее мы создадим схему faa и зададим путь поиска так, чтобы это была схема была схемой по умолчанию.

  • Меняем директорию на нужную нам, в этом примере - faa:
$ cd ~/gpdb-sandbox-tutorials/faa
  • Подключаемся к базе данных tutorial с помощью psql:
$ psql -U user1 tutorial
  • Создаем схему faa:
tutorial=# DROP SCHEMA IF EXISTS faa CASCADE;
tutorial=# CREATE SCHEMA faa;
  • Добавляем путь поиска для схемы faa:
tutorial=# SET SEARCH_PATH TO faa, public, pg_catalog, gp_toolkit;
  • Посмотрим на путь поиска:
tutorial=# SHOW search_path;
search_path
-------------------------------------
faa, public, pg_catalog, gp_toolkit
(1 row)
  • Путь поиска, указанный выше, не является постоянным; мы должны устанавливать его каждый раз при подключении к базе данных. Можно связать путь поиска с ролью пользователя с помощью команды ALTER ROLE, так что каждый раз, когда мы подключаемся к базе данных с этой ролью, путь поиска восстанавливается:
tutorial=# ALTER ROLE user1 SET search_path TO faa, public, pg_catalog, gp_toolkit;
  • Выходим из psql
tutorial=# \q

Источники

  1. The World’s First Open-Source & Massively Parallel Data Platform // greenplum.org: сайт. URL: http://greenplum.org/ / (дата обращения: 01.11.2017)
  2. Greenplum DB // Хабрахабр: сайт. URL: https://habrahabr.ru/company/tinkoff/blog/267733/ / (дата обращения: 01.11.2017)