Руководство. Перенос данных в 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, а затем включить дополнительную пропускную способность, необходимую для операций извлечения, преобразования и загрузки или операций, для которых характерны резкие скачки. Для планирования миграции необходимо знать следующее.

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

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

    • Схема. Подключитесь к существующему кластеру 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 поддерживает автоматическое масштабирование хранилища и пропускной способности по мере роста требований. Вы можете оценить требуемую вам пропускную способность с помощью калькулятора единиц запросов Azure Cosmos DB.

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

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

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

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

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

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

Используйте команду CQL COPY, чтобы скопировать локальные данные в учетную запись API для Cassandra в Azure Cosmos DB.

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

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

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

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

    • Войдите на портал Azure и перейдите в учетную запись Azure Cosmos DB.

    • Откройте панель Строка подключения. Здесь вы увидите все сведения, необходимые для подключения к вашей учетной записи cqlshCassandra в API.

  3. Войдите в cqlsh, используя полученные на портале сведения о подключении.

  4. Используйте команду CQLCOPY 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 пытается принять данные очень быстро и не учитывает поведение CosmosDB с ограничением скорости. Следует уменьшить значение CHUNKSIZE или INGESTRATE в зависимости от пропускной способности, настроенной для коллекции.

Рекомендуется использовать приведенную ниже конфигурацию (как минимум) для коллекции с 20 000 ЕЗ, если размер документа или записи составляет 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 для Cassandra, выполните следующие действия.

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

  2. Перемещение данных в целевой API для конечной точки Cassandra. Сведения о миграции с помощью Azure Databricks см. в этом руководстве.

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

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

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

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

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

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

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