我在一台机器上运行火花,有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
答案 0 :(得分:0)
你需要设置检查点目录:-)许多算法在非常临时数据密集时使用它,因为RDD沿袭变得疯狂,否则会导致这些问题。
sc.setCheckpointDir('/tmp')