groupByKey函数的机制

时间:2016-09-04 03:42:02

标签: apache-spark

我是新手并尝试了解Spark的内部实施。我已经做了一个测试来查看groupByKey的缩放行为。结果表明,执行时间与每个节点的核心数无关,但如果增加节点数,我可以看到时间大大减少。

我知道这个操作应该是磁盘和网络上的瓶颈。因此,每个节点的核心数量的观察是因为有限的网络和磁盘带宽?如果答案是肯定的话,如果增加节点数,执行时间是否会线性减小,因为带宽会线性增加?如果有人根据@obs.bindable class Person { @obs.property public Name: string; @obs .bind(()=>Person.prototyope.Name.FirstName) .before(()=>Person.prototype.beforeFirstNameChange) .after(()=>Person.prototype.FirstNameChanged) .property public FirstName: string; @obs.event public beforeFirstNameChange = () => { console.log('before first name is changed.'); } @obs.event public FirstNameChanged = () => { console.log('first name is changed.'); } } @obs.bindable class Name{ @obs.property public Surname: string; @obs.property public FirstName: string; } let p = new Person(); p.FirstName = 'Jack'; // p.Name.FirstName will change as well. 的实施情况解释它,将非常感激。)

1 个答案:

答案 0 :(得分:0)

一般来说groupByKey受限于:

  • 要洗牌的数据量。
  • 聚合的,非惰性值集合的大小。
  • 后续垃圾收集。

根据数据分布和群集拓扑,您可以通过增加节点数量来减少总体延迟,但在一天结束时,它无法直接解决上面列举的任何问题。此外,每个密钥必须由一个执行器最终处理。