Выгрузка базы данных в Yandex Data Proc
Утилита Sqoop позволяет импортировать базы данных в кластер Yandex Data Proc. В зависимости от конфигурации кластера Yandex Data Proc вы можете выполнить импорт в:
- бакет Yandex Object Storage;
- директорию HDFS;
- Apache Hive;
- Apache HBase.
Чтобы импортировать базы данных кластера-источника с помощью Sqoop в кластер-приемник Yandex Data Proc:
Перед началом работы
Примечание
Разместите кластеры и виртуальную машину в одной облачной сети.
-
Создайте кластер Yandex Managed Service for PostgreSQL любой подходящей вам конфигурации со следующими настройками:
- с базой данных
db1
; - с пользователем
user1
.
- с базой данных
-
Чтобы импортировать данные в бакет Yandex Object Storage:
- Создайте бакет с именем
my-bucket
. - Создайте сервисный аккаунт с именем
bucket-sa
. - Выдайте этому сервисному аккаунту права на запись в бакет
my-bucket
.
- Создайте бакет с именем
-
Создайте кластер Yandex Data Proc любой подходящей вам конфигурации.
Укажите настройки, соответствующие хранилищу, в которое будут импортированы данные:
Бакет Yandex Object StorageДиректория HDFSApache HiveApache HBase- Сервисный аккаунт —
bucket-sa
. - Имя бакета —
my-bucket
. - Сервисы —
Sqoop
.
Сервисы:
HBase
,HDFS
,Sqoop
,Yarn
,Zookeeper
.
-
Сервисы:
HDFS
,Hive
,Mapreduce
,Sqoop
,Yarn
.
-
Свойства — ключ
hive:hive.execution.engine
со значениемmr
.
Сервисы:
HBase
,HDFS
,Sqoop
,Yarn
,Zookeeper
.
- Сервисный аккаунт —
-
Создайте виртуальную машину для подключения к кластеру-источнику и Yandex Data Proc.
-
Настройте группы безопасности кластеров и виртуальной машины, чтобы разрешить подключение:
Подготовка кластера-источника
- Подключитесь к базе данных
db1
кластера Yandex 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);
-
Импорт базы данных
Чтобы обеспечить параллелизм базы данных, Sqoop позволяет разделять импортируемые данные не только по первичному ключу, но и по другим столбцам таблицы. В примере разделение данных выполняется по столбцу age
.
Пусть:
- FQDN хоста подкластера Yandex Data Proc для хранения данных:
rc1c-dataproc-d-vfw6fa8xqfukq23m.mdb.yandexcloud.net
. - Имя базы данных Apache Hive:
db-hive
. - Имя семейства столбцов Apache HBase:
family1
. - Имена директорий в Yandex Object Storage и HDFS:
import-directory
. - Имена таблиц HBase и Hive:
import-table
.
- Идентификатор кластера Yandex Managed Service for PostgreSQL:
c9qgcd6lplrsjt9jhtuu
.
Импорт в Yandex Object Storage
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrsjt9jhtuu.rw.mdb.yandexcloud.net:6432/db1" \ --username "user1" \ --P \ --table "persons" \ --target-dir "s3a://my-bucket/import-directory" \ --split-by "age"
Импорт в директорию HDFS
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrsjt9jhtuu.rw.mdb.yandexcloud.net:6432/db1" \ --username "user1" \ --table "persons" \ --target-dir "import-directory" \ --P \ --split-by "age"
Импорт в Apache Hive
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrsjt9jhtuu.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"
Импорт в Apache HBase
-
Выполните команду:
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \ --connect "jdbc:postgresql://c-c9qgcd6lplrsjt9jhtuu.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
.
Проверка импорта в Yandex Object Storage
Скачайте из бакета my-bucket
файлы с результатами импорта.
Проверка импорта в директорию HDFS
-
Подключитесь по SSH к хосту подкластера Data Proc для хранения данных.
-
Выполните команду:
hdfs dfs -cat /user/root/import-directory/*
Проверка импорта в Apache Hive
-
Подключитесь по SSH к хосту подкластера Data Proc для хранения данных.
-
Выполните команду:
hive -e "SELECT * FROM import-table;"
Проверка импорта в Apache HBase
-
Подключитесь по SSH к хосту подкластера Data Proc для хранения данных.
-
Выполните команду:
echo -e "scan 'import-table'" | hbase shell -n
Удаление созданных ресурсов
Если созданные ресурсы вам больше не нужны, удалите их:
-
Если вы зарезервировали для виртуальной машины публичный статический IP-адрес, освободите и удалите его.
-
Удалите кластеры:
-
Если вы создавали бакет Yandex Object Storage, удалите его.