【问题标题】:spark 1.2.0 mllib kmeans: Out Of Memory Errorspark 1.2.0 mllib kmeans:内存不足错误
【发布时间】:2015-07-08 04:00:22
【问题描述】:

我是spark新手,我使用KMeans算法对一个数据集进行聚类,大小为484M,213104维,我的代码如下:

val k = args(0).toInt
val maxIter = args(1).toInt
val model = new KMeans().setK(k).setMaxIterations(maxIter).setEpsilon(1e-1).run(trainingData)
val modelRDD = sc.makeRDD(model.clusterCenters)
val saveModelPath = "/home/work/kMeansModel_" + args(0)
if(Files.exists(Paths.get(saveModelPath))) {
  FileUtils.deleteDirectory(new File(saveModelPath))
}
modelRDD.saveAsTextFile(saveModelPath)
val loss = model.computeCost(trainingData)
println("Within Set Sum of Squared Errors = " + loss)

当我设置 K = 150 时,它可以工作,但是当我设置 K = 300 时,它会抛出 java.lang.OutOfMemoryError: Java heap space 异常。我的配置:

--executor-memory 30G --driver-memory 4G --conf spark.shuffle.spill=false --conf spark.storage.memoryFraction=0.1

【问题讨论】:

  • 您可以试用 Spark 1.3 吗?发行说明提到了 KMeans 的更高性能实现(但只能适用于 KMeans||)
  • 您是否使用 SBT 来执行您的程序?您是否尝试为进程分配更多内存?
  • 我尝试分配更多内存,从 20G 到 30G,但问题仍然存在

标签: apache-spark apache-spark-mllib


【解决方案1】:

您应该告诉我们更多关于环境的信息。您是在真实集群中运行,还是在本地模式下运行?

既然你说你是 Spark 的新手,我假设你只是在本地机器上玩。在这种情况下,我认为这个post可以帮助到你。

更新

你的错误并不是真正的OOM,而是堆空间异常。你缓存了你的 RDD 吗?

【讨论】:

  • 我只在一台机器上部署了spark,worker的配置如下:export SPARK_WORKER_CORES=11 export SPARK_WORKER_MEMORY=40g,我用bin/spark-submit --class "userClustering" --master spark://md-machinelearning0-bgp0.hy01:7077 --executor-memory 30G --driver-memory 4G --conf spark.shuffle.spill=false --conf spark.storage.memoryFraction=0.1 /home/work/downloadDetail.jar运行应用程序
  • 是的,我最初缓存了RDD,然后我尝试不缓存它,但问题仍然存在。 spark.storage.memoryFraction=0.1,executor内存30G,数据集大小484M,所以用来缓存的内存足够
猜你喜欢
  • 2016-11-26
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多