Поделиться через


Учебное пособие: перенос ваших данных на API для учетной записи Cassandra

Область применения: Кассандра

Разработчик может иметь существующие рабочие нагрузки Cassandra, работающие в локальной среде или в облаке. Может потребоваться перенести их в Azure. Такие нагрузки можно перенести в API учетной записи Cassandra в Azure Cosmos DB. В этом руководстве приведены инструкции по различным параметрам, которые доступны для переноса данных Apache Cassandra в API для учетной записи Cassandra в Azure Cosmos DB.

В рамках этого руководства рассматриваются следующие задачи:

  • Планирование миграции.
  • Соответствие предварительным требованиям для миграции.
  • Перенос данных с помощью cqlshCOPY команды.
  • Перенос данных с помощью Spark.

Если у вас нет подписки на Azure, создайте бесплатную учетную запись перед началом.

Необходимые условия миграции

  • Оцените потребности пропускной способности: Перед переносом данных в API для учетной записи Cassandra в Azure Cosmos DB оцените потребности в пропускной способности рабочей нагрузки. Как правило, начните со средней пропускной способности, необходимой для операций создания, чтения, обновления и удаления (CRUD). Затем включите дополнительную пропускную способность, необходимую для операций извлечения, преобразования и загрузки (ETL) или скачкообразных операций. Для планирования миграции необходимо знать следующее.

    • Текущий или предполагаемый размер данных. Определяет минимальные требования к размеру базы данных и пропускной способности. При оценке размера данных для нового приложения можно предположить, что данные равномерно распределяются по строкам. Вы можете оценить значение, умножив размер данных.

    • Требуемая пропускная способность. Приблизительная пропускная способность для операций чтения (запрос, получение) и записи (изменение, удаление, вставка). Это значение необходимо для вычисления требуемого количества единиц, а также размера данных в устойчивом состоянии.

    • Схема. Подключитесь к существующему кластеру Cassandra с помощью cqlsh и экспортируйте схему из Cassandra.

      cqlsh [IP] "-e DESC SCHEMA" > orig_schema.cql
      

      После определения требований существующей рабочей нагрузки создайте учетную запись Azure Cosmos DB, базу данных и контейнеры в соответствии с собранными требованиями к пропускной способности.

    • Определите плату за единицу запроса (ЕЗ) для операции: Вы можете определить ЕЗ с помощью любого из пакетов SDK, поддерживаемых API для Cassandra. В этом примере мы используем для оценки затрат версию .NET.

      var tableInsertStatement = table.Insert(sampleEntity);
      var insertResult = await tableInsertStatement.ExecuteAsync();
      
      foreach (string key in insertResult.Info.IncomingPayload)
        {
           byte[] valueInBytes = customPayload[key];
           double value = Encoding.UTF8.GetString(valueInBytes);
           Console.WriteLine($"CustomPayload:  {key}: {value}");
        }
      
  • Выделите требуемую пропускную способность. Azure Cosmos DB поддерживает автоматическое масштабирование хранилища и пропускной способности по мере роста требований. Вы можете оценить ваши потребности в пропускной способности с помощью калькулятора RU Azure Cosmos DB.

  • Создайте таблицы в учетной записи API Cassandra: Перед началом миграции данных предварительно создайте все таблицы на портале Azure или из cqlsh. Если вы переносите учетную запись Azure Cosmos DB с пропускной способностью на уровне базы данных, укажите ключ секции при создании контейнеров.

  • Увеличьте пропускную способность. Продолжительность миграции данных зависит от пропускной способности, которую вы предоставите для таблиц в Azure Cosmos DB. Увеличьте пропускную способность во время миграции. С более высокой пропускной способностью можно избежать ограничения скорости и миграции за меньшее время. После завершения миграции уменьшите пропускную способность для экономии затрат. Также рекомендуется использовать учетную запись Azure Cosmos DB, находящуюся в том же регионе, что и база данных-источник.

  • Включение безопасности транспортного уровня (TLS): Azure Cosmos DB имеет строгие требования к безопасности и стандарты. Включите TLS при взаимодействии с учетной записью. При использовании языка запросов Cassandra (CQL) с Secure Shell можно предоставить сведения TLS.

Варианты миграции данных

Вы можете переместить данные из существующих рабочих нагрузок Cassandra в Azure Cosmos DB с помощью cqlshCOPY команды или с помощью Spark.

Перенос данных с помощью команды cqlsh COPY

Предупреждение

Используйте только команду CQL COPY для переноса небольших наборов данных. Если нужно перенести большие наборы данных, перенесите данные с помощью Spark.

  1. Чтобы убедиться, что файл .csv содержит правильную структуру файлов, используйте COPY TO команду для экспорта данных непосредственно из исходной таблицы Cassandra в файл .csv. Убедитесь, что cqlsh подключен к исходной таблице с помощью соответствующих учетных данных.

    COPY exampleks.tablename TO 'data.csv' WITH HEADER = TRUE;   
    
  2. Теперь получите сведения о строке подключения учетной записи Cassandra для API:

    1. Войдите на портал Azure и перейдите в учетную запись Azure Cosmos DB.
    2. Откройте панель Строка подключения. Здесь вы увидите все сведения, необходимые для подключения к вашей учетной записи cqlshCassandra в API.
  3. Войдите в cqlsh, используя данные о подключении из портала Azure.

  4. Используйте команду CQL COPY FROM для копирования data.csv. Этот файл по-прежнему находится в корневом каталоге пользователя, где cqlsh устанавливается.

    COPY exampleks.tablename FROM 'data.csv' WITH HEADER = TRUE;
    

Примечание.

API для Cassandra поддерживает протокол 4, который поставляется с Cassandra 3.11. При использовании более поздних версий протокола с нашим API могут возникнуть проблемы. С более поздней версией COPY FROM протокола команда может перейти в цикл и вернуть повторяющиеся строки.

Добавьте protocol-version в cqlsh команду:

cqlsh <USERNAME>.cassandra.cosmos.azure.com 10350 -u <USERNAME> -p <PASSWORD> --ssl --protocol-version=4

Добавление параметров ограничения пропускной способности в команду CQL COPY

Команда COPY в cqlsh поддерживает различные параметры для управления скоростью импорта документов в Azure Cosmos DB.

Конфигурация по умолчанию для команды COPY пытается быстро поглощать данные. Он не учитывает поведение ограничения скорости в Azure Cosmos DB. Уменьшите CHUNKSIZE или INGESTRATE в зависимости от пропускной способности, настроенной в коллекции.

Рекомендуется использовать следующую конфигурацию (как минимум) для коллекции в 20 000 RUs, если размер документа или записи составляет 1 КБ:

  • CHUNKSIZE = 100
  • INGESTRATE = 500
  • MAXATTEMPTS = 10
Примеры команд
  • Скопируйте данные из API для Cassandra в локальный файл .csv:

    COPY standard1 (key, "C0", "C1", "C2", "C3", "C4") TO 'backup.csv' WITH PAGESIZE=100 AND MAXREQUESTS=1 ;
    
  • Скопируйте данные из локального .csv-файла в API для Cassandra:

    COPY standard2 (key, "C0", "C1", "C2", "C3", "C4") FROM 'backup.csv' WITH CHUNKSIZE=100 AND INGESTRATE=100 AND MAXATTEMPTS=10;
    

Внимание

Поддерживается только версия CQLSH COPY Apache Cassandra с открытым кодом. Версии CQLSH Datastax Enterprise (DSE) могут столкнуться с ошибками.

Перенос данных с помощью Spark

Чтобы перенести данные в учетную запись Cassandra для API в Spark, выполните следующие действия.

  1. Подготовьте кластер Azure Databricks или кластер Azure HDInsight.

  2. Перемещение данных в целевой API для конечной точки Cassandra. Дополнительные сведения см. в статье "Миграция данных из Cassandra в учетную запись Azure Cosmos DB для Apache Cassandra".

Если у вас есть данные, находящиеся в существующем кластере на виртуальных машинах Azure или любом другом облаке, рекомендуется использовать задания Spark для переноса данных. Настройте Spark в качестве посредника для однократного или регулярного приема. Можно ускорить миграцию с помощью подключений Azure ExpressRoute между локальной средой и Azure.

Динамическая миграция

Если вам нужна миграция без простоя из собственного кластера Apache Cassandra, рекомендуется настроить двойные записи и отдельную массовую нагрузку данных для переноса исторических данных. Реализация этого шаблона является более простой при использовании прокси-сервера двойной записи с открытым исходным кодом, чтобы обеспечить минимальные изменения кода приложения. Дополнительные сведения см. в статье о динамической миграции данных из Apache Cassandra в Azure Cosmos DB для Apache Cassandra.

Очистка ресурсов

Если ресурсы больше не нужны, можно удалить группу ресурсов, учетную запись Azure Cosmos DB и все связанные ресурсы. Для этого выберите группу ресурсов для виртуальной машины, выберите Удалить и подтвердите имя удаляемой группы ресурсов.

Следующий шаг

В этом руководстве вы узнали, как перенести данные в API для учетной записи Cassandra в Azure Cosmos DB. Теперь вы можете познакомиться с другими концепциями Azure Cosmos DB: