假设您已经在Spark中编写了算法,并且可以使用1 .. X
核心在本地模式下运行的大小为N
的数据集上评估其性能。你会如何处理这些问题:
Y
个节点和数据大小M >> N
的群集上运行的运行时是什么?M >> N
的数据集的最小可能运行时间是多少?显然,这受到无数因素的影响,并且几乎不可能给出精确的估计。但你怎么想出一个有根据的猜测呢?在本地模式下运行主要允许测量CPU使用率。是否有一个经验法则来计算洗牌中的磁盘+网络负载?有没有方法来模拟集群的性能?
答案 0 :(得分:2)
数据加载可以估计为O(n)。
可以估算每个阶段的算法。整个算法是所有阶段的积累。注意,每个阶段都有不同的数据量,它与第一个输入数据有关系。
假设
然后算法的时间是O(n)T * M / N / X
然后算法的时间是O(n log n)T * M / N / X * log(M/N)
修改强>
如果有一个大的洗牌,那么O(n)就是带宽。添加的额外时间为dataSize(M)/bandwidth
。
如果有很多大的洗牌,那么考虑改进算法。