我在一台机器上运行火花,有24个核心,48G Ram。
我能够训练一个有600万用户,120万个项目,2.16亿个动作(视图/购买)的隐式模型。
现在,我试图对700万用户、150万用户和4.4亿用户在项目上进行推荐。
我使用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,本地主机,执行器驱动程序):java.lang.OutOfMemoryError: Java堆空间,我可以得到那个执行器正在耗尽内存。
我尝试过增加执行器内存,减少驱动程序内存,但这没有帮助,我仍然得到同样的错误。
错误堆栈跟踪:https://www.dropbox.com/s/g2vlmtjo8bb4gd1/javaheapspaceerror.txt?dl=0
发布于 2017-04-27 15:08:17
您需要设置检查点目录:-)许多算法在数据密集的情况下使用这种方法,因为RDD谱系在其他情况下会变得疯狂并导致这些问题。
sc.setCheckpointDir('/tmp')https://stackoverflow.com/questions/43630917
复制相似问题