【问题标题】:Spark gives a StackOverflowError when training using ALS使用 ALS 进行训练时,Spark 会出现 StackOverflowError
【发布时间】:2015-10-07 16:25:54
【问题描述】:

尝试在 Spark 的 MLLib 中使用 ALS 训练机器学习模型时,我不断收到 StackoverflowError。这是堆栈跟踪的一个小示例:

Traceback (most recent call last):
  File "/Users/user/Spark/imf.py", line 31, in <module>
    model = ALS.train(rdd, rank, numIterations)
  File "/usr/local/Cellar/apache-spark/1.3.1_1/libexec/python/pyspark/mllib/recommendation.py", line 140, in train
    lambda_, blocks, nonnegative, seed)
  File "/usr/local/Cellar/apache-spark/1.3.1_1/libexec/python/pyspark/mllib/common.py", line 120, in callMLlibFunc
    return callJavaFunc(sc, api, *args)
  File "/usr/local/Cellar/apache-spark/1.3.1_1/libexec/python/pyspark/mllib/common.py", line 113, in callJavaFunc
    return _java2py(sc, func(*args))
  File "/usr/local/Cellar/apache-spark/1.3.1_1/libexec/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
  File "/usr/local/Cellar/apache-spark/1.3.1_1/libexec/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o35.trainALSModel.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 40.0 failed 1 times, most recent failure: Lost task 0.0 in stage 40.0 (TID 35, localhost): java.lang.StackOverflowError
        at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2296)
        at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2589)

尝试运行 .mean() 计算均方误差时也会出现此错误。它出现在 Spark 的 1.3.1_1 和 1.4.1 版本中。我使用的是 PySpark,增加可用内存并没有帮助。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    解决方案是添加检查点,以防止代码库使用的递归造成溢出。首先,创建一个新目录来存储检查点。然后,让您的 SparkContext 使用该目录进行检查点。这是 Python 中的示例:

    sc.setCheckpointDir('checkpoint/')
    

    您可能还需要向 ALS 添加检查点,但我无法确定这是否会产生影响。要在此处添加检查点(可能没有必要),只需:

    ALS.checkpointInterval = 2
    

    【讨论】:

    • 在 Spark 1.5.1 上遇到了同样的问题。只需要sc.setCheckpointDir() 电话。
    • @brian.keng ,如果在 aws EMR 中,我必须输入什么来设置我的检查点目录?谢谢
    • 我知道这是一个老问题,但是你们能详细说明一下你们是如何解决这个问题的吗?
    • @ihsansat 您是否已经知道在使用 AWS EMR 时要输入什么内容?我也有同样的问题。
    • 与 Spark 2.1.0 相同的问题。设置 sc.setCheckpointDir("target") 会有所帮助。想知道为什么需要它...
    猜你喜欢
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多