Azure Databricks を使用して MongoDB から仮想コアベースの Azure Cosmos DB for MongoDB にデータを移行する
Azure Databricks を使用すると、大規模な MongoDB データセットを仮想コアベースの Azure Cosmos DB for MongoDB に簡単に移動できるため、複雑なデータの転送がより簡単になります。 これにより、移行ペースとデータ変換を詳細に制御でき、大規模なデータセットを効果的に処理できます。
Azure Databricks を使用する理由
Apache Spark 用のサービスとしてのプラットフォーム (PaaS) である Azure Databricks を使用すると、MongoDB からデータベースをオフラインとオンラインの両方で移行するための合理化された効率的な方法が導入されます。 そのアーキテクチャは、広範なデータセットをサポートするように設計されており、移行プロジェクトに適しています。
前提条件
移行を始める前に、次の前提条件を満たしていることを確認してください。
- 仮想コアベースの Azure Cosmos DB for MongoDB アカウントがアクティブで適切に構成されていることを確認します。 Azure MongoDB アカウントのマネージド ID が有効になっていて、ソース MongoDB データベースにアクセスするために必要なアクセス許可が付与されていることを確認します。
- 最適な Spark 3.0 の互換性のために Databricks ランタイム バージョン 7.6 を選択して、Azure Databricks クラスターをプロビジョニングします。
- Maven MongoDB Connector for Spark ライブラリをクラスターに追加します。 このライブラリを使用すると、ネイティブ MongoDB エンドポイントと Azure Cosmos DB エンドポイントの両方への接続が可能になります。
移行する
Azure Databricks で Python または Scala ノートブックを作成して、移行を実行できます。 たとえば、Python ノートブックを使用して MongoDB から仮想コアベースの Azure Cosmos DB for MongoDB にデータを移行する場合は、次のコード スニペットをノートブックに追加します。
from pyspark.sql import SparkSession
from azure.identity import DefaultAzureCredential
# Set up the managed identity credential
credential = DefaultAzureCredential()
# Retrieve the access token for Azure Cosmos DB
token = credential.get_token("https://cosmos.azure.com/.default")
# Construct the target connection string using the access token
target_account_name = "<ACCOUNTNAME>" # Replace with your Cosmos DB account name
target_connection_string = (
f"mongodb://:@{target_account_name}.mongo.cosmos.azure.com:10255/"
f"?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@{target_account_name}@"
f"&authMechanism=PLAIN&authSource=$external&password={token.token}"
)
# MongoDB source connection details
source_connection_string = "mongodb://<USERNAME>:<PASSWORD>@<HOST>:<PORT>/<AUTHDB>" # Replace with your source MongoDB connection
source_db = "<DB NAME>"
source_collection = "<COLLECTIONNAME>"
target_db = "<DB NAME>"
target_collection = "<COLLECTIONNAME>"
# Initialize Spark session
my_spark = SparkSession \
.builder \
.appName("MongoDB to CosmosDB Migration") \
.config("spark.mongodb.input.uri", source_connection_string) \
.config("spark.mongodb.output.uri", target_connection_string) \
.getOrCreate()
# Read from source MongoDB
df = my_spark.read.format("com.mongodb.spark.sql.DefaultSource") \
.option("uri", source_connection_string) \
.option("database", source_db) \
.option("collection", source_collection) \
.load()
# Write to Azure Cosmos DB (MongoDB API)
df.write.format("mongo") \
.mode("append") \
.option("uri", target_connection_string) \
.option("database", target_db) \
.option("collection", target_collection) \
.save()
移行を実行する
移行ノートブックを実行し、レート制限エラーの可能性がないかプロセスを監視し、必要に応じてパラメーターを調整して、スムーズなデータ転送を実現します。
移行のパフォーマンスを向上させる
仮想コアベースの Azure Cosmos DB for MongoDB クラスター層によっては、移行パフォーマンスを向上させるためにいくつかの設定を調整することが必要になる場合があります。 これらの設定には、次のようなものがあります。
- Spark クラスターの構成: ワーカーとコアの数を最適化すると、データ移行を処理するための計算機能に直接影響します。
- バッチ サイズ調整: maxBatchSize パラメーターのチューニングは、レート制限エラーの軽減に役立ちます。 このパラメーターは、各バッチでターゲット データベースに送信されるドキュメントの数を制御します。
移行をオンラインまたはオフラインで行っているかに関係なく、移行プロジェクトに Azure Databricks を使用すると、大規模なデータセットを MongoDB から仮想コアベースの Azure Cosmos DB for MongoDB に転送するための堅牢でスケーラブルなソリューションが提供されます。 これにより移行速度とデータ変換を柔軟に調整できるため、移行プロセスが確実に成功します。