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

时间:2019-02-19 23:43:13

标签: apache-spark databricks sparkr spark-submit azure-databricks

我正在使用 Azure Databricks 部署一些R代码,这些代码使用 SparkR gapplyCollect()通过多个工作程序并行化。


项目概述

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

代码逻辑

  1. SparkDataframe的形式(从关系数据库中读取所有数据)
  2. groupBy() SparkDataframe基于我的数据源列(数据由数据源列均匀分布)
  3. 在上一步的gapplyCollect()结果中使用GroupedData,将我的R函数应用于每个数据分区。
    • 每次执行的结果是一个小的R DataFrame,其中有几行( dim ==(5,5))。
    • 通过执行gapplyCollect()将所有结果结合在一起,生成一个小的R DataFrame (<100k数字行),以合并所有结果。
  4. 将结果持久保存在我的 DBFS 上。

我的问题

在我的开发环境中,我正在进行一些实验,以并行分析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选项?

  • 如果是的话,由于 Azure Databricks 不允许我在所有工作驱动程序+工人中安装forecast CRAN库,使用spark-submit时在GUI中定义库?

1 个答案:

答案 0 :(得分: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%

这些指标适合我的用例... 但是,如果有人对如何将spark-submit与Databricks一起使用有任何线索,请随时在此处分享新答案。 < / p>