0

我正在使用Azure Databricks通过使用SparkRgapplyCollect().


项目概况

  • 我有10000 多个类似的数据源,每天生成大量交易信息进行分析;
  • 我有一个R 函数,可以一次分析1 个数据源的所有信息,为我提供有关该特定数据源的一些有价值的见解;
  • 因此,每天我需要执行我的 R 函数 10000 多次来分析我的所有数据。

代码逻辑

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

我的问题

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

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

Azure Databricks 每个工作人员的最大任务数

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

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

  • 我将使用每日计划的作业将此代码投入生产。在工作中,我可以使用例如该spark-submit功能来更改--executor-cores选项吗?

  • 如果是,我如何保证我forecast在所有工作驱动程序 + 工作人员中都安装了 CRAN 库,因为Azure Databricks不允许我在使用spark-submit?

4

1 回答 1

1

我已经使用所有内部创建的资源(如虚拟机、磁盘和网络接口)访问了 Databricks 的托管资源组。

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

Databricks 工作人员 CPU 使用率指标

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

Databricks 工作人员 CPU 使用率指标 2

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

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

这些指标适用于我的用例......但如果有人对如何使用spark-submitDatabricks 有任何线索,请随时在此处分享新答案。

于 2019-02-26T08:39:55.847 回答