【问题标题】:Azure Data factory and Data flow taking too much time to process data from staging to DatabaseAzure 数据工厂和数据流花费太多时间来处理从暂存到数据库的数据
【发布时间】:2019-12-19 15:39:15
【问题描述】:

所以我有一个每天运行的数据工厂,它从 oracle 本地数据库中选择大约 80M 记录的数据并将其移动到 parquet 文件中,这大约需要 2 个小时我想加快这个过程......也是在db中插入和更新数据的数据流过程

拼花文件设置

下一步是从 parquet 文件调用数据流,将数据作为 upsert 移动到数据库,但这也需要太多时间

数据流设置

让我知道数据流的计算类型

内存优化 计算优化 通用

循环之后更新

下沉时间

【问题讨论】:

  • 我已经更新了流程并使用 Round Robin 进行了优化,并选择了 10 个分区。并且添加新图像的好处是,从源到它需要 1 分钟,但到 DB 的接收器需要 48 分钟,但整个过程仍然需要 111 分钟:(

标签: azure azure-data-factory azure-data-factory-2


【解决方案1】:

能否打开数据流的监控详细执行计划?单击数据流中的每个阶段,然后查看大部分时间都花在了哪里。您应该在视图顶部看到设置计算环境花费了多少时间,读取源代码花费了多少时间,还可以查看接收器上的总写入时间。

我有一些如何查看和优化此here 的示例。

【讨论】:

  • 感谢@Mark 检查最后一张图片
  • 启动 Spark 集群需要 6 分钟,写入数据库需要 45 分钟(Sink 中的阶段时间)。数据流的总端到端执行时间是多少?
  • 我已经更新了新流程
【解决方案2】:

好吧,我推测 45 分钟将 85M 文件填充到 SQL 数据库中并不可怕。您可以将任务分解为多个块,看看完成时间最长的是什么。您可以访问 Databricks 吗?我用 Databricks 做了很多预处理,我发现 Spark 超级超级快!!如果您可以在 Databricks 中进行预处理并将所有内容推送到您的 SQL 世界中,那么您可能会有一个最佳解决方案。

【讨论】:

  • 谢谢我正在寻找火花 :)
  • 我已经更新了新流程
  • 现在使用 Spark?
  • 我发现您可能会花费无数个小时以错误的方式做某事,但如果这是您知道的唯一方式,那么您就会陷入困境。或者,花几个小时做一些研究,找出更好的做事方法,然后为自己节省无数时间,以备不时之需。
【解决方案3】:

根据文档 - https://docs.microsoft.com/en-us/azure/data-factory/concepts-data-flow-performance#partitioning-on-sink,您可以尝试在 Sink 的 Optimize 选项卡下修改您的 partition 设置吗?

在将分区策略更改为round robin 并提供分区数为5 后,我在默认分区设置中遇到了类似的问题,其中 1M 记录本身的数据加载需要接近 30 分钟以上(对于我的案例)负载发生在不到一分钟。

尝试同时尝试 Source 分区 (https://docs.microsoft.com/en-us/azure/data-factory/concepts-data-flow-performance#partitioning-on-source) 和 Sink 分区设置,以得出最佳策略。这应该会缩短数据加载时间

【讨论】:

  • 我已经更新了新流程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2012-03-17
  • 1970-01-01
  • 2018-09-23
  • 2023-03-17
  • 2020-11-26
  • 2014-08-19
相关资源
最近更新 更多