Spark mllib svd给出:Java OutOfMemory错误

时间:2015-03-10 21:02:47

标签: apache-spark

我正在使用mllib的svd库在一个大矩阵上做一些降维:

  • 数据大约是20G,

  • 并且火花记忆是60G

我收到以下警告和错误消息:

  

WARN ARPACK:无法从以下位置加载实施:   com.github.fommil.netlib.NativeSystemARPACK WARN ARPACK:失败   从以下地址加载实现:com.github.fommil.netlib.NativeRefARPACK   WARN BLAS:无法从以下位置加载实现:   com.github.fommil.netlib.NativeSystemBLAS WARN BLAS:加载失败   实现自:com.github.fommil.netlib.NativeRefBLAS异常   在线程“main”中java.lang.OutOfMemoryError:Java堆空间

at java.util.Arrays.copyOfRange(Arrays.java:2766) 
at org.apache.spark.mllib.linalg.EigenValueDecomposition$.symmetricEigs(EigenValueDecomposition.scala:128)

at org.apache.spark.mllib.linalg.distributed.RowMatrix.computeSVD(RowMatrix.scala:258)

at org.apache.spark.mllib.linalg.distributed.RowMatrix.computeSVD(RowMatrix.scala:190)

要解决警告消息,我使用该命令构建 Spark(1.2) 本地-Pnetlib-lgpl,当我在本地测试时,警告消息消失了。并且日志显示netlib库正常工作:

  

15/03/05 20:07:03 INFO JniLoader:已成功加载   /tmp/jniloader7217840327264308862netlib-native_system-linux-x86_64.so   15/03/05 20:07:11 INFO JniLoader:已加载   netlib-native_system-linux-x86_64.so

然后我安装了使用-Pnetlib-lgpl on AWS EMR编译的 Spark(1.2),但仍显示警告和错误消息。

我不确定这是否是我本地编译的问题,所以我编译了Spark (1.2) on AWS EC2并将其安装在AWS EMR上,但警告和错误消息仍然显示出来。

有谁能告诉我如何解决这个问题?非常感谢!

1 个答案:

答案 0 :(得分:0)

问题部分解决了。感谢@SeanOwen的评论。

我收到java内存错误的原因是因为顶部特征向量的计算在驱动程序上,所以我需要确保在驱动程序节点上有足够的内存。

spark-submit--driver-memory 5G一起使用时,问题就解决了。

但警告信息仍然存在。