Обмен данными между Yandex Managed Service for ClickHouse и Yandex Data Proc
Чтобы настроить загрузку и выгрузку данных между кластерами Managed Service for ClickHouse и Data Proc:
- Подготовьте облако к работе.
- Выгрузите данные из Managed Service for ClickHouse.
- Загрузите данные в Managed Service for ClickHouse.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Примечание
Разместите кластеры и виртуальную машину в одной облачной сети.
- Создайте облачную сеть.
- Создайте подсеть в зоне доступности
ru-central1-c
. - Настройте NAT-шлюз для созданной подсети — это обязательное условие для работы кластера Data Proc.
Создайте ресурсы:
-
Создайте кластер Managed Service for ClickHouse любой подходящей вам конфигурации со следующими настройками:
- с публичным доступом к хостам кластера;
- с базой данных
db1
; - с пользователем
user1
.
-
Создайте сервисный аккаунт для кластера Data Proc . Назначьте ему роли:
dataproc.agent
dataproc.provisioner
monitoring.viewer
.
-
Создайте кластер Data Proc любой подходящей вам конфигурации со следующими настройками:
- с включенной опцией UI Proxy;
- с созданным ранее сервисным аккаунтом;
- c компонентами:
- HBASE
- HDFS
- HIVE
- MAPREDUCE
- SPARK
- TEZ
- YARN
- ZEPPELIN
- ZOOKEEPER
-
Создайте виртуальную машину для подключения к кластерам Managed Service for ClickHouse и Data Proc.
-
Подключитесь к виртуальной машине по SSH и настройте подключения к кластерам:
-
(Опционально) Чтобы экспортировать данные в бакет Yandex Object Storage:
- Создайте бакет Object Storage.
- Выдайте права на запись в него сервисному аккаунту кластера Data Proc.
-
Если у вас еще нет Terraform, установите его.
-
Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.
-
Скачайте в ту же рабочую директорию файл конфигурации data-proc-data-exchange-with-mch.tf.
В файле описаны:
- Группы безопасности для кластеров и виртуальной машины.
- Сервисный аккаунт для кластера Data Proc.
- Бакет Object Storage.
- Кластер Managed Service for ClickHouse.
- Кластер Data Proc.
- Виртуальная машина.
-
Укажите параметры инфраструктуры в файле конфигурации
data-proc-data-exchange-with-mch.tf
в блокеlocals
:folder_id
— идентификатор каталога, в котором будут созданы ресурсы.network_id
— идентификатор созданной ранее облачной сети.subnet_id
— идентификатор созданной ранее подсети.zone_id
– зона доступности, в которой будут созданы ресурсы.ch_user_name
— имя пользователя базы данныхdb1
Managed Service for ClickHouse.ch_user_password
— пароль для пользователяuser1
базы данныхdb1
Managed Service for ClickHouse.vm_username
— имя пользователя для виртуальной машины.vm_ssh_key
— абсолютный путь к публичному ключу для виртуальной машины. Подробнее см. в разделе Подключиться к виртуальной машине Linux по SSH.vm_image_id
— образ виртуальной машины. Выберите нужный образ из списка или используйте уже заданный образ Ubuntu 20.04 (fd8ciuqfa001h8s9sa7i
).dp_ssh_key
— абсолютный путь к публичному ключу для кластера Data Proc. Подробнее см. в разделе SSH-подключение к хосту Data Proc.bucket_name
— имя бакета Object Storage. Оно должно быть уникальным в рамках Yandex Cloud.
-
Выполните команду
terraform init
в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационном файле, и позволяет работать с ресурсами и источниками данных провайдера. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Необходимые платные ресурсы
В стоимость поддержки обмена данными между Managed Service for ClickHouse и Data Proc входит:
- плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Выгрузите данные из Managed Service for ClickHouse
Подготовьте кластер Managed Service for ClickHouse
-
Подключитесь к базе данных
db1
кластера Managed Service for ClickHouse от имени пользователяuser1
. -
Наполните базу тестовыми данными. В качестве примера используется простая таблица с именами и возрастом людей.
-
Создайте таблицу:
CREATE TABLE persons ( `name` String, `age` UInt8) ENGINE = MergeTree () ORDER BY `name`;
-
Наполните таблицу данными:
INSERT INTO persons VALUES ('Anna', 19), ('Michael', 65), ('Alvar', 28), ('Lilith', 50), ('Max', 27), ('Jaimey', 34), ('Dmitry', 42), ('Qiang', 19), ('Augustyna', 20), ('Maria', 28);
-
Запустите выгрузку из Managed Service for ClickHouse
-
Откройте веб-интерфейс Zeppelin кластера Data Proc.
-
Нажмите ссылку Create new note и укажите параметры заметки:
- Note name — введите произвольное имя заметки.
- Default Interpreter — выберите
spark
.
-
Нажмите кнопку Create.
-
Чтобы сформировать датафрейм, создайте и запустите параграф с кодом. Для этого выделите нужный параграф и нажмите кнопку Run this paragraph (также можно использовать сочетание клавиш Shift+Enter).
%spark.pyspark jdbcPort = 8443 jdbcHostname = "c-<идентификатор кластера Managed Service for ClickHouse>.rw.mdb.yandexcloud.net" jdbcDatabase = "db1" jdbcUrl = f"jdbc:clickhouse://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}?ssl=true" df = spark.read.format("jdbc") \ .option("url", jdbcUrl) \ .option("user","user1") \ .option("password","<пароль к базе данных Managed Service for ClickHouse>") \ .option("dbtable","persons") \ .load() df.show()
Если датафрейм сформирован успешно, ответ на запрос будет содержать таблицу с исходными данными.
-
Чтобы выгрузить информацию из датафрейма в бакет Object Storage или таблицу Hive, создайте и запустите параграф с кодом.
Object StorageHive%spark.pyspark df.write.parquet('s3a://<имя бакета>/<директория бакета>/') spark.read.parquet('s3a://<имя бакета>/<директория бакета/').show()
%spark.pyspark df.createOrReplaceTempView("mytempTable") spark.sql("CREATE TABLE IF NOT EXISTS persons AS SELECT * FROM mytempTable"); spark.sql("SELECT * FROM persons").show()
Если выгрузка прошла успешно, ответ на запрос будет содержать таблицу с исходными данными.
Загрузите данные в Managed Service for ClickHouse
Подготовьте исходные данные
Источником данных может быть директория HDFS или бакет Object Storage. В качестве исходных данных будет использоваться CSV-файл с именами и возрастом людей:
name,age
Anna,19
Michael,65
Fred,28
Alsou,50
Max,27
John,34
Dmitry,42
Oleg,19
Alina,20
Maria,28
Создайте файл example.csv
с тестовыми данными и загрузите его в бакет Object Storage.
-
Подключитесь к хосту кластера Data Proc в подкластере для хранения данных.
-
Определите адрес сервера HDFS. Этот адрес понадобится указать при выгрузке данных в директорию HDFS.
hdfs getconf -confKey fs.defaultFS
-
Создайте файл
example.csv
с тестовыми данными. -
Создайте директорию HDFS для записи тестовых данных:
hdfs dfs -mkdir /user/testdata
-
Скопируйте файл с тестовыми данными из локальной файловой системы в директорию HDFS:
hdfs dfs -copyFromLocal example.csv /user/testdata/example.csv
Запустите выгрузку из Data Proc
-
Откройте веб-интерфейс Zeppelin кластера Data Proc.
-
Нажмите ссылку Create new note и укажите параметры заметки:
- Note name — введите произвольное имя заметки.
- Default Interpreter — выберите
spark
.
-
Нажмите кнопку Create.
-
Чтобы сформировать датафрейм, создайте и запустите параграф с кодом.
Object StorageДиректория HDFS%spark.pyspark df = spark.read.option("header", True).csv("s3a://<имя бакета>/<директория бакета>/example.csv") df.show()
%spark.pyspark df = spark.read.option("header", True).csv("hdfs://<адрес сервера HDFS>/user/testdata/example.csv") df.show()
-
Чтобы выгрузить информацию из датафрейма в базу данных Managed Service for ClickHouse, создайте и запустите параграф с кодом.
%spark.pyspark jdbcPort = 8443 jdbcHostname = "c-<идентификатор кластера Managed Service for ClickHouse>.rw.mdb.yandexcloud.net" jdbcDatabase = "db1" jdbcUrl = f"jdbc:clickhouse://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}?ssl=true" df.write.format("jdbc") \ .mode("error") \ .option("url", jdbcUrl) \ .option("dbtable", "example") \ .option("createTableOptions", "ENGINE = MergeTree() ORDER BY age") \ .option("user","user1") \ .option("password","<пароль к базе данных Managed Service for ClickHouse>") \ .save()
Проверьте загрузку данных в Managed Service for ClickHouse
-
Подключитесь к базе данных
db1
кластера Managed Service for ClickHouse от имени пользователяuser1
. -
Выполните запрос:
SELECT * FROM example;
Если выгрузка прошла успешно, ответ на запрос будет содержать таблицу с данными.
Удалите созданные ресурсы
- Удалите виртуальную машину.
- Если вы зарезервировали для виртуальной машины публичный статический IP-адрес, освободите и удалите его.
- Удалите кластеры:
- Если вы создавали бакет Object Storage, удалите его.
Если вы создали ресурсы с помощью Terraform:
-
В терминале перейдите в директорию с планом инфраструктуры.
-
Удалите конфигурационный файл
data-proc-data-exchange-with-mch.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Все ресурсы, которые были описаны в конфигурационном файле
data-proc-data-exchange-with-mch.tf
, будут удалены. -