Руководство. Перенос данных в учетную запись API Cassandra
ПРИМЕНИМО К: API Cassandra
Как у разработчика у вас могут существовать рабочие нагрузки Cassandra, выполняемые локально или в облаке, и может понадобиться перенести их в Azure. Такие рабочие нагрузки можно перенести в учетную запись API Cassandra в Azure Cosmos DB. В этом руководстве приведены инструкции к различным методам переноса данных Apache Cassandra в учетную запись API Cassandra в Azure Cosmos DB.
В рамках этого руководства рассматриваются следующие задачи:
- Планирование миграции
- Предварительные требования для миграции
- Перенос данных с помощью команды
cqlsh
COPY
- Перенос данных с помощью Spark
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись 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.
Откройте панель Строка подключения. Здесь вы можете просмотреть все сведения, необходимые для подключения к учетной записи API Cassandra из
cqlsh
.
Войдите в
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
Для переноса данных в учетную запись API Cassandra с помощью Spark следуйте приведенным ниже инструкциям.
Подготовьте кластер 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: