优化Azure Databricks中每个核心的任务数量

问题描述 投票:0回答:1

我正在使用Azure Databricks使用SparkR和gapplyCollect()部署一些通过几个工作线程并行化的R代码。


Project overview

  • 我有10000多个类似的数据源,每天都要生成大量的交易信息进行分析;
  • 我有一个R函数,一次分析1个数据源的所有信息,给我一些有关该特定数据源的宝贵见解;
  • 因此,每天我需要执行我的R功能10000次以上来分析我的所有数据。

Code Logic

  1. 读取所有数据(来自关系数据库)作为SparkDataframe
  2. groupBy()基于我的数据源列的SparkDataframe(数据由数据源列均匀分布)
  3. 在最后一步的gapplyCollect()结果上使用GroupedData,用于在每个数据分区上应用我的R函数。 每次执行的结果都是一个小的R DataFrame,有几行(dim ==(5,5))。 所有结果都通过gapplyCollect()执行加入,生成一个小的R DataFrame(<100k数字行),整合所有结果。
  4. 将结果保留在我的DBFS上。

My issue

在我的开发环境中,我正在进行一些实验,并行分析250个数据源,我正在使用4个小工作者(VM类型:Standard_F4s)。

gapplyCollect()正在向工作人员发送我的R函数,但是......是否可以自定义每个工作人员要执行的最大活动任务数?默认情况下,我看到Databricks允许每个工作5个活动任务。

Azure Databricks maximum tasks per worker

  • 例如:如何允许每个工作程序并行执行8个任务? spark-submit适合这项任务吗?

我从未使用过spark-submit,但我没有找到在Azure Databricks上使用它的好文档。

  • 我将使用每日预定作业将此代码投入生产。在工作中,我可以使用例如spark-submit功能来更改--executor-cores选项吗?
  • 如果是,我如何保证我在所有工作驱动程序+工作者中安装forecast CRAN库,因为Azure Databricks不允许我在使用spark-submit时在GUI中定义库?
apache-spark databricks sparkr spark-submit azure-databricks
1个回答
0
投票

我使用所有内部创建的资源(如VM,磁盘和网络接口)访问了Databricks的托管资源组。

在那里,我检查了每个工作人员的CPU消耗指标。这是2x Worker集群的结果:

Databricks workers CPU usage metrics

这是捕获任务最终结束时刻的相同图表:

Databricks workers CPU usage metrics 2

根据这些指标,我们可以看到:

  • 平均CPU使用率为85~87%
  • 最大CPU使用率为92~96%
  • 最低CPU使用率为70~80%

这些指标适用于我的用例...但如果有人有关于如何在Databricks中使用spark-submit的任何线索,请随时在这里分享新的答案。

© www.soinside.com 2019 - 2024. All rights reserved.