2016-06-09 68 views
1

我想了解,当从spark-submit提交作业时,我已经用4个节点引发部署的系统如何在火花中分发工作。如果有大量的数据需要操作,我想明确地知道分割的任务有多少个阶段,以及有多少个执行者为这项工作运行。想要了解这是如何决定每个阶段。如何在火花中分发任务

+0

您的应用程序将在Spark上运行的很多方式都可以在spark提交的命令行中进行配置,其中包括执行程序,节点等的数量:http://spark.apache.org/docs/latest/configuration。 HTML –

回答

1

很难完全回答这个问题,因为存在很多不确定因素。

阶段数量仅取决于描述的工作流程,其中包括不同类型的映射,缩小,连接等。如果您了解它,则基本上可以从代码中正确读取它。但最重要的是,这可以帮助您编写更多的高性能算法,因为众所周知,必须避免洗牌。例如,当您进行连接时,它需要洗牌 - 这是一个边界阶段。这很简单,你必须打印rdd.toDebugString(),然后看看缩进(看here),因为缩进是一个洗牌。

但是,执行者的数量完全不同,因为它取决于分区数量。这就像为2个分区只需要2执行人,但对于40倍的 - 所有4个,因为你只有4.但另外的分区数量可能取决于几个属性,你可以在提供火花提交:

  • spark.default.parallelism参数或
  • 数据源使用(FE对HDFS和卡桑德拉是不同的)

这将会是一个很好的保持在所有集群中核心的忙,但没有更多的(意味着单个进程只有一个分区),因为每个分区的处理需要一定的开销。另一方面,如果数据倾斜,那么某些内核需要更多时间来处理更大的分区,在这种情况下,它有助于将数据分割到更多分区,以便所有内核都处于大致相同的时间。这有助于同时平衡群集和吞吐量。