我有一个很大的边列表作为5000分区RDD。现在,我做的很简单但是 洗牌重的操作:
val g = Graph.fromEdges(edges, ...).partitionBy(...)
val subs = Graph(g.collectEdges(...), g.edges).collectNeighbors()
subs.saveAsObjectFile("hdfs://...")
该工作分为9个阶段(每个5000个任务)。我的群集在同一本地网络中有3名工作人员。
尽管Spark 1.5.0的工作速度要快得多,并且前几个阶段在满载时运行,
从其中一个阶段(mapPartitions at GraphImpl.scala:235
)开始,一台机器突然完成了99%的任务
而其他人则承担与核心一样多的任务,并且这些任务保持RUNNING
直到实际工作的一台机器
完成一切。有趣的是,在Spark 1.3.1上,所有阶段都可以分配任务
在集群机器之间平均分配。我怀疑这可能是1.5.0中的错误
UPD:看起来问题与数据无关:我随机生成了一个高度齐次的图(每个顶点都有5度)并观察到相同的行为。所以这是一个奇怪的硬件问题或与钨有关的问题。仍然没有确切答案