Обмен данными с Managed Service for ClickHouse
Чтобы настроить загрузку и выгрузку данных между кластерами Yandex Managed Service for ClickHouse и Yandex Data Proc:
- Подготовьте облако к работе.
- Выгрузите данные из Yandex Managed Service for ClickHouse.
- Загрузите данные в Yandex Managed Service for ClickHouse.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Примечание
Создавайте кластеры и виртуальную машину в одной облачной сети.
- Создайте кластер Yandex Managed Service for ClickHouse любой подходящей вам конфигурации со следующими настройками:
- с базой данных
db1
; - с пользователем
user1
.
- с базой данных
- Создайте кластер Yandex Data Proc любой подходящей вам конфигурации со следующими настройками:
- с включенной опцией UI Proxy;
- c компонентами:
- HBASE
- HDFS
- HIVE
- MAPREDUCE
- SPARK
- TEZ
- YARN
- ZEPPELIN
- ZOOKEEPER
- Создайте виртуальную машину для подключения к кластерам Yandex Managed Service for ClickHouse и Yandex Data Proc.
- Подключитесь к виртуальной машине по SSH и настройте подключения к кластерам:
- (Опционально) Чтобы экспортировать данные в бакет Yandex Object Storage:
- Создайте бакет Yandex Object Storage.
- Выдайте права на запись в него сервисному аккаунту кластера Yandex Data Proc.
Необходимые платные ресурсы
В стоимость поддержки обмена данными между Yandex Managed Service for ClickHouse и Yandex Data Proc входит:
- плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Выгрузите данные из Yandex Managed Service for ClickHouse
Подготовьте кластер Yandex Managed Service for ClickHouse
-
Подключитесь к базе данных
db1
кластера Yandex 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), ('Fred', 28), ('Alsou', 50), ('Max', 27), ('John', 34), ('Dmitry', 42), ('Oleg', 19), ('Alina', 20), ('Maria', 28);
-
Запустите выгрузку из Yandex Managed Service for ClickHouse
-
Откройте веб-интерфейс Zeppelin кластера Yandex Data Proc.
-
Нажмите ссылку Create new note и укажите параметры ноутбука Zeppelin:
- Note name — введите произвольное имя ноутбука;
- Default Interpreter — выберите
spark
.
-
Нажмите кнопку Create.
-
Чтобы сформировать датафрейм, создайте и запустите параграф с кодом. Чтобы запустить параграф, нажмите на кнопку Run this paragraph или используйте сочетание клавиш Shift + Enter. Текст параграфа зависит от наличия публичного доступа к хостам кластера Yandex Managed Service for ClickHouse.
Подключение без SSLПодключение с SSL%spark.pyspark jdbcPort = 8123 jdbcHostname = "c-<идентификатор кластера Yandex Managed Service for ClickHouse>.rw.mdb.yandexcloud.net" jdbcDatabase = "db1" jdbcUrl = f"jdbc:clickhouse://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}" df = spark.read.format("jdbc") \ .option("url", jdbcUrl) \ .option("user","user1") \ .option("password","<пароль к базе данных Yandex Managed Service for ClickHouse>") \ .option("dbtable","persons") \ .load() df.show()
%spark.pyspark jdbcPort = 8443 jdbcHostname = "c-<идентификатор кластера Yandex 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","<пароль к базе данных Yandex Managed Service for ClickHouse>") \ .option("dbtable","persons") \ .load() df.show()
Если датафрейм сформирован успешно, ответ на запрос будет содержать таблицу с исходными данными.
-
Чтобы выгрузить информацию из датафрейма в бакет Yandex 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()
Если выгрузка прошла успешно, ответ на запрос будет содержать таблицу с исходными данными.
Загрузите данные в Yandex Managed Service for ClickHouse
Подготовьте исходные данные
Источником данных может быть директория HDFS или бакет Yandex 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
с тестовыми данными и загрузите его в бакет Yandex Object Storage.
-
Подключитесь к хосту кластера Yandex Data Proc в подкластере для хранения данных.
-
Определите адрес сервера HDFS. Этот адрес понадобится указать при выгрузке данных в директорию HDFS.
hdfs getconf -confKey fs.defaultFS
-
Создайте файл
example.csv
с тестовыми данными. -
Создайте директорию HDFS для записи тестовых данных:
hdfs fs -mkdir /user/testdata
-
Скопируйте файл с тестовыми данными из локальной файловой системы в директорию HDFS:
hdfs dfs -copyFromLocal example.csv /user/testdata/example.csv
Запустите выгрузку из Yandex Data Proc
-
Откройте веб-интерфейс Zeppelin кластера Yandex Data Proc.
-
Нажмите ссылку Create new note и укажите параметры ноутбука Zeppelin:
- 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()
-
Чтобы выгрузить информацию из датафрейма в базу данных Yandex Managed Service for ClickHouse, создайте и запустите параграф с кодом. Текст параграфа зависит от наличия публичного доступа к хостам кластера Yandex Managed Service for ClickHouse.
Подключение без SSLПодключение с SSL%spark.pyspark jdbcPort = 8123 jdbcHostname = "c-<идентификатор кластера Yandex Managed Service for ClickHouse>.rw.mdb.yandexcloud.net" jdbcDatabase = "db1" jdbcUrl = f"jdbc:clickhouse://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}" df.write.format("jdbc") \ .mode("error") \ .option("url", jdbcUrl) \ .option("dbtable", "example") \ .option("createTableOptions", "ENGINE = MergeTree() ORDER BY age") \ .option("user","user1") \ .option("password","<пароль к базе данных Yandex Managed Service for ClickHouse>") \ .save()
%spark.pyspark jdbcPort = 8443 jdbcHostname = "c-<идентификатор кластера Yandex 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","<пароль к базе данных Yandex Managed Service for ClickHouse>") \ .save()
Проверьте загрузку данных в Yandex Managed Service for ClickHouse
-
Подключитесь к базе данных
db1
кластера Yandex Managed Service for ClickHouse от имени пользователяuser1
. -
Выполните запрос:
SELECT * FROM example;
Если выгрузка прошла успешно, ответ на запрос будет содержать таблицу с данными.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы:
- Удалите виртуальную машину.
- Если вы зарезервировали для виртуальной машины публичный статический IP-адрес, удалите его.
- Удалите кластеры:
- Если вы создавали бакет Yandex Object Storage, удалите его.