Руководство. Перенос данных в API для учетной записи Cassandra
Область применения: Кассандра
Как у разработчика у вас могут существовать рабочие нагрузки Cassandra, выполняемые локально или в облаке, и может понадобиться перенести их в Azure. Такие рабочие нагрузки можно перенести в API для учетной записи Cassandra в Azure Cosmos DB. В этом руководстве приведены инструкции по различным параметрам, доступным для переноса данных Apache Cassandra в учетную запись API Cassandra в Azure Cosmos DB.
В рамках этого руководства рассматриваются следующие задачи:
- Планирование миграции
- Необходимые условия миграции
- Перенос данных с помощью команды
cqlsh
COPY
- Перенос данных с помощью 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 с помощью команды cqlsh
COPY
или с помощью Spark.
Перенос данных с помощью команды cqlsh COPY
Используйте команду CQL COPY, чтобы скопировать локальные данные в учетную запись API для Cassandra в Azure Cosmos DB.
Предупреждение
Используйте CQL COPY только для переноса небольших наборов данных. Если нужно перенести большие наборы данных, перенесите данные с помощью Spark.
Чтобы убедиться, что CSV-файл содержит правильную структуру файлов, используйте команду
COPY TO
для экспорта данных непосредственно из вашей исходной таблицы Cassandra в CSV-файл (убедитесь, что программа cqlsh подключена к исходной таблице с использованием соответствующих учетных данных):COPY exampleks.tablename TO 'data.csv' WITH HEADER = TRUE;
Теперь получите api для строка подключения учетной записи Cassandra:
Войдите на портал Azure и перейдите в учетную запись Azure Cosmos DB.
Откройте панель Строка подключения. Здесь вы увидите все сведения, необходимые для подключения к вашей учетной записи
cqlsh
Cassandra в API.
Войдите в
cqlsh
, используя полученные на портале сведения о подключении.Используйте команду
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 пытается принять данные очень быстро и не учитывает поведение 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, выполните следующие действия.
Подготовьте кластер Azure Databricks или кластер Azure HDInsight.
Перемещение данных в целевой 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: