Spark Map任务因(?)真的很大GC时间(日志里面)而陷入困境,从哪里开始?

时间:2017-11-24 07:37:47

标签: scala hadoop apache-spark garbage-collection

我正在做一个基于http://learningfrombigdata.com/semantic-similarity-between-sentences-using-apache-spark/的项目,对代码稍作修改

这是我的代码,其中spark失败(代码在第二个映射期间失败,其中距离是计算量很大的函数):

def distance(lvec: String, rvec: String): Double = {
    val l = Vectors.dense(lvec.split(',').map(_.toDouble))
    val r = Vectors.dense(rvec.split(',').map(_.toDouble))
    math.sqrt(Vectors.sqdist(l, r))
}

val wordVectors = wordPairs.map({case (idx, (lword, rword)) => (rword, (idx, lword))})
        .join(w2v) 
        .map({case (rword, ((idx, lword), rvec)) => (lword, (idx, rvec))})
        .join(w2v) 
        .map({case (lword, ((idx, rvec), lvec)) => ((idx, lword), (lvec, rvec))})
        .map({case ((idx, lword), (lvec, rvec)) => ((idx, lword), List(distance(lvec, rvec)))})

这是它去世的地方(思考了很久之后): https://imgur.com/a/yKXIO

我看了一下执行者正在做什么,并为失败的人发现了一些奇怪的GC时间:https://imgur.com/a/zWhjy

然后我启用了详细的GC并为执行程序编写了GC日志,以下是它们的外观: https://imgur.com/a/aAjJx

我对垃圾收集并不是很了解,所以我不太了解这个日志,但在我看来,它通常不应该经常做“Full GC”。

我想知道接下来应该尝试什么:

  1. 调整GC本身,如下所示:https://databricks.com/blog/2015/05/28/tuning-java-garbage-collection-for-spark-applications.html

  2. 调整火花参数(以下是我目前的参考资料):

  3. 重写代码

  4. 其他 - 如果我需要发布其他信息,请告诉我

0 个答案:

没有答案