Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
Утилита Sqoop позволяет импортировать базы данных в кластер Yandex Data Processing. В зависимости от конфигурации кластера Yandex Data Processing вы можете выполнить импорт в:
- бакет Yandex Object Storage;
- директорию HDFS;
- Apache Hive;
- Apache HBase.
Чтобы импортировать базы данных кластера-источника с помощью Sqoop в кластер-приемник Yandex Data Processing:
Если созданные ресурсы вам больше не нужны, удалите их.
Примечание
Утилита Sqoop не поддерживается для кластеров Yandex Data Processing версии 2.0 и выше. В качестве альтернативы используйте функциональные возможности Apache Spark™
Перед началом работы
Примечание
Разместите кластеры и виртуальную машину в одной облачной сети.
- Создайте облачную сеть.
- Создайте подсеть в зоне доступности
ru-central1-d
. - Настройте NAT-шлюз для созданной подсети — это обязательное условие для работы кластера Yandex Data Processing.
Остальные ресурсы вы можете создать вручную или с помощью Terraform.
Вручную
-
Создайте кластер Managed Service for PostgreSQL любой подходящей вам конфигурации со следующими настройками:
- Имя БД —
db1
; - Имя пользователя —
user1
.
- Имя БД —
-
Чтобы импортировать данные в бакет Object Storage:
-
Создайте бакет с ограниченным доступом.
-
Создайте сервисный аккаунт с ролями:
-
Выдайте этому сервисному аккаунту разрешения на чтение и запись в бакет.
-
-
Создайте кластер Yandex Data Processing любой подходящей вам конфигурации.
Укажите настройки, соответствующие хранилищу, в которое будут импортированы данные:
Object StorageДиректория HDFSApache HiveApache HBase- Сервисный аккаунт — имя созданного ранее сервисного аккаунта.
- Имя бакета — имя созданного ранее бакета.
- Сервисы —
Sqoop
.
Сервисы:
HBase
,HDFS
,Sqoop
,Yarn
,Zookeeper
.
-
Сервисы:
HDFS
,Hive
,Mapreduce
,Sqoop
,Yarn
.
-
Свойства — ключ
hive:hive.execution.engine
со значениемmr
.
Сервисы:
HBase
,HDFS
,Sqoop
,Yarn
,Zookeeper
.
-
Создайте виртуальную машину для подключения к кластерам Managed Service for PostgreSQL и Yandex Data Processing.
-
Если вы используете группы безопасности для кластеров и виртуальной машины, настройте их так, чтобы разрешить подключение:
С помощью Terraform
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации clusters-postgresql-data-proc-and-vm.tf
.В этом файле описаны:
- группы безопасности для кластеров и виртуальной машины;
- сервисный аккаунт для кластера Yandex Data Processing;
- бакет Object Storage;
- кластер Managed Service for PostgreSQL;
- кластер Yandex Data Processing;
- виртуальная машина с публичным доступом из интернета.
-
Укажите параметры инфраструктуры в файле конфигурации
clusters-postgresql-data-proc-and-vm.tf
в блокеlocals
:-
folder_id
— идентификатор каталога, в котором будут созданы ресурсы. -
network_id
— идентификатор созданной ранее облачной сети. -
subnet_id
— идентификатор созданной ранее подсети. -
storage_sa_id
— идентификатор сервисного аккаунта, с помощью которого будет создан бакет в Object Storage. -
data_proc_sa
— имя сервисного аккаунта для кластера Yandex Data Processing. Оно должны быть уникальным в каталоге. -
pg_cluster_version
— версия PostgreSQL кластера Managed Service for PostgreSQL. -
pg_cluster_password
— пароль для пользователяuser1
базы данныхdb1
Managed Service for PostgreSQL. -
vm_image_id
— идентификатор публичного образа с Ubuntu без GPU. Например, для Ubuntu 20.04 LTS. -
vm_username
иvm_public_key
— логин и абсолютный путь к публичному SSH-ключу, которые будут использоваться для доступа к виртуальной машине. По умолчанию в образе Ubuntu 20.04 LTS указанный логин игнорируется, вместо него создается пользователь с логиномubuntu
. Используйте его для подключения к виртуальной машине. -
bucket_name
— имя бакета в Object Storage. Оно должны быть уникальным для всего Object Storage. -
dp_public_key
— абсолютный путь к публичному SSH-ключу для кластера Yandex Data Processing.Для SSH-подключения к хостам кластера Yandex Data Processing версии 1.х используйте имя пользователя
root
.
-
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовка кластера-источника
-
Подключитесь к базе данных
db1
кластера Managed Service for PostgreSQL от имени пользователяuser1
. -
Наполните базу тестовыми данными. В качестве примера используется простая таблица с именами и возрастом людей:
-
Создайте таблицу:
CREATE TABLE persons ( Name VARCHAR(30) NOT NULL, Age INTEGER DEFAULT 0, PRIMARY KEY (Name) );
-
Наполните таблицу данными:
INSERT INTO persons (Name, Age) VALUES ('Anna', 19), ('Michael', 65), ('Fred', 28), ('Alsou', 50), ('Max', 27), ('John', 34), ('Dmitry', 42), ('Oleg', 19), ('Alina', 20), ('Maria', 28);
-
Импорт базы данных
Чтобы обеспечить параллелизм базы данныхage
.
Пусть:
- FQDN хоста подкластера Yandex Data Processing для хранения данных:
rc1c-dataproc-d-vfw6fa8x********.mdb.yandexcloud.net
. - Имя бакета в Object Storage.
- Имена директорий в Object Storage и HDFS:
import-directory
. - Имя базы данных Apache Hive:
db-hive
. - Имя семейства столбцов Apache HBase:
family1
. - Имена таблиц HBase и Hive:
import-table
.
- Идентификатор кластера Managed Service for PostgreSQL:
c9qgcd6lplrs********
.
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrs********.rw.mdb.yandexcloud.net:6432/db1" \ --username "user1" \ --P \ --table "persons" \ --target-dir "s3a://<имя_бакета>/import-directory" \ --split-by "age"
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrs********.rw.mdb.yandexcloud.net:6432/db1" \ --username "user1" \ --table "persons" \ --target-dir "import-directory" \ --P \ --split-by "age"
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrs********.rw.mdb.yandexcloud.net:6432/db1" \ --username "user1" \ --P \ --table "persons" \ --hive-import \ --create-hive-table \ --hive-database "db-hive" \ --hive-table "import-table" \ --split-by "age"
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrs********.rw.mdb.yandexcloud.net:6432/db1" \ --username "user1" \ --P \ --table "persons" \ --hbase-create-table \ --column-family "family1" \ --hbase-table "import-table" \ --split-by "age"
Проверка корректности импорта
Если импорт прошел успешно, вы увидите содержимое таблицы persons
.
Скачайте из бакета файлы с результатами импорта.
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Выполните команду:
hdfs dfs -cat /user/root/import-directory/*
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Выполните команду:
hive -e "SELECT * FROM import-table;"
-
Подключитесь по SSH к хосту подкластера Yandex Data Processing для хранения данных.
-
Выполните команду:
echo -e "scan 'import-table'" | hbase shell -n
Удаление созданных ресурсов
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Если вы зарезервировали для виртуальной машины публичный статический IP-адрес, освободите и удалите его.
-
Удалите кластеры:
-
Если вы создавали бакет Object Storage, удалите его.
Чтобы удалить инфраструктуру, созданную с помощью Terraform:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
Удалите созданные вручную: