Spark ALS:用完java堆空间:java.lang.OutOfMemoryError:Java堆空间

时间:2017-04-26 09:59:26

标签: python apache-spark pyspark apache-spark-mllib

我在一台机器上运行火花,有24个核心,48G Ram。

我能够训练一个含有6M用户,1.2M项目,216M动作(观看/购买)的隐式模型

现在,我正在尝试针对项目运行7M用户和1.5M项目以及440M用户操作的建议。

我正在使用20个执行程序,驱动程序内存15G,执行程序内存4G。

排名8,15次迭代训练。

在使用ALS.trainImplicit训练模型时,我得到java堆空间内存不足错误。

model = ALS.trainImplicit(training_RDD, rank, seed=seed, iterations=iterations, lambda_=regularization_parameter, alpha=config.alpha)
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/mllib/recommendation.py", line 314, in trainImplicit
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/mllib/common.py", line 130, in callMLlibFunc
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/mllib/common.py", line 123, in callJavaFunc
  File "/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
  File "/usr/local/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
  File "/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o86.trainImplicitALSModel.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 1 times, most recent failure: Lost task 0.0 in stage 4.0 (TID 44, localhost, executor driver): java.lang.OutOfMemoryError: Java heap space
 at scala.collection.mutable.ArrayBuilder$ofInt.mkArray(ArrayBuilder.scala:323)

我无法了解如何更正此错误。 来自错误:阶段4.0中的丢失任务0.0(TID 44,localhost,执行程序驱动程序):java.lang.OutOfMemoryError:Java堆空间,我可以得到执行程序内存不足。

我尝试增加执行程序内存,减少驱动程序内存,但它没有帮助,我仍然得到同样的错误。

错误的堆栈跟踪:https://www.dropbox.com/s/g2vlmtjo8bb4gd1/javaheapspaceerror.txt?dl=0

1 个答案:

答案 0 :(得分:0)

你需要设置检查点目录:-)许多算法在非常临时数据密集时使用它,因为RDD沿袭变得疯狂,否则会导致这些问题。

sc.setCheckpointDir('/tmp')
相关问题