sparkMap任务由于(?)非常大的gc时间(日志在里面)而被卡住了,接下来该怎么办?

c6ubokkw  于 2021-06-01  发布在  Hadoop
关注(0)|答案(0)|浏览(253)

我在做一个基于http://learningfrombigdata.com/semantic-similarity-between-sentences-using-apache-spark/ 对代码稍加修改
以下是spark失败的代码(代码在第二个Map期间失败,其中距离是一个计算量相当大的函数):

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
我对垃圾收集了解不多,所以我不太理解这个日志,但在我看来,它不应该经常执行所谓的“fullgc”。
我想知道下一步我应该尝试什么:
调整gc本身,如下所示:https://databricks.com/blog/2015/05/28/tuning-java-garbage-collection-for-spark-applications.html
调整spark参数(以下是我当前的参数供参考):
重写代码
其他东西-如果我需要张贴额外的信息,请告诉我

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题