Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
  • Интернет-магазины
  • Хранение и восстановление данных
  • Для разработчиков
  • Тестовая среда
  • Управление инфраструктурой
  • Построение Data Platform
    • Все руководства
    • Миграция БД из стороннего кластера Apache Kafka® в Managed Service for Apache Kafka®
    • Перенос данных между кластерами Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for YDB в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for Greenplum® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for Elasticsearch с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MongoDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MySQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for OpenSearch с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for PostgreSQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Data Streams с помощью Data Transfer
    • Настройка Kafka Connect для работы с кластером Managed Service for Apache Kafka®
    • Управление схемами данных в Managed Service for Apache Kafka®
    • Использование Managed Schema Registry с Managed Service for Apache Kafka®
    • Использование Confluent Schema Registry с Managed Service for Apache Kafka®
    • Поставка данных из Managed Service for MySQL в Managed Service for ClickHouse с помощью Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Обмен данными между Managed Service for ClickHouse и Data Proc
    • Настройка Managed Service for ClickHouse для Graphite
    • Получение данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse с помощью Data Transfer
    • Получение данных из RabbitMQ в Managed Service for ClickHouse
    • Сохранение потока данных Data Streams в Managed Service for ClickHouse
    • Асинхронная репликация данных из Яндекс Метрика в ClickHouse с помощью Data Transfer
    • Использование гибридного хранилища в Managed Service for ClickHouse
    • Шардирование таблиц Managed Service for ClickHouse
    • Настройка Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Настройка Cloud DNS для доступа к кластеру Managed Service for ClickHouse из других облачных сетей
    • Обмен данными между Managed Service for ClickHouse и Data Proc
    • Импорт данных из Managed Service for MySQL в Data Proc с помощью Sqoop
    • Импорт данных из Managed Service for PostgreSQL в Data Proc с помощью Sqoop
    • Использование скриптов инициализации для настройки GeeseFS в Data Proc
    • Миграция данных из стороннего кластера Elasticsearch в Managed Service for Elasticsearch с помощью Reindex API
    • Миграция коллекций из стороннего кластера MongoDB в Managed Service for MongoDB
    • Миграция данных в Managed Service for MongoDB
    • Шардирование коллекций MongoDB
    • Анализ производительности и оптимизация MongoDB
    • Миграция БД из стороннего кластера MySQL в кластер Managed Service for MySQL
    • Анализ производительности и оптимизация Managed Service for MySQL
    • Синхронизация данных из стороннего кластера MySQL в Managed Service for MySQL с помощью Data Transfer
    • Миграция БД из Managed Service for MySQL в сторонний кластер MySQL
    • Миграция БД из Managed Service for MySQL в Object Storage с помощью Data Transfer
    • Импорт данных из Managed Service for MySQL в Data Proc с помощью Sqoop
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL в Managed Service for Apache Kafka® с помощью Debezium
    • Миграция БД из Managed Service for MySQL в Managed Service for YDB с помощью Data Transfer
    • Захват изменений MySQL и поставка в YDS
    • Миграция данных из Elasticsearch в Managed Service for OpenSearch
    • Создание кластера PostgreSQL для «1С:Предприятия»
    • Анализ производительности и оптимизация Managed Service for PostgreSQL
    • Миграция БД из Managed Service for PostgreSQL
    • Миграция БД из стороннего кластера PostgreSQL в Managed Service for PostgreSQL
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Импорт данных из Managed Service for PostgreSQL в Data Proc с помощью Sqoop
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for YDB с помощью Data Transfer
    • Миграция БД из Managed Service for PostgreSQL в Object Storage
    • Захват изменений PostgreSQL и поставка в YDS
    • Миграция БД из Greenplum® в ClickHouse
    • Миграция БД из Greenplum® в PostgreSQL
    • Миграция БД из стороннего кластера Redis в Managed Service for Redis
    • Использование кластера Managed Service for Redis в качестве хранилища сессий PHP
  • Продукты Microsoft в Yandex Cloud
  • Сетевая инфраструктура
  • Визуализация и анализ данных
  • Интернет вещей
  • Бессерверные технологии
  1. Построение Data Platform
  2. Обмен данными между Managed Service for ClickHouse и Data Proc

Обмен данными между Yandex Managed Service for ClickHouse и Yandex Data Proc

Статья создана
Yandex Cloud
  • Перед началом работы
  • Загрузите данные из Managed Service for ClickHouse
    • Подготовьте таблицу в кластере Managed Service for ClickHouse
    • Перенесите таблицу из Managed Service for ClickHouse
  • Выгрузите данные в Managed Service for ClickHouse
  • Удалите созданные ресурсы

С помощью Data Proc вы можете:

  • Загрузить данные из Managed Service for ClickHouse в Spark DataFrame.
  • Выгрузить данные из Spark DataFrame в Managed Service for ClickHouse.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

Подготовьте инфраструктуру:

Вручную
С помощью Terraform
  1. Создайте сервисный аккаунт с именем dataproc-sa и назначьте ему роль dataproc.agent.

  2. В Object Storage создайте бакеты и настройте доступ к ним:

    1. Создайте бакет для исходных данных и предоставьте сервисному аккаунту кластера разрешение READ для этого бакета.
    2. Создайте бакет для результатов обработки и предоставьте сервисному аккаунту кластера разрешение READ и WRITE для этого бакета.
  3. Создайте облачную сеть с именем dataproc-network.

  4. В сети dataproc-network создайте подсеть в любой зоне доступности.

  5. Настройте NAT-шлюз для созданной подсети.

  6. Если вы используете группы безопасности, создайте группу безопасности с именем dataproc-sg в сети dataproc-network и добавьте в нее следующие правила:

    • По одному правилу для входящего и исходящего служебного трафика:

      • Диапазон портов — 0-65535.
      • Протокол — Любой (Any).
      • Источник — Группа безопасности.
      • Группа безопасности — Текущая (Self).
    • Правило для исходящего HTTPS-трафика:

      • Диапазон портов — 443.
      • Протокол — TCP.
      • Назначение — CIDR.
      • CIDR блоки — 0.0.0.0/0.
    • Правило для исходящего трафика по протоколу TCP на порт 8443 для доступа к ClickHouse:

      • Диапазон портов — 8443.
      • Протокол — TCP.
      • Назначение — CIDR.
      • CIDR блоки — 0.0.0.0/0.

    Функциональность находится на стадии Preview.

  7. Создайте кластер Data Proc с любой подходящей конфигурацией хостов и следующими настройками:

    • Компоненты:
      • SPARK;
      • YARN;
      • HDFS.
    • Сервисный аккаунт — dataproc-sa.
    • Имя бакета — бакет, который вы создали для выходных данных.
    • Сеть — dataproc-network.
    • Группа безопасности — dataproc-sg.
  8. Создайте кластер Managed Service for ClickHouse любой подходящей конфигурации со следующими настройками:

    • С публичным доступом к хостам кластера.
    • С базой данных db1.
    • С пользователем user1.
  9. Если вы используете группы безопасности в кластере Managed Service for ClickHouse, убедитесь, что они настроены правильно и допускают подключение к нему.

    Функциональность находится на стадии Preview.

  1. Если у вас еще нет Terraform, установите его.

  2. Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.

  3. Скачайте в ту же рабочую директорию файл конфигурации data-proc-data-exchange-with-mch.tf.

    В этом файле описаны:

    • сеть;
    • подсеть;
    • NAT-шлюз и таблица маршрутизации, необходимые для работы Data Proc;
    • группы безопасности, необходимые для кластеров Data Proc и Managed Service for ClickHouse;
    • сервисный аккаунт, необходимый для работы кластера Data Proc;
    • сервисный аккаунт, необходимый для создания бакетов в Object Storage;
    • бакеты для входных и выходных данных;
    • кластер Data Proc;
    • кластер Managed Service for ClickHouse.
  4. Укажите в файле data-proc-data-exchange-with-mch.tf:

    • folder_id — идентификатор облачного каталога, такой же как в настройках провайдера.
    • input_bucket — имя бакета для входных данных.
    • output_bucket — имя бакета для выходных данных.
    • dp_ssh_key — абсолютный путь к публичному ключу для кластера Data Proc. Подробнее см. в разделе SSH-подключение к хосту Data Proc.
    • ch_password — пароль пользователя ClickHouse.
  5. Выполните команду terraform init в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационном файле, и позволяет работать с ресурсами и источниками данных провайдера.

  6. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  7. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Загрузите данные из Managed Service for ClickHouse

Подготовьте таблицу в кластере Managed Service for ClickHouse

  1. Подключитесь к базе данных db1 кластера Managed Service for ClickHouse от имени пользователя user1.

  2. Наполните базу тестовыми данными. В качестве примера используется простая таблица с именами и возрастом людей.

    1. Создайте таблицу:

      CREATE TABLE persons (
          `name` String,
          `age` UInt8) ENGINE = MergeTree ()
      ORDER BY
          `name`;
      
    2. Наполните таблицу данными:

      INSERT INTO persons VALUES
         ('Anna', 19),
         ('Michael', 65),
         ('Alvar', 28),
         ('Lilith', 50),
         ('Max', 27),
         ('Jaimey', 34),
         ('Dmitry', 42),
         ('Qiang', 19),
         ('Augustyna', 20),
         ('Maria', 28);
      
    3. Проверьте результат:

      SELECT * FROM persons;
      

Перенесите таблицу из Managed Service for ClickHouse

  1. Подготовьте файл скрипта:

    1. Создайте локальный файл с именем ch-to-dataproc.py и скопируйте в него следующий скрипт:

      ch-to-dataproc.py
      from pyspark.sql import SparkSession
      
      # Создание Spark-сессии
      spark = SparkSession.builder.appName("ClickhouseDataproc").getOrCreate()
      
      # Указание порта и параметров кластера ClickHouse
      jdbcPort = 8443
      jdbcHostname = "c-<идентификатор кластера Managed Service for ClickHouse>.rw.mdb.yandexcloud.net"
      jdbcDatabase = "db1"
      jdbcUrl = f"jdbc:clickhouse://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}?ssl=true"
      
      # Перенос таблицы persons из ClickHouse в DataFrame
      df = spark.read.format("jdbc") \
      .option("url", jdbcUrl) \
      .option("user","user1") \
      .option("password","<пароль пользователя user1>") \
      .option("dbtable","persons") \
      .load()
      
      # Перенос DataFrame в бакет для проверки
      df.repartition(1).write.mode("overwrite") \
      .csv(path='s3a://<имя выходного бакета>/csv', header=True, sep=',')
      
    2. Укажите в скрипте:

      • Идентификатор кластера Managed Service for ClickHouse.
      • Пароль пользователя user1.
      • Имя выходного бакета.
    3. Создайте в бакете для входных данных папку scripts и загрузите в нее файл ch-to-dataproc.py.

  2. Создайте задание PySpark, указав в поле Main python файл путь к файлу скрипта: s3a://<имя входного бакета>/scripts/ch-to-dataproc.py.

  3. Дождитесь завершения задания и проверьте, что в папке csv выходного бакета появилась исходная таблица.

Выгрузите данные в Managed Service for ClickHouse

  1. Подготовьте файл скрипта:

    1. Создайте локальный файл с именем dataproc-to-ch.py и скопируйте в него следующий скрипт:

      dataproc-to-ch.py
      from pyspark.sql import SparkSession
      from pyspark.sql.types import *
      
      # Создание Spark-сессии
      spark = SparkSession.builder.appName("DataprocClickhouse").getOrCreate()
      
      # Создание схемы данных
      schema = StructType([StructField('name', StringType(), True),
      StructField('age', IntegerType(), True)])
      
      # Создание DataFrame
      df = spark.createDataFrame([('Alim', 19),
                                  ('Fred' ,65),
                                  ('Guanmin' , 28),
                                  ('Till', 60),
                                  ('Almagul', 27),
                                  ('Mary', 34),
                                  ('Dmitry', 42)], schema)
      
      # Указание порта и параметров кластера ClickHouse
      jdbcPort = 8443
      jdbcHostname = "c-<идентификатор кластера Managed Service for ClickHouse>.rw.mdb.yandexcloud.net"
      jdbcDatabase = "db1"
      jdbcUrl = f"jdbc:clickhouse://{jdbcHostname}:{jdbcPort}/{jdbcDatabase}?ssl=true"
      
      # Перенос DataFrame в ClickHouse
      df.write.format("jdbc") \
      .mode("error") \
      .option("url", jdbcUrl) \
      .option("dbtable", "people") \
      .option("createTableOptions", "ENGINE = MergeTree() ORDER BY age") \
      .option("user","user1") \
      .option("password","<пароль к базе данных Managed Service for ClickHouse>") \
      .save()
      
    2. Укажите в скрипте:

      • Идентификатор кластера Managed Service for ClickHouse.
      • Пароль пользователя user1.
    3. Создайте в бакете для входных данных папку scripts и загрузите в нее файл dataproc-to-ch.py.

  2. Создайте задание PySpark, указав в поле Main python файл путь к файлу скрипта: s3a://<имя входного бакета>/scripts/dataproc-to-ch.py.

  3. Дождитесь завершения задания и проверьте, что данные перенеслись в Managed Service for ClickHouse:

    1. Подключитесь к базе данных db1 кластера Managed Service for ClickHouse от имени пользователя user1.

    2. Выполните запрос:

      SELECT * FROM people;
      

    Если выгрузка прошла успешно, ответ на запрос будет содержать таблицу с данными.

Удалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

Вручную
С помощью Terraform
  1. Кластер Managed Service for ClickHouse.
  2. Кластер Data Proc.
  3. Бакеты Object Storage.
  4. Облачную сеть.
  5. Сервисный аккаунт.
  1. Удалите объекты из бакетов.

  2. В терминале перейдите в директорию с планом инфраструктуры.

  3. Удалите конфигурационный файл data-proc-data-exchange-with-mch.tf.

  4. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  5. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    Все ресурсы, которые были описаны в конфигурационном файле data-proc-data-exchange-with-mch.tf, будут удалены.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Загрузите данные из Managed Service for ClickHouse
  • Подготовьте таблицу в кластере Managed Service for ClickHouse
  • Перенесите таблицу из Managed Service for ClickHouse
  • Выгрузите данные в Managed Service for ClickHouse
  • Удалите созданные ресурсы