预测集群上的Spark性能/可伸缩性?

时间:2016-07-12 19:17:44

标签: performance apache-spark benchmarking scalability

假设您已经在Spark中编写了算法,并且可以使用1 .. X核心在本地模式下运行的大小为N的数据集上评估其性能。你会如何处理这些问题:

  • Y个节点和数据大小M >> N的群集上运行的运行时是什么?
  • 使用任意数量的节点,大小为M >> N的数据集的最小可能运行时间是多少?

显然,这受到无数因素的影响,并且几乎不可能给出精确的估计。但你怎么想出一个有根据的猜测呢?在本地模式下运行主要允许测量CPU使用率。是否有一个经验法则来计算洗牌中的磁盘+网络负载?有没有方法来模拟集群的性能?

1 个答案:

答案 0 :(得分:2)

数据加载可以估计为O(n)。

可以估算每个阶段的算法。整个算法是所有阶段的积累。注意,每个阶段都有不同的数据量,它与第一个输入数据有关系。

  • 如果整个算法都有O(n),则它是O(n)。
  • 如果整个算法有O(n log n),那么它是O(n log n)。
  • 如果整个算法具有O(n 2 ),则需要改进算法以适合M>> Ñ

假设

  • 没有大的洗牌/网络足够快
  • 每个节点具有相同的配置
  • 单个节点上的数据大小为N的总时间花费为T.
  • 节点数为X

然后算法的时间是O(n)T * M / N / X

然后算法的时间是O(n log n)T * M / N / X * log(M/N)

修改

如果有一个大的洗牌,那么O(n)就是带宽。添加的额外时间为dataSize(M)/bandwidth

如果有很多大的洗牌,那么考虑改进算法。