我现在正试图通过数据工厂将数据从cosmosdb复制到数据湖存储。
但是,性能很差,大约100KB / s,数据量是100+ GB,并且不断增加。完成需要10天以上,这是不可接受的。
Microsoft文档https://docs.microsoft.com/en-us/azure/data-factory/data-factory-copy-activity-performance提到从cosmos到数据湖存储的最大速度为1MB / s。即便如此,表现仍然对我们不利。
宇宙迁移工具不起作用,没有数据导出,也没有问题日志。
Data Lake analytics usql可以提取外部源,但目前只支持Azure DB / DW和SQL Server,不支持cosmosdb。
如何/有哪些工具可以提高复制性能?
答案 0 :(得分:0)
根据您的说明,我建议您尝试设置高cloudDataMovementUnits以提高效果。
云数据移动单元(DMU)是表示数据工厂中单个单元的功率(CPU,内存和网络资源分配的组合)的度量。 DMU可用于云到云复制操作,但不能用于混合副本。 默认情况下,Data Factory使用单个云DMU执行单个“复制活动”运行。要覆盖此默认值,请为cloudDataMovementUnits属性指定值,如下所示。有关在为特定复制源和接收器配置更多单元时可能获得的性能增益级别的信息,请参阅性能参考。
注意:只有当您将多个文件从Blob存储/ Data Lake Store / Amazon S3 /云FTP /云SFTP复制到Blob存储/ Data Lake Store / Azure SQL数据库时,8及以上的设置才有效。
因此,您可以设置的最大DMU为4。
此外,如果此速度不符合您当前的要求。
我建议你可以编写自己的逻辑来将documentdb复制到data lake。
您可以创建多个webjobs,可以使用从documentdb到数据湖的并行副本。
您可以根据索引范围或分区转换文档,然后您可以使每个webjob复制不同的部分。在我看来,这会更快。
关于dmu,我可以直接使用它还是先申请它?你的网络工作是dotnet活动吗?你能提供更多细节吗?
据我所知,你可以直接使用dmu,你可以直接在json文件中添加dmu值,如下所示:
"activities":[
{
"name": "Sample copy activity",
"description": "",
"type": "Copy",
"inputs": [{ "name": "InputDataset" }],
"outputs": [{ "name": "OutputDataset" }],
"typeProperties": {
"source": {
"type": "BlobSource",
},
"sink": {
"type": "AzureDataLakeStoreSink"
},
"cloudDataMovementUnits": 32
}
}
]
webjob可以通过三种方式在Azure App Service Web应用程序中运行WebJobs中的程序或脚本:按需,连续或按计划。
这意味着您可以编写C#程序(或使用其他代码语言)来运行程序或脚本,将数据从documentdb复制到数据湖(所有逻辑都应由您自己编写)。