Перенос метаданных между кластерами Yandex Data Processing с помощью Metastore
Вы можете перенести метаданные между кластерами Yandex Data Processing с СУБД Hive. Сначала метаданные экспортируются из одного кластера, затем импортируются в другой с помощью Hive Metastore.
Чтобы перенести метаданные между кластерами Yandex Data Processing:
- Создайте тестовую таблицу.
- Экспортируйте данные.
- Подключите Yandex Data Processing к Metastore.
- Импортируйте данные.
- Проверьте результат.
Если созданные ресурсы вам больше не нужны, удалите их.
Примечание
Metastore находится на стадии Preview.
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте сервисный аккаунт
dataproc-s3-sa
и назначьте ему ролиdataproc.agent
,dataproc.provisioner
иstorage.uploader
. -
В Yandex Object Storage создайте бакет
dataproc-bucket
и предоставьте сервисному аккаунту разрешениеREAD и WRITE
для этого бакета. -
Создайте облачную сеть
dataproc-network
. -
В этой сети создайте подсеть
dataproc-subnet
. -
Настройте NAT-шлюз для созданной подсети.
-
Создайте группу безопасности
dataproc-security-group
со следующими правилами:Правила группы безопасности
Для какого сервиса нужно правило
Зачем нужно правило
Настройки правила
Yandex Data Processing
Для входящего служебного трафика.
- Диапазон портов —
0-65535
. - Протокол —
Любой
(Any
). - Источник —
Группа безопасности
. - Группа безопасности —
Текущая
(Self
).
Yandex Data Processing
Для входящего трафика, чтобы разрешить доступ к NTP-серверам для синхронизации времени.
- Диапазон портов —
123
. - Протокол —
UDP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Yandex Data Processing
Для входящего трафика, чтобы из интернета подключаться по SSH к хостам подкластеров с публичным доступом.
- Диапазон портов —
22
. - Протокол —
TCP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Metastore
Для входящего трафика от клиентов.
- Диапазон портов —
30000-32767
. - Протокол —
Любой
(Any
). - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Metastore
Для входящего трафика от балансировщика.
- Диапазон портов —
10256
. - Протокол —
Любой
(Any
). - Источник —
Проверки состояния балансировщика
.
Yandex Data Processing
Для исходящего служебного трафика.
- Диапазон портов —
0-65535
. - Протокол —
Любой
(Any
). - Источник —
Группа безопасности
. - Группа безопасности —
Текущая
(Self
).
Yandex Data Processing
Для исходящего HTTPS-трафика.
- Диапазон портов —
443
. - Протокол —
TCP
. - Назначение —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Yandex Data Processing
Для исходящего трафика, чтобы разрешить доступ к NTP-серверам для синхронизации времени.
- Диапазон портов —
123
. - Протокол —
UDP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Yandex Data Processing
Для исходящего трафика, чтобы разрешить подключение кластера Yandex Data Processing к Metastore.
- Диапазон портов —
9083
. - Протокол —
Любой
(Any
). - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
- Диапазон портов —
-
Создайте два кластера Yandex Data Processing с именами
dataproc-source
иdataproc-target
и следующими настройками:-
Сервисы:
HDFS
HIVE
SPARK
YARN
ZEPPELIN
-
Сервисный аккаунт —
dataproc-s3-sa
. -
Зона доступности — та, в которой находится подсеть
dataproc-subnet
. -
Свойства —
spark:spark.sql.hive.metastore.sharedPrefixes
со значениемcom.amazonaws,ru.yandex.cloud
. Нужно для выполнения заданий PySpark и для интеграции с Metastore. -
Имя бакета —
dataproc-bucket
. -
Сеть —
dataproc-network
. -
Группы безопасности —
dataproc-security-group
. -
UI Proxy — включен.
-
Подсеть у подкластеров Yandex Data Processing —
dataproc-subnet
. -
Публичный доступ у хоста-мастера — включен.
-
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации metastore-import.tf
.В этом файле описаны:
- сеть;
- NAT-шлюз и таблица маршрутизации, необходимые для работы Yandex Data Processing;
- подсеть;
- группа безопасности для Yandex Data Processing и Metastore;
- сервисный аккаунт;
- статический ключ доступа для создания бакета Yandex Object Storage;
- бакет;
- два кластера Yandex Data Processing.
-
Укажите в файле
metastore-import.tf
:folder_id
— идентификатор облачного каталога (такой же, как в настройках провайдера).dp_ssh_key
— абсолютный путь к публичному ключу для кластеров Yandex Data Processing. Подробнее см. в разделе SSH-подключение к хосту Yandex Data Processing.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Важно
Не назначайте на бакет политику доступа, иначе кластер Metastore не сможет записывать данные в бакет.
Создайте тестовую таблицу
В кластере dataproc-source
создайте тестовую таблицу countries
:
-
Перейдите на страницу каталога
и выберите сервис Yandex Data Processing. -
Откройте страницу кластера
dataproc-source
. -
Перейдите по ссылке Zeppelin Web UI в разделе UI Proxy.
-
Выберите Notebook, затем
Create new note. -
В появившемся окне укажите название записи и нажмите кнопку Create.
-
Чтобы выполнить PySpark-задание, вставьте скрипт Python в строку ввода:
%pyspark from pyspark.sql.types import * schema = StructType([StructField('Name', StringType(), True), StructField('Capital', StringType(), True), StructField('Area', IntegerType(), True), StructField('Population', IntegerType(), True)]) df = spark.createDataFrame([('Австралия', 'Канберра', 7686850, 19731984), ('Австрия', 'Вена', 83855, 7700000)], schema) df.write.mode("overwrite").option("path","s3a://dataproc-bucket/countries").saveAsTable("countries")
-
Нажмите кнопку
Run all paragraphs и дождитесь завершения задания. -
Замените в строке ввода Python-код на SQL-запрос:
%sql SELECT * FROM countries;
-
Нажмите кнопку
Run all paragraphs.Результат:
| Name | Capital | Area | Population | | --------- | -------- | ------- | ---------- | | Австралия | Канберра | 7686850 | 19731984 | | Австрия | Вена | 83855 | 7700000 |
Экспортируйте данные
Чтобы перенести данные из одного кластера Yandex Data Processing в другой, создайте резервную копию данных в кластере dataproc-source
с помощью утилиты pg_dump
:
-
Подключитесь по SSH к хосту-мастеру кластера
dataproc-source
:ssh ubuntu@<FQDN_хоста-мастера>
-
Создайте резервную копию и сохраните ее в файле
metastore_dump.sql
:pg_dump --data-only --schema public postgres://hive:hive-p2ssw0rd@localhost/metastore > metastore_dump.sql
-
Отключитесь от хоста-мастера.
-
Скачайте файл
metastore_dump.sql
на локальную машину, в текущую директорию:scp ubuntu@<FQDN_хоста-мастера>:metastore_dump.sql .
-
Загрузите файл
metastore_dump.sql
в бакетdataproc-bucket
.
Подключите Yandex Data Processing к Metastore
-
Создайте кластер Metastore с параметрами:
- Сервисный аккаунт —
dataproc-s3-sa
. - Сеть —
dataproc-network
. - Подсеть —
dataproc-subnet
. - Группы безопасности —
dataproc-security-group
.
- Сервисный аккаунт —
-
Добавьте в настройки кластера
dataproc-target
свойствоspark:spark.hive.metastore.uris
со значениемthrift://<IP-адрес_кластера_Metastore>:9083
.Чтобы узнать IP-адрес кластера Metastore, в консоли управления выберите сервис Yandex Data Processing и на левой панели выберите страницу
Metastore-сервер. IP-адрес кластера указан в блоке Общая информация.
Импортируйте данные
- Откройте страницу кластера Metastore.
- Нажмите кнопку
Импорт. - В открывшемся окне укажите бакет
dataproc-bucket
и файлmetastore_dump.sql
. - Нажмите кнопку Импортировать.
- Дождитесь, когда импорт завершится. Статус импорта можно проверить на странице кластера Metastore, в разделе
Операции.
Проверьте результат
-
Откройте страницу кластера
dataproc-target
. -
Перейдите по ссылке Zeppelin Web UI в разделе UI Proxy.
-
Выберите Notebook, затем
Create new note. -
В появившемся окне укажите название записи и нажмите кнопку Create.
-
Отправьте SQL-запрос:
%sql SELECT * FROM countries;
-
Нажмите кнопку
Run all paragraphs.Результат:
| Name | Capital | Area | Population | | --------- | -------- | ------- | ---------- | | Австралия | Канберра | 7686850 | 19731984 | | Австрия | Вена | 83855 | 7700000 |
В итоге в кластер dataproc-target
были импортированы метаданные из кластера dataproc-source
.
Удалите созданные ресурсы
Некоторые ресурсы платные. Удалите ресурсы, которые вы больше не будете использовать, чтобы не платить за них:
-
Удалите остальные ресурсы в зависимости от способа их создания:
ВручнуюTerraform-
Удалите объекты из бакета.
-
В терминале перейдите в директорию с планом инфраструктуры.
-
Удалите конфигурационный файл
metastore-import.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Все ресурсы, которые были описаны в конфигурационном файле
metastore-import.tf
, будут удалены. -
-